1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.validator.routines;
18
19 import static org.junit.Assert.*;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import org.apache.commons.validator.ResultPair;
25 import org.junit.Before;
26 import org.junit.Ignore;
27 import org.junit.Test;
28
29
30
31
32
33
34
35 public class EmailValidatorTest {
36
37
38
39
40
41 protected static String FORM_KEY = "emailForm";
42
43
44
45
46 protected static String ACTION = "email";
47
48 private EmailValidator validator;
49
50 @Before
51 public void setUp() {
52 validator = EmailValidator.getInstance();
53 }
54
55
56
57
58 @Test
59 public void testEmail() {
60 assertTrue(validator.isValid("jsmith@apache.org"));
61 }
62
63
64
65
66 @Test
67 public void testEmailWithNumericAddress() {
68 assertTrue(validator.isValid("someone@[216.109.118.76]"));
69 assertTrue(validator.isValid("someone@yahoo.com"));
70 }
71
72
73
74
75 @Test
76 public void testEmailExtension() {
77 assertTrue(validator.isValid("jsmith@apache.org"));
78
79 assertTrue(validator.isValid("jsmith@apache.com"));
80
81 assertTrue(validator.isValid("jsmith@apache.net"));
82
83 assertTrue(validator.isValid("jsmith@apache.info"));
84
85 assertFalse(validator.isValid("jsmith@apache."));
86
87 assertFalse(validator.isValid("jsmith@apache.c"));
88
89 assertTrue(validator.isValid("someone@yahoo.museum"));
90
91 assertFalse(validator.isValid("someone@yahoo.mu-seum"));
92 }
93
94
95
96
97
98 @Test
99 public void testEmailWithDash() {
100 assertTrue(validator.isValid("andy.noble@data-workshop.com"));
101
102 assertFalse(validator.isValid("andy-noble@data-workshop.-com"));
103
104 assertFalse(validator.isValid("andy-noble@data-workshop.c-om"));
105
106 assertFalse(validator.isValid("andy-noble@data-workshop.co-m"));
107 }
108
109
110
111
112
113 @Test
114 public void testEmailWithDotEnd() {
115 assertFalse(validator.isValid("andy.noble@data-workshop.com."));
116 }
117
118
119
120
121
122 @Test
123 public void testEmailWithBogusCharacter() {
124
125 assertFalse(validator.isValid("andy.noble@\u008fdata-workshop.com"));
126
127
128 assertTrue(validator.isValid("andy.o'reilly@data-workshop.com"));
129
130
131 assertFalse(validator.isValid("andy@o'reilly.data-workshop.com"));
132
133
134 assertTrue(validator.isValid("foo+bar@i.am.not.in.us.example.com"));
135
136
137 assertFalse(validator.isValid("foo+bar@example+3.com"));
138
139
140 assertFalse(validator.isValid("test@%*.com"));
141 assertFalse(validator.isValid("test@^&#.com"));
142
143 }
144
145 @Test
146 public void testVALIDATOR_315() {
147 assertFalse(validator.isValid("me@at&t.net"));
148 assertTrue(validator.isValid("me@att.net"));
149 }
150
151 @Test
152 public void testVALIDATOR_278() {
153 assertFalse(validator.isValid("someone@-test.com"));
154 assertFalse(validator.isValid("someone@test-.com"));
155 }
156
157 @Test
158 public void testValidator235() {
159 String version = System.getProperty("java.version");
160 if (version.compareTo("1.6") < 0) {
161 System.out.println("Cannot run Unicode IDN tests");
162 return;
163 }
164 assertTrue("xn--d1abbgf6aiiy.xn--p1ai should validate", validator.isValid("someone@xn--d1abbgf6aiiy.xn--p1ai"));
165 assertTrue("президент.рф should validate", validator.isValid("someone@президент.рф"));
166 assertTrue("www.b\u00fccher.ch should validate", validator.isValid("someone@www.b\u00fccher.ch"));
167 assertFalse("www.\uFFFD.ch FFFD should fail", validator.isValid("someone@www.\uFFFD.ch"));
168 assertTrue("www.b\u00fccher.ch should validate", validator.isValid("someone@www.b\u00fccher.ch"));
169 assertFalse("www.\uFFFD.ch FFFD should fail", validator.isValid("someone@www.\uFFFD.ch"));
170 }
171
172
173
174
175 @Test
176 public void testEmailWithCommas() {
177 assertFalse(validator.isValid("joeblow@apa,che.org"));
178
179 assertFalse(validator.isValid("joeblow@apache.o,rg"));
180
181 assertFalse(validator.isValid("joeblow@apache,org"));
182
183 }
184
185
186
187
188 @Test
189 public void testEmailWithSpaces() {
190 assertFalse(validator.isValid("joeblow @apache.org"));
191
192 assertFalse(validator.isValid("joeblow@ apache.org"));
193
194 assertFalse(validator.isValid(" joeblow@apache.org"));
195
196 assertFalse(validator.isValid("joeblow@apache.org "));
197
198 assertFalse(validator.isValid("joe blow@apache.org "));
199
200 assertFalse(validator.isValid("joeblow@apa che.org "));
201
202 assertTrue(validator.isValid("\"joeblow \"@apache.org"));
203
204 assertTrue(validator.isValid("\" joeblow\"@apache.org"));
205
206 assertTrue(validator.isValid("\" joe blow \"@apache.org"));
207
208 }
209
210
211
212
213
214 @Test
215 public void testEmailWithControlChars() {
216 for (char c = 0; c < 32; c++) {
217 assertFalse("Test control char " + ((int)c), validator.isValid("foo" + c + "bar@domain.com"));
218 }
219 assertFalse("Test control char 127", validator.isValid("foo" + ((char)127) + "bar@domain.com"));
220 }
221
222
223
224
225
226 @Test
227 public void testEmailLocalhost() {
228
229 EmailValidator noLocal = EmailValidator.getInstance(false);
230 EmailValidator allowLocal = EmailValidator.getInstance(true);
231 assertEquals(validator, noLocal);
232
233
234 assertTrue(
235 "@localhost.localdomain should be accepted but wasn't",
236 allowLocal.isValid("joe@localhost.localdomain")
237 );
238 assertTrue(
239 "@localhost should be accepted but wasn't",
240 allowLocal.isValid("joe@localhost")
241 );
242
243 assertFalse(
244 "@localhost.localdomain should be accepted but wasn't",
245 noLocal.isValid("joe@localhost.localdomain")
246 );
247 assertFalse(
248 "@localhost should be accepted but wasn't",
249 noLocal.isValid("joe@localhost")
250 );
251 }
252
253
254
255
256
257 @Test
258 public void testEmailWithSlashes() {
259 assertTrue(
260 "/ and ! valid in username",
261 validator.isValid("joe!/blow@apache.org")
262 );
263 assertFalse(
264 "/ not valid in domain",
265 validator.isValid("joe@ap/ache.org")
266 );
267 assertFalse(
268 "! not valid in domain",
269 validator.isValid("joe@apac!he.org")
270 );
271 }
272
273
274
275
276
277 @Test
278 public void testEmailUserName() {
279
280 assertTrue(validator.isValid("joe1blow@apache.org"));
281
282 assertTrue(validator.isValid("joe$blow@apache.org"));
283
284 assertTrue(validator.isValid("joe-@apache.org"));
285
286 assertTrue(validator.isValid("joe_@apache.org"));
287
288 assertTrue(validator.isValid("joe+@apache.org"));
289
290 assertTrue(validator.isValid("joe!@apache.org"));
291
292 assertTrue(validator.isValid("joe*@apache.org"));
293
294 assertTrue(validator.isValid("joe'@apache.org"));
295
296 assertTrue(validator.isValid("joe%45@apache.org"));
297
298 assertTrue(validator.isValid("joe?@apache.org"));
299
300 assertTrue(validator.isValid("joe&@apache.org"));
301
302 assertTrue(validator.isValid("joe=@apache.org"));
303
304 assertTrue(validator.isValid("+joe@apache.org"));
305
306 assertTrue(validator.isValid("!joe@apache.org"));
307
308 assertTrue(validator.isValid("*joe@apache.org"));
309
310 assertTrue(validator.isValid("'joe@apache.org"));
311
312 assertTrue(validator.isValid("%joe45@apache.org"));
313
314 assertTrue(validator.isValid("?joe@apache.org"));
315
316 assertTrue(validator.isValid("&joe@apache.org"));
317
318 assertTrue(validator.isValid("=joe@apache.org"));
319
320 assertTrue(validator.isValid("+@apache.org"));
321
322 assertTrue(validator.isValid("!@apache.org"));
323
324 assertTrue(validator.isValid("*@apache.org"));
325
326 assertTrue(validator.isValid("'@apache.org"));
327
328 assertTrue(validator.isValid("%@apache.org"));
329
330 assertTrue(validator.isValid("?@apache.org"));
331
332 assertTrue(validator.isValid("&@apache.org"));
333
334 assertTrue(validator.isValid("=@apache.org"));
335
336
337
338
339 assertFalse(validator.isValid("joe.@apache.org"));
340
341 assertFalse(validator.isValid(".joe@apache.org"));
342
343 assertFalse(validator.isValid(".@apache.org"));
344
345 assertTrue(validator.isValid("joe.ok@apache.org"));
346
347 assertFalse(validator.isValid("joe..ok@apache.org"));
348
349 assertFalse(validator.isValid("..@apache.org"));
350
351 assertFalse(validator.isValid("joe(@apache.org"));
352
353 assertFalse(validator.isValid("joe)@apache.org"));
354
355 assertFalse(validator.isValid("joe,@apache.org"));
356
357 assertFalse(validator.isValid("joe;@apache.org"));
358
359
360
361 assertTrue(validator.isValid("\"joe.\"@apache.org"));
362
363 assertTrue(validator.isValid("\".joe\"@apache.org"));
364
365 assertTrue(validator.isValid("\"joe+\"@apache.org"));
366
367 assertTrue(validator.isValid("\"joe@\"@apache.org"));
368
369 assertTrue(validator.isValid("\"joe!\"@apache.org"));
370
371 assertTrue(validator.isValid("\"joe*\"@apache.org"));
372
373 assertTrue(validator.isValid("\"joe'\"@apache.org"));
374
375 assertTrue(validator.isValid("\"joe(\"@apache.org"));
376
377 assertTrue(validator.isValid("\"joe)\"@apache.org"));
378
379 assertTrue(validator.isValid("\"joe,\"@apache.org"));
380
381 assertTrue(validator.isValid("\"joe%45\"@apache.org"));
382
383 assertTrue(validator.isValid("\"joe;\"@apache.org"));
384
385 assertTrue(validator.isValid("\"joe?\"@apache.org"));
386
387 assertTrue(validator.isValid("\"joe&\"@apache.org"));
388
389 assertTrue(validator.isValid("\"joe=\"@apache.org"));
390
391 assertTrue(validator.isValid("\"..\"@apache.org"));
392
393
394 assertTrue(validator.isValid("\"john\\\"doe\"@apache.org"));
395
396 assertTrue(validator.isValid("john56789.john56789.john56789.john56789.john56789.john56789.john@example.com"));
397
398 assertFalse(validator.isValid("john56789.john56789.john56789.john56789.john56789.john56789.john5@example.com"));
399
400 assertTrue(validator.isValid("\\>escape\\\\special\\^characters\\<@example.com"));
401
402 assertTrue(validator.isValid("Abc\\@def@example.com"));
403
404 assertFalse(validator.isValid("Abc@def@example.com"));
405
406 assertTrue(validator.isValid("space\\ monkey@example.com"));
407 }
408
409
410
411
412
413
414 private static final ResultPair[] testEmailFromPerl = {
415 new ResultPair("abigail@example.com", true),
416 new ResultPair("abigail@example.com ", true),
417 new ResultPair(" abigail@example.com", true),
418 new ResultPair("abigail @example.com ", true),
419 new ResultPair("*@example.net", true),
420 new ResultPair("\"\\\"\"@foo.bar", true),
421 new ResultPair("fred&barny@example.com", true),
422 new ResultPair("---@example.com", true),
423 new ResultPair("foo-bar@example.net", true),
424 new ResultPair("\"127.0.0.1\"@[127.0.0.1]", true),
425 new ResultPair("Abigail <abigail@example.com>", true),
426 new ResultPair("Abigail<abigail@example.com>", true),
427 new ResultPair("Abigail<@a,@b,@c:abigail@example.com>", true),
428 new ResultPair("\"This is a phrase\"<abigail@example.com>", true),
429 new ResultPair("\"Abigail \"<abigail@example.com>", true),
430 new ResultPair("\"Joe & J. Harvey\" <example @Org>", true),
431 new ResultPair("Abigail <abigail @ example.com>", true),
432 new ResultPair("Abigail made this < abigail @ example . com >", true),
433 new ResultPair("Abigail(the bitch)@example.com", true),
434 new ResultPair("Abigail <abigail @ example . (bar) com >", true),
435 new ResultPair("Abigail < (one) abigail (two) @(three)example . (bar) com (quz) >", true),
436 new ResultPair("Abigail (foo) (((baz)(nested) (comment)) ! ) < (one) abigail (two) @(three)example . (bar) com (quz) >", true),
437 new ResultPair("Abigail <abigail(fo\\(o)@example.com>", true),
438 new ResultPair("Abigail <abigail(fo\\)o)@example.com> ", true),
439 new ResultPair("(foo) abigail@example.com", true),
440 new ResultPair("abigail@example.com (foo)", true),
441 new ResultPair("\"Abi\\\"gail\" <abigail@example.com>", true),
442 new ResultPair("abigail@[example.com]", true),
443 new ResultPair("abigail@[exa\\[ple.com]", true),
444 new ResultPair("abigail@[exa\\]ple.com]", true),
445 new ResultPair("\":sysmail\"@ Some-Group. Some-Org", true),
446 new ResultPair("Muhammed.(I am the greatest) Ali @(the)Vegas.WBA", true),
447 new ResultPair("mailbox.sub1.sub2@this-domain", true),
448 new ResultPair("sub-net.mailbox@sub-domain.domain", true),
449 new ResultPair("name:;", true),
450 new ResultPair("':;", true),
451 new ResultPair("name: ;", true),
452 new ResultPair("Alfred Neuman <Neuman@BBN-TENEXA>", true),
453 new ResultPair("Neuman@BBN-TENEXA", true),
454 new ResultPair("\"George, Ted\" <Shared@Group.Arpanet>", true),
455 new ResultPair("Wilt . (the Stilt) Chamberlain@NBA.US", true),
456 new ResultPair("Cruisers: Port@Portugal, Jones@SEA;", true),
457 new ResultPair("$@[]", true),
458 new ResultPair("*()@[]", true),
459 new ResultPair("\"quoted ( brackets\" ( a comment )@example.com", true),
460 new ResultPair("\"Joe & J. Harvey\"\\x0D\\x0A <ddd\\@ Org>", true),
461 new ResultPair("\"Joe &\\x0D\\x0A J. Harvey\" <ddd \\@ Org>", true),
462 new ResultPair("Gourmets: Pompous Person <WhoZiWhatZit\\@Cordon-Bleu>,\\x0D\\x0A" +
463 " Childs\\@WGBH.Boston, \"Galloping Gourmet\"\\@\\x0D\\x0A" +
464 " ANT.Down-Under (Australian National Television),\\x0D\\x0A" +
465 " Cheapie\\@Discount-Liquors;", true),
466 new ResultPair(" Just a string", false),
467 new ResultPair("string", false),
468 new ResultPair("(comment)", false),
469 new ResultPair("()@example.com", false),
470 new ResultPair("fred(&)barny@example.com", false),
471 new ResultPair("fred\\ barny@example.com", false),
472 new ResultPair("Abigail <abi gail @ example.com>", false),
473 new ResultPair("Abigail <abigail(fo(o)@example.com>", false),
474 new ResultPair("Abigail <abigail(fo)o)@example.com>", false),
475 new ResultPair("\"Abi\"gail\" <abigail@example.com>", false),
476 new ResultPair("abigail@[exa]ple.com]", false),
477 new ResultPair("abigail@[exa[ple.com]", false),
478 new ResultPair("abigail@[exaple].com]", false),
479 new ResultPair("abigail@", false),
480 new ResultPair("@example.com", false),
481 new ResultPair("phrase: abigail@example.com abigail@example.com ;", false),
482 new ResultPair("invalid�char@example.com", false)
483 };
484
485
486
487
488
489
490
491
492 @Ignore("VALIDATOR-267")
493 @Test
494 public void testEmailFromPerl() {
495 int errors = 0;
496 for (int index = 0; index < testEmailFromPerl.length; index++) {
497 String item = testEmailFromPerl[index].item;
498 boolean exp = testEmailFromPerl[index].valid;
499 boolean act = validator.isValid(item);
500 if (act != exp) {
501 System.out.printf("%s: expected %s actual %s%n", item, exp, act);
502 errors += 1;
503 }
504 }
505 assertEquals("Expected 0 errors", 0, errors);
506 }
507
508 @Test
509 public void testValidator293(){
510 assertTrue(validator.isValid("abc-@abc.com"));
511 assertTrue(validator.isValid("abc_@abc.com"));
512 assertTrue(validator.isValid("abc-def@abc.com"));
513 assertTrue(validator.isValid("abc_def@abc.com"));
514 assertFalse(validator.isValid("abc@abc_def.com"));
515 }
516
517 @Test
518 public void testValidator365() {
519 assertFalse(validator.isValid(
520 "Loremipsumdolorsitametconsecteturadipiscingelit.Nullavitaeligulamattisrhoncusnuncegestasmattisleo."+
521 "Donecnonsapieninmagnatristiquedictumaacturpis.Fusceorciduifacilisisutsapieneuconsequatpharetralectus."+
522 "Quisqueenimestpulvinarutquamvitaeportamattisex.Nullamquismaurisplaceratconvallisjustoquisportamauris."+
523 "Innullalacusconvalliseufringillautvenenatissitametdiam.Maecenasluctusligulascelerisquepulvinarfeugiat."+
524 "Sedmolestienullaaliquetorciluctusidpharetranislfinibus.Suspendissemalesuadatinciduntduisitametportaarcusollicitudinnec."+
525 "Donecetmassamagna.Curabitururnadiampretiumveldignissimporttitorfringillaeuneque."+
526 "Duisantetelluspharetraidtinciduntinterdummolestiesitametfelis.Utquisquamsitametantesagittisdapibusacnonodio."+
527 "Namrutrummolestiediamidmattis.Cumsociisnatoquepenatibusetmagnisdisparturientmontesnasceturridiculusmus."+
528 "Morbiposueresedmetusacconsectetur.Etiamquisipsumvitaejustotempusmaximus.Sedultriciesplaceratvolutpat."+
529 "Integerlacuslectusmaximusacornarequissagittissitametjusto."+
530 "Cumsociisnatoquepenatibusetmagnisdisparturientmontesnasceturridiculusmus.Maecenasindictumpurussedrutrumex.Nullafacilisi."+
531 "Integerfinibusfinibusmietpharetranislfaucibusvel.Maecenasegetdolorlacinialobortisjustovelullamcorpersem."+
532 "Vivamusaliquetpurusidvariusornaresapienrisusrutrumnisitinciduntmollissemnequeidmetus."+
533 "Etiamquiseleifendpurus.Nuncfelisnuncscelerisqueiddignissimnecfinibusalibero."+
534 "Nuncsemperenimnequesitamethendreritpurusfacilisisac.Maurisdapibussemperfelisdignissimgravida."+
535 "Aeneanultricesblanditnequealiquamfinibusodioscelerisqueac.Aliquamnecmassaeumaurisfaucibusfringilla."+
536 "Etiamconsequatligulanisisitametaliquamnibhtemporquis.Nuncinterdumdignissimnullaatsodalesarcusagittiseu."+
537 "Proinpharetrametusneclacuspulvinarsedvolutpatliberoornare.Sedligulanislpulvinarnonlectuseublanditfacilisisante."+
538 "Sedmollisnislalacusauctorsuscipit.Inhachabitasseplateadictumst.Phasellussitametvelittemporvenenatisfeliseuegestasrisus."+
539 "Aliquameteratsitametnibhcommodofinibus.Morbiefficiturodiovelpulvinariaculis."+
540 "Aeneantemporipsummassaaconsecteturturpisfaucibusultrices.Praesentsodalesmaurisquisportafermentum."+
541 "Etiamnisinislvenenatisvelauctorutullamcorperinjusto.Proinvelligulaerat.Phasellusvestibulumgravidamassanonfeugiat."+
542 "Maecenaspharetraeuismodmetusegetefficitur.Suspendisseamet@gmail.com"));
543 }
544
545
546
547
548
549
550
551
552 @Test
553 public void testEmailAtTLD() {
554 EmailValidator val = EmailValidator.getInstance(false, true);
555 assertTrue(val.isValid("test@com"));
556 }
557
558 @Test
559 public void testValidator359() {
560 EmailValidator val = EmailValidator.getInstance(false, true);
561 assertFalse(val.isValid("test@.com"));
562 }
563
564 @Test
565 public void testValidator374() {
566 assertTrue(validator.isValid("abc@school.school"));
567 }
568
569 @Test(expected = IllegalArgumentException.class)
570 public void testValidator473_1() {
571 new EmailValidator(false, false, null);
572 }
573
574 @Test(expected = IllegalArgumentException.class)
575 public void testValidator473_2() {
576 List<DomainValidator.Item> items = new ArrayList<>();
577 new EmailValidator(false, false, DomainValidator.getInstance(true, items));
578 }
579
580 @Test(expected = IllegalArgumentException.class)
581 public void testValidator473_3() {
582 List<DomainValidator.Item> items = new ArrayList<>();
583 new EmailValidator(true, false, DomainValidator.getInstance(false, items));
584 }
585
586 @Test
587 public void testValidator473_4() {
588 assertFalse(validator.isValidDomain("test.local"));
589 List<DomainValidator.Item> items = new ArrayList<>();
590 items.add(new DomainValidator.Item(DomainValidator.ArrayType.GENERIC_PLUS, new String[]{"local"}));
591 EmailValidator val = new EmailValidator(true, false, DomainValidator.getInstance(true, items));
592 assertTrue(val.isValidDomain("test.local"));
593 }
594
595 public static void main(String[] args) {
596 EmailValidator validator = EmailValidator.getInstance();
597 for(String arg : args) {
598 System.out.printf("%s: %s%n", arg, validator.isValid(arg));
599 }
600 }
601 }