123
123
QTest::addColumn<EmailParseResult>( "expErrorCode" );
126
QTest::newRow( "" ) << "matt@@fruitsalad.org" << TooManyAts;
126
QTest::newRow( "1" ) << "matt@@fruitsalad.org" << TooManyAts;
129
QTest::newRow( "" ) << "mattfruitsalad.org" << TooFewAts;
129
QTest::newRow( "2" ) << "mattfruitsalad.org" << TooFewAts;
131
131
// An empty string
132
QTest::newRow( "" ) << QString() << AddressEmpty;
132
QTest::newRow( "3" ) << QString() << AddressEmpty;
134
134
// email address starting with a @
135
QTest::newRow( "" ) << "@mattfruitsalad.org" << MissingLocalPart;
135
QTest::newRow( "4" ) << "@mattfruitsalad.org" << MissingLocalPart;
137
137
// make sure that starting @ and an additional @ in the same email address don't conflict
138
138
// trap the starting @ first and break
139
QTest::newRow( "" ) << "@matt@fruitsalad.org" << MissingLocalPart;
139
QTest::newRow( "5" ) << "@matt@fruitsalad.org" << MissingLocalPart;
141
141
// email address ending with a @
142
QTest::newRow( "" ) << "mattfruitsalad.org@" << MissingDomainPart;
142
QTest::newRow( "6" ) << "mattfruitsalad.org@" << MissingDomainPart;
144
144
// make sure that ending with@ and an additional @ in the email address don't conflict
145
QTest::newRow( "" ) << "matt@fruitsalad.org@" << MissingDomainPart;
145
QTest::newRow( "7" ) << "matt@fruitsalad.org@" << MissingDomainPart;
147
147
// unbalanced Parens
148
QTest::newRow( "" ) << "mattjongel)@fruitsalad.org" << UnbalancedParens;
148
QTest::newRow( "8" ) << "mattjongel)@fruitsalad.org" << UnbalancedParens;
150
150
// unbalanced Parens the other way around
151
QTest::newRow( "" ) << "mattjongel(@fruitsalad.org" << UnbalancedParens;
151
QTest::newRow( "9" ) << "mattjongel(@fruitsalad.org" << UnbalancedParens;
153
153
// Correct parens just to make sure it works
154
QTest::newRow( "" ) << "matt(jongel)@fruitsalad.org" << AddressOk;
154
QTest::newRow( "10" ) << "matt(jongel)@fruitsalad.org" << AddressOk;
156
156
// Check that anglebrackets are closed
157
QTest::newRow( "" ) << "matt douhan<matt@fruitsalad.org" << UnclosedAngleAddr;
157
QTest::newRow( "11" ) << "matt douhan<matt@fruitsalad.org" << UnclosedAngleAddr;
159
159
// Check that angle brackets are closed the other way around
160
QTest::newRow( "" ) << "matt douhan>matt@fruitsalad.org" << UnopenedAngleAddr;
160
QTest::newRow( "12" ) << "matt douhan>matt@fruitsalad.org" << UnopenedAngleAddr;
162
162
// Check that angle brackets are closed the other way around, and anglebrackets in domainpart
163
163
// instead of local part
164
QTest::newRow( "" ) << "matt douhan matt@<fruitsalad.org" << UnclosedAngleAddr;
164
QTest::newRow( "13" ) << "matt douhan matt@<fruitsalad.org" << UnclosedAngleAddr;
166
166
// check that a properly formated anglebrackets situation is OK
167
QTest::newRow( "" ) << "matt douhan<matt@fruitsalad.org>" << AddressOk;
167
QTest::newRow( "14" ) << "matt douhan<matt@fruitsalad.org>" << AddressOk;
169
169
// a full email address with comments angle brackets and the works should be valid too
170
QTest::newRow( "" ) << "Matt (jongel) Douhan <matt@fruitsalad.org>" << AddressOk;
170
QTest::newRow( "15" ) << "Matt (jongel) Douhan <matt@fruitsalad.org>" << AddressOk;
173
QTest::newRow( "" ) << "\"Matt Douhan\" <matt@fruitsalad.org>" << AddressOk;
173
QTest::newRow( "16" ) << "\"Matt Douhan\" <matt@fruitsalad.org>" << AddressOk;
175
175
// Double quotes inside parens
176
QTest::newRow( "" ) << "Matt (\"jongel\") Douhan <matt@fruitsalad.org>" << AddressOk;
176
QTest::newRow( "17" ) << "Matt (\"jongel\") Douhan <matt@fruitsalad.org>" << AddressOk;
178
178
// DOuble quotes not closed
179
QTest::newRow( "" ) << "Matt \"jongel Douhan <matt@fruitsalad.org>" << UnbalancedQuote;
179
QTest::newRow( "18" ) << "Matt \"jongel Douhan <matt@fruitsalad.org>" << UnbalancedQuote;
181
181
// Parens inside double quotes
182
QTest::newRow( "" ) << "Matt \"(jongel)\" Douhan <matt@fruitsalad.org>" << AddressOk;
182
QTest::newRow( "19" ) << "Matt \"(jongel)\" Douhan <matt@fruitsalad.org>" << AddressOk;
184
184
// Space in email
185
QTest::newRow( "" ) << "Matt Douhan < matt@fruitsalad.org >" << AddressOk;
185
QTest::newRow( "20" ) << "Matt Douhan < matt@fruitsalad.org >" << AddressOk;
187
187
// @ is allowed inisde doublequotes
188
QTest::newRow( "" ) << "\"matt@jongel\" <matt@fruitsalad.org>" << AddressOk;
188
QTest::newRow( "21" ) << "\"matt@jongel\" <matt@fruitsalad.org>" << AddressOk;
190
190
// anglebrackets inside dbl quotes
191
QTest::newRow( "" ) << "\"matt<blah blah>\" <matt@fruitsalad.org>" << AddressOk;
191
QTest::newRow( "22" ) << "\"matt<blah blah>\" <matt@fruitsalad.org>" << AddressOk;
193
193
// a , inside a double quoted string is OK, how do I know this? well Ingo says so
194
194
// and it makes sense since it is also a separator of email addresses
195
QTest::newRow( "" ) << "\"Douhan, Matt\" <matt@fruitsalad.org>" << AddressOk;
195
QTest::newRow( "23" ) << "\"Douhan, Matt\" <matt@fruitsalad.org>" << AddressOk;
197
197
// Domains literals also need to work
198
QTest::newRow( "" ) << "Matt Douhan <matt@[123.123.123.123]>" << AddressOk;
198
QTest::newRow( "24" ) << "Matt Douhan <matt@[123.123.123.123]>" << AddressOk;
200
200
// Typo in domain literal address
201
QTest::newRow( "" ) << "Matt Douhan <matt@[123.123.123,123]>" << UnexpectedComma;
201
QTest::newRow( "25" ) << "Matt Douhan <matt@[123.123.123,123]>" << UnexpectedComma;
203
203
// Some more insane tests but still valid so they must work
204
QTest::newRow( "" ) << "Matt Douhan <\"m@att\"@jongel.com>" << AddressOk;
204
QTest::newRow( "26" ) << "Matt Douhan <\"m@att\"@jongel.com>" << AddressOk;
207
QTest::newRow( "" ) << "matt@jongel.fibbel.com" << AddressOk;
207
QTest::newRow( "27" ) << "matt@jongel.fibbel.com" << AddressOk;
210
QTest::newRow( "" ) << "mailto:@mydomain" << DisallowedChar;
210
QTest::newRow( "28" ) << "mailto:@mydomain" << DisallowedChar;
212
212
// correct error msg when a comma is inside <>
213
QTest::newRow( "" ) << "Matt Douhan <matt@fruitsalad,org>" << UnexpectedComma;
213
QTest::newRow( "29" ) << "Matt Douhan <matt@fruitsalad,org>" << UnexpectedComma;
215
215
//several commentlevels
216
QTest::newRow( "" ) << "Matt Douhan (hey(jongel)fibbel) <matt@fruitsalad.org>" << AddressOk;
216
QTest::newRow( "30" ) << "Matt Douhan (hey(jongel)fibbel) <matt@fruitsalad.org>" << AddressOk;
218
218
// several comment levels and one (the outer) being unbalanced
219
QTest::newRow( "" ) << "Matt Douhan (hey(jongel)fibbel <matt@fruitsalad.org>"
219
QTest::newRow( "31" ) << "Matt Douhan (hey(jongel)fibbel <matt@fruitsalad.org>"
220
220
<< UnbalancedParens;
222
222
// several comment levels and one (the inner) being unbalanced
223
QTest::newRow( "" ) << "Matt Douhan (hey(jongelfibbel) <matt@fruitsalad.org>"
223
QTest::newRow( "32" ) << "Matt Douhan (hey(jongelfibbel) <matt@fruitsalad.org>"
224
224
<< UnbalancedParens;
226
226
// an error inside a double quote is no error
227
QTest::newRow( "" ) << "Matt Douhan \"(jongel\" <matt@fruitsalad.org>"
227
QTest::newRow( "33" ) << "Matt Douhan \"(jongel\" <matt@fruitsalad.org>"
230
230
// inside a quoted string double quotes are only allowed in pairs as per rfc2822
231
QTest::newRow( "" ) << "Matt Douhan \"jongel\"fibbel\" <matt@fruitsalad.org>"
231
QTest::newRow( "34" ) << "Matt Douhan \"jongel\"fibbel\" <matt@fruitsalad.org>"
232
232
<< UnbalancedQuote;
234
234
// a questionmark is valid in an atom
235
QTest::newRow( "" ) << "Matt? <matt@fruitsalad.org>" << AddressOk;
235
QTest::newRow( "35" ) << "Matt? <matt@fruitsalad.org>" << AddressOk;
238
QTest::newRow( "" ) << "\"testing, \\\"testing\" <matt@fruitsalad.org>"
238
QTest::newRow( "36" ) << "\"testing, \\\"testing\" <matt@fruitsalad.org>"
241
241
// escape a quote to many to see if it makes it invalid
242
QTest::newRow( "" ) << "\"testing, \\\"testing\\\" <matt@fruitsalad.org>"
242
QTest::newRow( "37" ) << "\"testing, \\\"testing\\\" <matt@fruitsalad.org>"
243
243
<< UnbalancedQuote;
245
245
// escape a parens and thus make a comma appear
246
QTest::newRow( "" ) << "Matt (jongel, fibbel\\) <matt@fruitsalad.org>"
246
QTest::newRow( "38" ) << "Matt (jongel, fibbel\\) <matt@fruitsalad.org>"
247
247
<< UnbalancedParens;
249
249
// several errors inside doublequotes
250
QTest::newRow( "" ) << "Matt \"(jongel,\\\" < fibbel\\)\" <matt@fruitsalad.org>"
250
QTest::newRow( "39" ) << "Matt \"(jongel,\\\" < fibbel\\)\" <matt@fruitsalad.org>"
254
QTest::newRow( "" ) << "matt-@fruitsalad.org" << AddressOk;
254
QTest::newRow( "40" ) << "matt-@fruitsalad.org" << AddressOk;
256
256
// underscore at the end of local part
257
QTest::newRow( "" ) << "matt_@fruitsalad.org" << AddressOk;
257
QTest::newRow( "41" ) << "matt_@fruitsalad.org" << AddressOk;
259
259
// how about ( comment ) in the domain part
260
QTest::newRow( "" ) << "matt_@(this is a cool host)fruitsalad.org" << AddressOk;
260
QTest::newRow( "42" ) << "matt_@(this is a cool host)fruitsalad.org" << AddressOk;
262
262
// To quote rfc2822 the test below is aesthetically displeasing, but perfectly legal.
263
QTest::newRow( "" ) << "Pete(A wonderful \\) chap) <pete(his account)@silly.test(his host)>"
263
QTest::newRow( "43" ) << "Pete(A wonderful \\) chap) <pete(his account)@silly.test(his host)>"
266
266
// quoted pair or not quoted pair
267
QTest::newRow( "" ) << "\"jongel '\\\" fibbel\" <matt@fruitsalad.org>" << AddressOk;
268
QTest::newRow( "" ) << "\"jongel '\" fibbel\" <matt@fruitsalad.org>" << UnbalancedQuote;
267
QTest::newRow( "44" ) << "\"jongel '\\\" fibbel\" <matt@fruitsalad.org>" << AddressOk;
268
QTest::newRow( "45" ) << "\"jongel '\" fibbel\" <matt@fruitsalad.org>" << UnbalancedQuote;
270
270
// full atext support according to rfc2822
271
QTest::newRow( "" ) << "!matt@fruitsalad.org" << AddressOk;
272
QTest::newRow( "" ) << "#matt@fruitsalad.org" << AddressOk;
273
QTest::newRow( "" ) << "$matt@fruitsalad.org" << AddressOk;
274
QTest::newRow( "" ) << "%matt@fruitsalad.org" << AddressOk;
275
QTest::newRow( "" ) << "&matt@fruitsalad.org" << AddressOk;
276
QTest::newRow( "" ) << "'matt@fruitsalad.org" << AddressOk;
277
QTest::newRow( "" ) << "*matt@fruitsalad.org" << AddressOk;
278
QTest::newRow( "" ) << "+matt@fruitsalad.org" << AddressOk;
279
QTest::newRow( "" ) << "/matt@fruitsalad.org" << AddressOk;
280
QTest::newRow( "" ) << "=matt@fruitsalad.org" << AddressOk;
281
QTest::newRow( "" ) << "?matt@fruitsalad.org" << AddressOk;
282
QTest::newRow( "" ) << "^matt@fruitsalad.org" << AddressOk;
283
QTest::newRow( "" ) << "_matt@fruitsalad.org" << AddressOk;
284
QTest::newRow( "" ) << "-matt@fruitsalad.org" << AddressOk;
285
QTest::newRow( "" ) << "`matt@fruitsalad.org" << AddressOk;
286
QTest::newRow( "" ) << "{matt@fruitsalad.org" << AddressOk;
287
QTest::newRow( "" ) << "|matt@fruitsalad.org" << AddressOk;
288
QTest::newRow( "" ) << "}matt@fruitsalad.org" << AddressOk;
289
QTest::newRow( "" ) << "~matt@fruitsalad.org" << AddressOk;
290
QTest::newRow( "" ) << "matt%matt@fruitsalad.org" << AddressOk;
271
QTest::newRow( "46" ) << "!matt@fruitsalad.org" << AddressOk;
272
QTest::newRow( "47" ) << "#matt@fruitsalad.org" << AddressOk;
273
QTest::newRow( "48" ) << "$matt@fruitsalad.org" << AddressOk;
274
QTest::newRow( "49" ) << "%matt@fruitsalad.org" << AddressOk;
275
QTest::newRow( "50" ) << "&matt@fruitsalad.org" << AddressOk;
276
QTest::newRow( "51" ) << "'matt@fruitsalad.org" << AddressOk;
277
QTest::newRow( "52" ) << "*matt@fruitsalad.org" << AddressOk;
278
QTest::newRow( "53" ) << "+matt@fruitsalad.org" << AddressOk;
279
QTest::newRow( "54" ) << "/matt@fruitsalad.org" << AddressOk;
280
QTest::newRow( "55" ) << "=matt@fruitsalad.org" << AddressOk;
281
QTest::newRow( "56" ) << "?matt@fruitsalad.org" << AddressOk;
282
QTest::newRow( "57" ) << "^matt@fruitsalad.org" << AddressOk;
283
QTest::newRow( "58" ) << "_matt@fruitsalad.org" << AddressOk;
284
QTest::newRow( "59" ) << "-matt@fruitsalad.org" << AddressOk;
285
QTest::newRow( "60" ) << "`matt@fruitsalad.org" << AddressOk;
286
QTest::newRow( "61" ) << "{matt@fruitsalad.org" << AddressOk;
287
QTest::newRow( "62" ) << "|matt@fruitsalad.org" << AddressOk;
288
QTest::newRow( "63" ) << "}matt@fruitsalad.org" << AddressOk;
289
QTest::newRow( "64" ) << "~matt@fruitsalad.org" << AddressOk;
290
QTest::newRow( "65" ) << "matt%matt@fruitsalad.org" << AddressOk;
293
QTest::newRow( "" ) << "[foobar] <matt@fruitsalad.org>" << InvalidDisplayName;
294
QTest::newRow( "" ) << "matt \"[foobar]\" Douhan <matt@fruitsalad.org>" << AddressOk;
293
QTest::newRow( "66" ) << "[foobar] <matt@fruitsalad.org>" << InvalidDisplayName;
294
QTest::newRow( "67" ) << "matt \"[foobar]\" Douhan <matt@fruitsalad.org>" << AddressOk;
296
QTest::newRow( "" ) << "Matt Douhan <matt\"@@\"fruitsalad.org>" << TooFewAts;
296
QTest::newRow( "68" ) << "Matt Douhan <matt\"@@\"fruitsalad.org>" << TooFewAts;
298
298
QTest::newRow( "# in domain" ) << "dm3tt@db0zdf.#rpl.deu.eu" << AddressOk;
299
QTest::newRow( "dot at the end" ) << "msadmin@guug.de." << AddressOk;
300
QTest::newRow( "dot at the end with brackets" ) << "Martin Schulte <martin.schulte@guug.de.>" << AddressOk;
302
//TODO this should be a valid email address, but the checking for missing dots broke it.
303
// QTest::newRow( "valid email address without dots" ) << "user@localhost" << AddressOk;
301
306
void EMailTest::testIsValidAddressList()