19declare(strict_types=1);
22use PHPUnit\Framework\Attributes\DataProvider;
23use PHPUnit\Framework\TestCase;
30 #[DataProvider('validEmailProvider')]
33 string $expected_local,
34 string $expected_domain
38 $this->assertInstanceOf(EmailAddress::class, $email);
39 $this->assertEquals($input, $email->getAddressFull(),
'Full address mismatch');
40 $this->assertEquals($expected_local, $email->getLocalPart(),
'Local part mismatch');
41 $this->assertEquals($expected_domain, $email->getDomainPart(),
'Domain part mismatch');
44 #[DataProvider('invalidEmailProvider')]
48 $this->expectException(InvalidArgumentException::class);
52 #[DataProvider('invalidEmailDomainProvider')]
56 $this->expectException(InvalidArgumentException::class);
60 #[DataProvider('invalidEmailLocalProvider')]
64 $this->expectException(InvalidArgumentException::class);
68 #[DataProvider('validAsciiEmailProvider')]
73 $this->assertTrue($address->getIsAscii());
74 $this->assertTrue($address->getIsLocalPartAscii());
75 $this->assertTrue($address->getIsDomainPartAscii());
78 #[DataProvider('validUnicodeEmailProvider')]
83 $this->assertFalse($address->getIsAscii());
84 $this->assertFalse($address->getIsLocalPartAscii());
85 $this->assertFalse($address->getIsDomainPartAscii());
91 "john.doe@example.com",
96 "jöhn.doe@exämple.com",
100 "email_unicode2" => [
101 "Ωéяגخ本आ한@Ωéяגخ本आ한.com",
105 "email_unicode3" => [
110 "email_short_no_dot" => [
115 "email_domain_hyphen" => [
116 "someone@domain-with-hyphens.com",
118 "domain-with-hyphens.com"
120 "email_domain_subdomain" => [
121 "someone@subdomain.domain.org",
123 "subdomain.domain.org"
125 "email_domain_many_subdomains" => [
126 "someone@en.m.wikipedia.org",
130 "email_localhost" => [
136 "someone@[127.0.0.1]",
140 "email_quoted_string" => [
141 '"quoted.string"@example.com',
153 "email_just_whitespace" => [
156 "email_no_domain" => [
159 "email_no_local" => [
163 "john.doe@@example.com",
169 $domainLabelsTooLong = str_repeat(
'a', 64);
170 $domainLabelValidLength = str_repeat(
'a', 63);
171 $domainTooLong = $domainLabelValidLength .
"." . $domainLabelValidLength .
"." . $domainLabelValidLength .
"." . $domainLabelValidLength;
173 "email_domain_no_dot" => [
176 "email_domain_labels_too_long" => [
177 "local@" . $domainLabelsTooLong .
"." . $domainLabelsTooLong,
179 "email_domain_too_long" => [
180 "local@" . $domainTooLong,
182 "email_domain_hyphen_start" => [
183 "local@-baddomain.com"
185 "email_domain_hyphen_end" => [
186 "local@baddomain-.com"
188 "email_consecutive_dots" => [
189 "someone@bad..domain.com"
191 "email_domain_label_empty" => [
192 "someone@.baddomain.de"
194 "email_domain_whitespace" => [
195 "someone@bad domain.com"
202 "email_local_broken_bytes" => [
204 "\xC3\x28@example.com",
206 "email_local_dot_start" => [
207 ".invalid@example.com",
209 "email_local_dot_end" => [
210 "invalid.@example.com",
212 "email_local_two_dots" => [
213 "in..valid@example.com",
215 "email_whitespace" => [
216 "in valid@example.com"
218 "email_local_emoji" => [
221 "email_local_invalid_control_character" => [
222 "hello\x07world@example.com",
230 "john.doe@example.com",
232 "email_ascii_symbols" => [
233 "&-.+~@example&my-sons.com"
244 "email_unicode2" => [
245 "frédericö.Ωéяגخ本आ한@äéö📖💡🤓.ws"
static validEmailProvider()
static validAsciiEmailProvider()
testEmailThrows(string $input,)
static invalidEmailProvider()
testAsciiEmailFlags(string $input,)
testEmailLocalThrows(string $input,)
testAsciiEmailFlagsWhenUnicode(string $input,)
testEmailObjectConstruction(string $input, string $expected_local, string $expected_domain)
static validUnicodeEmailProvider()
static invalidEmailLocalProvider()
static invalidEmailDomainProvider()
testEmailDomainThrows(string $input,)
An Email Address is a common personal address for people online.