ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
EmailAddressTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22use PHPUnit\Framework\Attributes\DataProvider;
23use PHPUnit\Framework\TestCase;
24
28class EmailAddressTest extends TestCase
29{
30 #[DataProvider('validEmailProvider')]
32 string $input,
33 string $expected_local,
34 string $expected_domain
35 ): void {
36 $email = new EmailAddress($input);
37
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');
42 }
43
44 #[DataProvider('invalidEmailProvider')]
45 public function testEmailThrows(
46 string $input,
47 ): void {
48 $this->expectException(InvalidArgumentException::class);
49 new EmailAddress($input);
50 }
51
52 #[DataProvider('invalidEmailDomainProvider')]
53 public function testEmailDomainThrows(
54 string $input,
55 ): void {
56 $this->expectException(InvalidArgumentException::class);
57 new EmailAddress($input);
58 }
59
60 #[DataProvider('invalidEmailLocalProvider')]
61 public function testEmailLocalThrows(
62 string $input,
63 ): void {
64 $this->expectException(InvalidArgumentException::class);
65 new EmailAddress($input);
66 }
67
68 #[DataProvider('validAsciiEmailProvider')]
69 public function testAsciiEmailFlags(
70 string $input,
71 ): void {
72 $address = new EmailAddress($input);
73 $this->assertTrue($address->getIsAscii());
74 $this->assertTrue($address->getIsLocalPartAscii());
75 $this->assertTrue($address->getIsDomainPartAscii());
76 }
77
78 #[DataProvider('validUnicodeEmailProvider')]
80 string $input,
81 ): void {
82 $address = new EmailAddress($input);
83 $this->assertFalse($address->getIsAscii());
84 $this->assertFalse($address->getIsLocalPartAscii());
85 $this->assertFalse($address->getIsDomainPartAscii());
86 }
87 public static function validEmailProvider(): array
88 {
89 return [
90 "email_ascii" => [
91 "john.doe@example.com",
92 "john.doe",
93 "example.com"
94 ],
95 "email_unicode" => [
96 "jöhn.doe@exämple.com",
97 "jöhn.doe",
98 "exämple.com"
99 ],
100 "email_unicode2" => [
101 "Ωéяגخ本आ한@Ωéяגخ本आ한.com",
102 "Ωéяגخ本आ한",
103 "Ωéяגخ本आ한.com"
104 ],
105 "email_unicode3" => [
106 "hi@📖💡🤓.ws",
107 "hi",
108 "📖💡🤓.ws"
109 ],
110 "email_short_no_dot" => [
111 "hi@example.com",
112 "hi",
113 "example.com"
114 ],
115 "email_domain_hyphen" => [
116 "someone@domain-with-hyphens.com",
117 "someone",
118 "domain-with-hyphens.com"
119 ],
120 "email_domain_subdomain" => [
121 "someone@subdomain.domain.org",
122 "someone",
123 "subdomain.domain.org"
124 ],
125 "email_domain_many_subdomains" => [
126 "someone@en.m.wikipedia.org",
127 "someone",
128 "en.m.wikipedia.org"
129 ],
130 "email_localhost" => [
131 "someone@localhost",
132 "someone",
133 "localhost"
134 ],
135 "email_ip_127" => [
136 "someone@[127.0.0.1]",
137 "someone",
138 "[127.0.0.1]"
139 ],
140 "email_quoted_string" => [
141 '"quoted.string"@example.com',
142 '"quoted.string"',
143 "example.com"
144 ]
145 ];
146 }
147 public static function invalidEmailProvider(): array
148 {
149 return [
150 "email_nothing" => [
151 "",
152 ],
153 "email_just_whitespace" => [
154 " ",
155 ],
156 "email_no_domain" => [
157 "john.doe@",
158 ],
159 "email_no_local" => [
160 "@example.com",
161 ],
162 "email_two_ats" => [
163 "john.doe@@example.com",
164 ],
165 ];
166 }
167 public static function invalidEmailDomainProvider(): array
168 {
169 $domainLabelsTooLong = str_repeat('a', 64);
170 $domainLabelValidLength = str_repeat('a', 63);
171 $domainTooLong = $domainLabelValidLength . "." . $domainLabelValidLength . "." . $domainLabelValidLength . "." . $domainLabelValidLength;
172 return [
173 "email_domain_no_dot" => [
174 "hi@example",
175 ],
176 "email_domain_labels_too_long" => [
177 "local@" . $domainLabelsTooLong . "." . $domainLabelsTooLong,
178 ],
179 "email_domain_too_long" => [
180 "local@" . $domainTooLong,
181 ],
182 "email_domain_hyphen_start" => [
183 "local@-baddomain.com"
184 ],
185 "email_domain_hyphen_end" => [
186 "local@baddomain-.com"
187 ],
188 "email_consecutive_dots" => [
189 "someone@bad..domain.com"
190 ],
191 "email_domain_label_empty" => [
192 "someone@.baddomain.de"
193 ],
194 "email_domain_whitespace" => [
195 "someone@bad domain.com"
196 ]
197 ];
198 }
199 public static function invalidEmailLocalProvider(): array
200 {
201 return [
202 "email_local_broken_bytes" => [
203 // invalid 2-byte sequence
204 "\xC3\x28@example.com",
205 ],
206 "email_local_dot_start" => [
207 ".invalid@example.com",
208 ],
209 "email_local_dot_end" => [
210 "invalid.@example.com",
211 ],
212 "email_local_two_dots" => [
213 "in..valid@example.com",
214 ],
215 "email_whitespace" => [
216 "in valid@example.com"
217 ],
218 "email_local_emoji" => [
219 "📖💡🤓@example.com",
220 ],
221 "email_local_invalid_control_character" => [
222 "hello\x07world@example.com",
223 ],
224 ];
225 }
226 public static function validAsciiEmailProvider(): array
227 {
228 return [
229 "email_ascii" => [
230 "john.doe@example.com",
231 ],
232 "email_ascii_symbols" => [
233 "&-.+~@example&my-sons.com"
234 ]
235 ];
236 }
237
238 public static function validUnicodeEmailProvider(): array
239 {
240 return [
241 "email_unicode" => [
242 "käthe@exämple.com",
243 ],
244 "email_unicode2" => [
245 "frédericö.Ωéяגخ本आ한@äéö📖💡🤓.ws"
246 ]
247 ];
248 }
249}
Tests the Link Datatype.
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.