3 namespace Egulias\Tests\EmailValidator;
5 use Egulias\EmailValidator\EmailValidator;
7 class EmailValidatorTest extends \PHPUnit_Framework_TestCase
11 protected function setUp()
13 $this->validator = new EmailValidator();
16 protected function tearDown()
18 $this->validator = null;
22 * @dataProvider getValidEmails
24 public function testValidEmails($email)
26 $this->assertTrue($this->validator->isValid($email));
29 public function testInvalidUTF8Email()
31 $validator = new EmailValidator;
32 $email = "\x80\x81\x82@\x83\x84\x85.\x86\x87\x88";
34 $this->assertFalse($validator->isValid($email));
37 public function getValidEmails()
41 array('fabien@symfony.com'),
42 array('example@example.co.uk'),
43 array('fabien_potencier@example.fr'),
44 array('example@localhost'),
45 array('fab\'ien@symfony.com'),
46 array('fab\ ien@symfony.com'),
47 array('example((example))@fakedfake.co.uk'),
48 array('example@faked(fake).co.uk'),
49 array('fabien+@symfony.com'),
50 array('инфо@письмо.рф'),
51 array('"username"@example.com'),
52 array('"user,name"@example.com'),
53 array('"user name"@example.com'),
54 array('"user@name"@example.com'),
55 array('"\a"@iana.org'),
56 array('"test\ test"@iana.org'),
58 array('"\""@iana.org'),
59 array('müller@möller.de'),
66 array('test@email.com.au'),
67 array('1500111@профи-инвест.рф'),
72 * @dataProvider getInvalidEmails
74 public function testInvalidEmails($email)
76 $this->assertFalse($this->validator->isValid($email));
79 public function getInvalidEmails()
82 array('test@example.com test'),
83 array('user name@example.com'),
84 array('user name@example.com'),
85 array('example.@example.co.uk'),
86 array('example@example@example.co.uk'),
87 array('(test_exampel@example.fr)'),
88 array('example(example)example@example.co.uk'),
89 array('.example@localhost'),
90 array('ex\ample@localhost'),
91 array('example@local\host'),
92 array('example@localhost\\'),
93 array('example@localhost.'),
94 array('user name@example.com'),
95 array('username@ example . com'),
96 array('example@(fake).com'),
97 array('example@(fake.com'),
98 array('username@example,com'),
99 array('usern,ame@example.com'),
100 array('user[na]me@example.com'),
101 array('"""@iana.org'),
102 array('"\"@iana.org'),
103 array('"test"test@iana.org'),
104 array('"test""test"@iana.org'),
105 array('"test"."test"@iana.org'),
106 array('"test".test@iana.org'),
107 array('"test"' . chr(0) . '@iana.org'),
108 array('"test\"@iana.org'),
109 array(chr(226) . '@iana.org'),
110 array('test@' . chr(226) . '.org'),
111 array('\r\ntest@iana.org'),
112 array('\r\n test@iana.org'),
113 array('\r\n \r\ntest@iana.org'),
114 array('\r\n \r\ntest@iana.org'),
115 array('\r\n \r\n test@iana.org'),
116 array('test@iana.org \r\n'),
117 array('test@iana.org \r\n '),
118 array('test@iana.org \r\n \r\n'),
119 array('test@iana.org \r\n\r\n'),
120 array('test@iana.org \r\n\r\n '),
121 array('test@iana/icann.org'),
122 array('test@foo;bar.com'),
123 array('test;123@foobar.com'),
124 array('test@example..com'),
125 array('email.email@email."'),
126 array('test@email>'),
127 array('test@email<'),
128 array('test@email{'),
129 array('test@email.com]'),
130 array('test@ema[il.com'),
135 * @dataProvider getInvalidEmailsWithErrors
137 public function testInvalidEmailsWithErrorsCheck($errors, $email)
139 $this->assertFalse($this->validator->isValid($email));
141 $this->assertEquals($errors, $this->validator->getError());
144 public function getInvalidEmailsWithErrors()
147 array(EmailValidator::ERR_NOLOCALPART, '@example.co.uk'),
148 array(EmailValidator::ERR_NODOMAIN, 'example@'),
149 array(EmailValidator::ERR_DOMAINHYPHENEND, 'example@example-.co.uk'),
150 array(EmailValidator::ERR_DOMAINHYPHENEND, 'example@example-'),
151 array(EmailValidator::ERR_CONSECUTIVEATS, 'example@@example.co.uk'),
152 array(EmailValidator::ERR_CONSECUTIVEDOTS, 'example..example@example.co.uk'),
153 array(EmailValidator::ERR_CONSECUTIVEDOTS, 'example@example..co.uk'),
154 array(EmailValidator::ERR_EXPECTING_ATEXT, '<fabien_potencier>@example.fr'),
155 array(EmailValidator::ERR_DOT_START, '.example@localhost'),
156 array(EmailValidator::ERR_DOT_START, 'example@.localhost'),
157 array(EmailValidator::ERR_DOT_END, 'example@localhost.'),
158 array(EmailValidator::ERR_DOT_END, 'example.@example.co.uk'),
159 array(EmailValidator::ERR_UNCLOSEDCOMMENT, '(example@localhost'),
160 array(EmailValidator::ERR_UNOPENEDCOMMENT, 'comment)example@localhost'),
161 array(EmailValidator::ERR_UNOPENEDCOMMENT, 'example(comment))@localhost'),
162 array(EmailValidator::ERR_UNOPENEDCOMMENT, 'example@comment)localhost'),
163 array(EmailValidator::ERR_UNOPENEDCOMMENT, 'example@localhost(comment))'),
164 array(EmailValidator::ERR_UNOPENEDCOMMENT, 'example@(comment))example.com'),
165 array(EmailValidator::ERR_UNCLOSEDQUOTEDSTR, '"example@localhost'),
166 array(EmailValidator::ERR_EXPECTING_ATEXT, 'exa"mple@localhost'),
167 //This was the original. But atext is not allowed after \n
168 //array(EmailValidator::ERR_EXPECTING_ATEXT, "exampl\ne@example.co.uk"),
169 array(EmailValidator::ERR_ATEXT_AFTER_CFWS, "exampl\ne@example.co.uk"),
170 array(EmailValidator::ERR_EXPECTING_DTEXT, "example@[[]"),
171 array(EmailValidator::ERR_ATEXT_AFTER_CFWS, "exampl\te@example.co.uk"),
172 array(EmailValidator::ERR_CR_NO_LF, "example@exa\rmple.co.uk"),
173 array(EmailValidator::ERR_CR_NO_LF, "example@[\r]"),
174 array(EmailValidator::ERR_CR_NO_LF, "exam\rple@example.co.uk"),
179 * @dataProvider getInvalidEmailsWithWarnings
181 public function testValidEmailsWithWarningsCheck($warnings, $email)
183 $this->assertFalse($this->validator->isValid($email, true));
185 $this->assertEquals($warnings, $this->validator->getWarnings());
189 * @dataProvider getInvalidEmailsWithWarnings
191 public function testInvalidEmailsWithDnsCheckAndStrictMode($warnings, $email)
193 $this->assertFalse($this->validator->isValid($email, true, true));
195 $this->assertEquals($warnings, $this->validator->getWarnings());
198 public function getInvalidEmailsWithWarnings()
203 EmailValidator::DEPREC_CFWS_NEAR_AT,
204 EmailValidator::DNSWARN_NO_RECORD
206 'example @invalid.example.com'
210 EmailValidator::DEPREC_CFWS_NEAR_AT,
211 EmailValidator::DNSWARN_NO_RECORD
213 'example@ invalid.example.com'
217 EmailValidator::CFWS_COMMENT,
218 EmailValidator::DNSWARN_NO_RECORD
220 'example@invalid.example(examplecomment).com'
224 EmailValidator::CFWS_COMMENT,
225 EmailValidator::DEPREC_CFWS_NEAR_AT,
226 EmailValidator::DNSWARN_NO_RECORD,
228 'example(examplecomment)@invalid.example.com'
232 EmailValidator::RFC5321_QUOTEDSTRING,
233 EmailValidator::CFWS_FWS,
234 EmailValidator::DNSWARN_NO_RECORD,
236 "\"\t\"@invalid.example.com"
240 EmailValidator::RFC5321_QUOTEDSTRING,
241 EmailValidator::CFWS_FWS,
242 EmailValidator::DNSWARN_NO_RECORD
244 "\"\r\"@invalid.example.com"
248 EmailValidator::RFC5321_ADDRESSLITERAL,
249 EmailValidator::DNSWARN_NO_RECORD,
251 'example@[127.0.0.1]'
255 EmailValidator::RFC5321_ADDRESSLITERAL,
256 EmailValidator::DNSWARN_NO_RECORD,
258 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334]'
262 EmailValidator::RFC5321_ADDRESSLITERAL,
263 EmailValidator::RFC5321_IPV6DEPRECATED,
264 EmailValidator::DNSWARN_NO_RECORD,
266 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370::]'
270 EmailValidator::RFC5321_ADDRESSLITERAL,
271 EmailValidator::RFC5322_IPV6_MAXGRPS,
272 EmailValidator::DNSWARN_NO_RECORD,
274 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334::]'
278 EmailValidator::RFC5321_ADDRESSLITERAL,
279 EmailValidator::RFC5322_IPV6_2X2XCOLON,
280 EmailValidator::DNSWARN_NO_RECORD,
282 'example@[IPv6:1::1::1]'
286 EmailValidator::RFC5322_DOMLIT_OBSDTEXT,
287 EmailValidator::RFC5322_DOMAINLITERAL,
288 EmailValidator::DNSWARN_NO_RECORD,
294 EmailValidator::RFC5322_DOMAINLITERAL,
295 EmailValidator::DNSWARN_NO_RECORD,
301 EmailValidator::RFC5322_DOMAINLITERAL,
302 EmailValidator::DNSWARN_NO_RECORD,
304 'example@[::123.45.67.178]'
308 EmailValidator::RFC5322_IPV6_COLONSTRT,
309 EmailValidator::RFC5321_ADDRESSLITERAL,
310 EmailValidator::RFC5322_IPV6_GRPCOUNT,
311 EmailValidator::DNSWARN_NO_RECORD,
313 'example@[IPv6::2001:0db8:85a3:0000:0000:8a2e:0370:7334]'
317 EmailValidator::RFC5321_ADDRESSLITERAL,
318 EmailValidator::RFC5322_IPV6_BADCHAR,
319 EmailValidator::DNSWARN_NO_RECORD,
321 'example@[IPv6:z001:0db8:85a3:0000:0000:8a2e:0370:7334]'
325 EmailValidator::RFC5321_ADDRESSLITERAL,
326 EmailValidator::RFC5322_IPV6_COLONEND,
327 EmailValidator::DNSWARN_NO_RECORD,
329 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:]'
333 EmailValidator::RFC5321_QUOTEDSTRING,
334 EmailValidator::DNSWARN_NO_RECORD
336 '"example"@invalid.example.com'
340 EmailValidator::RFC5322_LOCAL_TOOLONG,
341 EmailValidator::DNSWARN_NO_RECORD
343 'too_long_localpart_too_long_localpart_too_long_localpart_too_long_localpart@invalid.example.com'
347 EmailValidator::RFC5322_LABEL_TOOLONG,
348 EmailValidator::DNSWARN_NO_RECORD,
350 'example@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart.co.uk'
354 EmailValidator::RFC5322_DOMAIN_TOOLONG,
355 EmailValidator::RFC5322_TOOLONG,
356 EmailValidator::DNSWARN_NO_RECORD,
358 'example@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocal'.
359 'parttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart'.
360 'toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart'
364 EmailValidator::RFC5322_DOMAIN_TOOLONG,
365 EmailValidator::RFC5322_TOOLONG,
366 EmailValidator::DNSWARN_NO_RECORD,
368 'example@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocal'.
369 'parttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart'.
370 'toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpar'
374 EmailValidator::DNSWARN_NO_RECORD,
381 public function testInvalidEmailsWithStrict()
383 $this->assertFalse($this->validator->isValid('"test"@test', false, true));