-
-
Save reynir/99a37390dc4b7e7005d350a6725d7ef4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(test | |
(name test_validate_email) | |
(libraries validate alcotest)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(lang dune 3.12) | |
(name test_validate_email) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ dune runt | |
File "dune", line 2, characters 7-26: | |
2 | (name test_validate_email) | |
^^^^^^^^^^^^^^^^^^^ | |
Testing `Address test'. | |
This run has ID `F410UWID'. | |
> [FAIL] good 0 "Mary Smith <mary@example.net>". | |
[FAIL] good 1 "Mary Smith <mary@x.test>, jdoe@example.org... | |
[FAIL] good 2 "A Group:Ed Jones <c@a.test>,joe@where.test... | |
[FAIL] good 3 "Undisclosed recipients:;". | |
[FAIL] good 4 "\"Mary Smith: Personal Account\" <smith@ho... | |
[FAIL] good 5 "John Doe <jdoe@machine.example>". | |
[FAIL] good 6 "Pete(A nice \\) chap) <pete(his account)@s... | |
[FAIL] good 7 "A Group(Some people) :Chris Jones <c@(C... | |
[FAIL] good 8 "(Empty list)(start)Hidden recipients :(no... | |
[FAIL] good 9 "Mary Smith <@node.test:mary@example.net>, ... | |
[FAIL] good 10 "Joe Q. Public <john.q.public@example.com>". | |
[FAIL] good 11 "John Doe <jdoe@machine(comment). example>". | |
[FAIL] good 12 "Mary Smith <mary@example.net>". | |
[FAIL] good 13 "<boss@nil.test>, \"Giant; \\\"Big\\\" Box\... | |
[OK] good 14 "!#$%&`*+/=?^`{|}~@iana.org". | |
[FAIL] good 15 "(\007;)mary@example.net". | |
[FAIL] good 16 "\"\\\n\"@x.test". | |
[FAIL] good 17 "\"\\a\"@x.test". | |
[FAIL] good 18 "\"\007\"@x.test". | |
[FAIL] good 19 "\"\\\007\"@x.test". | |
[FAIL] good 20 "pete@[255.255.255.255]". | |
[FAIL] good 21 "\"mary\"@example.net". | |
[FAIL] good 22 "\"\\\"\"@example.net". | |
[FAIL] good 23 "\"john\".\"public\"@example.com". | |
[FAIL] good 24 "\"mary smith\"@home.example". | |
[FAIL] good 25 "\"mary\".smith@home.example". | |
[FAIL] good 26 "\"mary\\\000\"@home.example". | |
[FAIL] good 27 " richard @home.example". | |
[FAIL] good 28 "richar@ home .example". | |
[FAIL] good 29 "mary . smith@y.test". | |
[FAIL] good 30 " jdoe@example.net". | |
[FAIL] good 31 " jdoe@example.net". | |
[FAIL] good 32 "(comment)smith@home.example". | |
[FAIL] good 33 "(comment(comment))smith@home.example". | |
[FAIL] good 34 "smith@(comment)home.example". | |
[FAIL] good 35 "smith@(comment)[255.255.255.255]". | |
[OK] good 36 "robert@xn--hxajbheg2az3al.xn--jxalpdlp". | |
[OK] good 37 "xn--robert@x.test". | |
[OK] good 38 "stephane+blog@bortzmeyer.org". | |
[OK] good 39 "{tropdur}@example.org". | |
[OK] good 40 "c&a@hotmail.com". | |
[OK] good 41 "directeur@arts-premiers.museum". | |
[FAIL] good 42 "\"Stephane[Bortzmeyer]\"@laposte.net". | |
[OK] good 43 "first.last@iana.org". | |
[OK] good 44 "123456789012345678901234567890123456789012... | |
[FAIL] good 45 "\"first\\\"last\"@iana.org". | |
[FAIL] good 46 "\"first@last\"@iana.org". | |
[FAIL] good 47 "\"first\\last\"@iana.org". | |
[FAIL] good 48 "first.last@[12.34.56.78]". | |
[FAIL] good 49 "first.last@[IPv6:::12.34.56.78]". | |
[FAIL] good 50 "first.last@[IPv6:1111:2222:3333::4444:12.3... | |
[FAIL] good 51 "first.last@[IPv6:1111:2222:3333:4444:5555:... | |
[FAIL] good 52 "first.last@[IPv6:::1111:2222:3333:4444:555... | |
[FAIL] good 53 "first.last@[IPv6:1111:2222:3333::4444:5555... | |
[FAIL] good 54 "first.last@[IPv6:1111:2222:3333:4444:5555:... | |
[FAIL] good 55 "first.last@[IPv6:1111:2222:3333:4444:5555:... | |
[OK] good 56 "first.last@x234567890123456789012345678901... | |
[OK] good 57 "first.last@3com.com". | |
[OK] good 58 "first.last@123.iana.org". | |
[FAIL] good 59 "first.last@[IPv6:1111:2222:3333::4444:5555... | |
[FAIL] good 60 "first.last@[IPv6:1111:2222:3333::4444:5555... | |
[OK] good 61 "first.last@example.123". | |
[FAIL] good 62 "first.last@com". | |
[OK] good 63 "!#$%&'*+-/=?^_`.{|}~@example.com". | |
[FAIL] good 64 "\"Abc@def\"@example.com". | |
[FAIL] good 65 "\"Abc\\@def\"@iana.org". | |
[FAIL] good 66 "\"Fred\\ Bloggs\"@iana.org". | |
[FAIL] good 67 "\"Joe.\\Blow\"@iana.org". | |
[FAIL] good 68 "\"Abc@def\"@iana.org". | |
[FAIL] good 69 "\"Fred Bloggs\"@iana.org". | |
[OK] good 70 "user+mailbox@iana.org". | |
[OK] good 71 "customer/department=shipping@iana.org". | |
[FAIL] good 72 "$A12345@iana.org". | |
[OK] good 73 "!def!xyz%abc@iana.org". | |
[OK] good 74 "_somename@iana.org". | |
[OK] good 75 "dclo@us.ibm.com". | |
[OK] good 76 "peter.piper@iana.org". | |
[FAIL] good 77 "\"Doug \\\"Ace\\\" L.\"@iana.org". | |
[OK] good 78 "test@iana.org". | |
[FAIL] good 79 "TEST@iana.org". | |
[OK] good 80 "1234567890@iana.org". | |
[OK] good 81 "test+test@iana.org". | |
[OK] good 82 "test-test@iana.org". | |
[OK] good 83 "t*est@iana.org". | |
[OK] good 84 "+1~1+@iana.org". | |
[OK] good 85 "{_test_}@iana.org". | |
[FAIL] good 86 "\"[[ test ]]\"@iana.org". | |
[OK] good 87 "test.test@iana.org". | |
[FAIL] good 88 "\"test.test\"@iana.org". | |
[FAIL] good 89 "test.\"test\"@iana.org". | |
[FAIL] good 90 "\"test@test\"@iana.org". | |
[OK] good 91 "test@123.123.123.x123". | |
[OK] good 92 "test@123.123.123.123". | |
[FAIL] good 93 "test@[123.123.123.123]". | |
[OK] good 94 "test@example.iana.org". | |
[OK] good 95 "test@example.example.iana.org". | |
[FAIL] good 96 "\"test\\test\"@iana.org". | |
[FAIL] good 97 "test@example". | |
[FAIL] good 98 "\"test\\blah\"@iana.org". | |
[FAIL] good 99 "\"test\\\"blah\"@iana.org". | |
[OK] good 100 "customer/department@iana.org". | |
[FAIL] good 101 "_Yosemite.Sam@iana.org". | |
[OK] good 102 "~@iana.org". | |
[FAIL] good 103 "\"Austin@Powers\"@iana.org". | |
[FAIL] good 104 "Ima.Fool@iana.org". | |
[FAIL] good 105 "\"Ima.Fool\"@iana.org". | |
[FAIL] good 106 "\"Ima Fool\"@iana.org". | |
[FAIL] good 107 "\"first\".\"last\"@iana.org". | |
[FAIL] good 108 "\"first\".middle.\"last\"@iana.org". | |
[FAIL] good 109 "\"first\".last@iana.org". | |
[FAIL] good 110 "first.\"last\"@iana.org". | |
[FAIL] good 111 "\"first\".\"middle\".\"last\"@iana.org". | |
[FAIL] good 112 "\"first.middle\".\"last\"@iana.org". | |
[FAIL] good 113 "\"first.middle.last\"@iana.org". | |
[FAIL] good 114 "\"first..last\"@iana.org". | |
[FAIL] good 115 "\"first\\\\\\\"last\"@iana.org". | |
[FAIL] good 116 "first.\"mid\\dle\".\"last\"@iana.org". | |
[FAIL] good 117 "\"test blah\"@iana.org". | |
[FAIL] good 118 "(foo)cal(bar)@(baz)iamcal.com(quux)". | |
[FAIL] good 119 "cal@iamcal(woo).(yay)com". | |
[FAIL] good 120 "cal(woo(yay)hoopla)@iamcal.com". | |
[FAIL] good 121 "cal(foo\\@bar)@iamcal.com". | |
[FAIL] good 122 "cal(foo\\)bar)@iamcal.com". | |
[FAIL] good 123 "first().last@iana.org". | |
[FAIL] good 124 "pete(his account)@silly.test(his host)". | |
[FAIL] good 125 "c@(Chris's host.)public.example". | |
[FAIL] good 126 "jdoe@machine(comment). example". | |
[FAIL] good 127 "1234 @ local(blah) .machine .example". | |
[FAIL] good 128 "first(abc.def).last@iana.org". | |
[FAIL] good 129 "first(a\"bc.def).last@iana.org". | |
[FAIL] good 130 "first.(\")middle.last(\")@iana.org". | |
[FAIL] good 131 "first(abc\\(def)@iana.org". | |
[FAIL] good 132 "first.last@x(12345678901234567890123456789... | |
[FAIL] good 133 "a(a(b(c)d(e(f))g)h(i)j)@iana.org". | |
[OK] good 134 "name.lastname@domain.com". | |
[FAIL] good 135 "a@b". | |
[OK] good 136 "a@bar.com". | |
[FAIL] good 137 "aaa@[123.123.123.123]". | |
[FAIL] good 138 "a@bar". | |
[OK] good 139 "a-b@bar.com". | |
[OK] good 140 "+@b.c". | |
[OK] good 141 "+@b.com". | |
[OK] good 142 "a@b.co-foo.uk". | |
[FAIL] good 143 "\"hello my name is\"@stutter.com". | |
[FAIL] good 144 "\"Romain \" <romain@github.com>". | |
[FAIL] good 145 "\"Test \\\"Fail\\\" Ing\"@iana.org". | |
[OK] good 146 "valid@about.museum". | |
[OK] good 147 "shaitan@my-domain.thisisminekthx". | |
[OK] good 148 "foobar@192.168.0.1". | |
[FAIL] good 149 "\"Joe\\Blow\"@iana.org". | |
[FAIL] good 150 "HM2Kinsists@(that comments are allowed)thi... | |
[OK] good 151 "user%uucp!path@berkeley.edu". | |
[FAIL] good 152 "first.last @iana.org". | |
[OK] good 153 "cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com". | |
[FAIL] good 154 "first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::]". | |
[FAIL] good 155 "first.last@[IPv6:::]". | |
[FAIL] good 156 "first.last@[IPv6:::b4]". | |
[FAIL] good 157 "first.last@[IPv6:::b3:b4]". | |
[FAIL] good 158 "first.last@[IPv6:a1::b4]". | |
[FAIL] good 159 "first.last@[IPv6:a1::]". | |
[FAIL] good 160 "first.last@[IPv6:a1:a2::]". | |
[FAIL] good 161 "first.last@[IPv6:0123:4567:89ab:cdef::]". | |
[FAIL] good 162 "first.last@[IPv6:0123:4567:89ab:CDEF::]". | |
[FAIL] good 163 "first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.... | |
[FAIL] good 164 "first.last@[IPv6:a1:a2:a3:a4::11.22.33.44]". | |
[FAIL] good 165 "first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.... | |
[FAIL] good 166 "first.last@[IPv6:a1::11.22.33.44]". | |
[FAIL] good 167 "first.last@[IPv6:a1:a2::11.22.33.44]". | |
[FAIL] good 168 "first.last@[IPv6:0123:4567:89ab:cdef::11.2... | |
[FAIL] good 169 "first.last@[IPv6:0123:4567:89ab:CDEF::11.2... | |
[FAIL] good 170 "first.last@[IPv6:a1::b2:11.22.33.44]". | |
[FAIL] good 171 "first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4]". | |
[FAIL] good 172 "first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.... | |
[OK] good 173 "test@test.com". | |
[OK] good 174 "test@xn--example.com". | |
[OK] good 175 "test@example.com". | |
[FAIL] good 176 "\231\148\168\230\136\183@\228\190\139\229\... | |
[FAIL] good 177 "\224\164\133\224\164\156\224\164\175@\224\... | |
[FAIL] good 178 "\208\186\208\178\209\150\209\130\208\190\2... | |
[FAIL] good 179 "\206\184\207\131\206\181\207\129@\206\181\... | |
[FAIL] good 180 "D\195\182rte@S\195\182rensen.example.com". | |
[FAIL] good 181 "\208\186\208\190\208\187\209\143@\208\191\... | |
[OK] bad 0 "". | |
[OK] bad 1 "mary". | |
[OK] bad 2 "@". | |
[OK] bad 3 "mary@". | |
[OK] bad 4 "@io". | |
[OK] bad 5 "@example.net". | |
[OK] bad 6 ".mary@example.net". | |
[OK] bad 7 "jdoe.@example.net". | |
[OK] bad 8 "pete..silly.test". | |
[OK] bad 9 "sm_i-th.com". | |
[OK] bad 10 "mary\\@jdoe@one.test". | |
[OK] bad 11 "jdoe@.one.test". | |
[OK] bad 12 "jdon@one.test.". | |
[OK] bad 13 "boss@nil..test". | |
[OK] bad 14 "\"\"\"@example.net". | |
[OK] bad 15 "\"\\\"@example.net". | |
[OK] bad 16 "jdoe\"@machine.example". | |
[OK] bad 17 "\"jdoe@machine.example". | |
[OK] bad 18 "\"john\"public@example.com". | |
[OK] bad 19 "john\"public\"@example.com". | |
[OK] bad 20 "\"john\"\"public\"@example.com". | |
[OK] bad 21 "\"mary\000\"@home.example". | |
[OK] bad 22 "pete@a[255.255.255.255]". | |
[OK] bad 23 "((comment)smith@home.example". | |
[OK] bad 24 "smith(coment)doe@home.example". | |
[OK] bad 25 "robert@henry.com\r". | |
[OK] bad 26 "(smith@home.example". | |
[OK] bad 27 "robert@[1.2.3.4". | |
[OK] bad 28 "\"john\\\"@example.com". | |
[OK] bad 29 "(comment\\)smith@home.example". | |
[OK] bad 30 "smith@home.example(comment\\)". | |
[OK] bad 31 "smith@home.example(comment\\". | |
[OK] bad 32 "robert@[RFC5322-[domain-literal\\]". | |
[OK] bad 33 "robert@[RFC5322-[domain-literal]". | |
[OK] bad 34 "robert@[RFC5322-[domain-literal\\". | |
[OK] bad 35 "marx@capitalism.ru\r". | |
[OK] bad 36 "\rmarx@capitalism.ru". | |
[OK] bad 37 "\"\rmarx\"@capitalism.ru". | |
[OK] bad 38 "(\r)marx@capitalism.ru". | |
[OK] bad 39 "marx@capitalism.ru(\r)". | |
[OK] bad 40 "smith@communism.uk\n". | |
[OK] bad 41 "\nsmith@communism.uk". | |
[OK] bad 42 "\"\nsmith\"@communism.uk". | |
[OK] bad 43 "(\n)smith@communism.uk". | |
[OK] bad 44 "smith@communism.uk(\n)". | |
[OK] bad 45 "first.last@sub.do,com". | |
[OK] bad 46 "first\\@last@iana.org". | |
[OK] bad 47 "first.last". | |
[OK] bad 48 ".first.last@iana.org". | |
[OK] bad 49 "first.last.@iana.org". | |
[OK] bad 50 "first..last@iana.org". | |
[OK] bad 51 "\"first\"last\"@iana.org". | |
[OK] bad 52 "\"\"\"@iana.org". | |
[OK] bad 53 "\"\\\"@iana.org". | |
[OK] bad 54 "\"\"@iana.org". | |
[OK] bad 55 "first\\@last@iana.org". | |
[OK] bad 56 "first.last@". | |
[OK] bad 57 "first.last@[.12.34.56.78]". | |
[OK] bad 58 "first.last@[12.34.56.789]". | |
[OK] bad 59 "first.last@[::12.34.56.78]". | |
[OK] bad 60 "first.last@[IPv5:::12.34.56.78]". | |
[OK] bad 61 "first.last@[IPv6:1111:2222:3333:4444:5555:... | |
[OK] bad 62 "first.last@[IPv6:1111:2222:3333:4444:5555:... | |
[OK] bad 63 "first.last@[IPv6:1111:2222:3333:4444:5555:... | |
[OK] bad 64 "first.last@[IPv6:1111:2222:3333:4444:5555:... | |
[OK] bad 65 "first.last@[IPv6:1111:2222::3333::4444:555... | |
[OK] bad 66 "first.last@[IPv6:1111:2222:333x::4444:5555]". | |
[OK] bad 67 "first.last@[IPv6:1111:2222:33333::4444:555... | |
[OK] bad 68 "abc\\@def@iana.org". | |
[OK] bad 69 "abc\\@iana.org". | |
[OK] bad 70 "@iana.org". | |
[OK] bad 71 "doug@". | |
[OK] bad 72 "\"qu@iana.org". | |
[OK] bad 73 "ote\"@iana.org". | |
[OK] bad 74 ".dot@iana.org". | |
[OK] bad 75 "dot.@iana.org". | |
[OK] bad 76 "two..dot@iana.org". | |
[OK] bad 77 "\"Doug \"Ace\" L.\"@iana.org". | |
[OK] bad 78 "Doug\\ \\\"Ace\\\"\\ L\\.@iana.org". | |
[OK] bad 79 "hello world@iana.org". | |
[OK] bad 80 "gatsby@f.sc.ot.t.f.i.tzg.era.l.d.". | |
[OK] bad 81 "test.iana.org". | |
[OK] bad 82 "test.@iana.org". | |
[OK] bad 83 "test..test@iana.org". | |
[OK] bad 84 ".test@iana.org". | |
[OK] bad 85 "test@test@iana.org". | |
[OK] bad 86 "test@@iana.org". | |
[OK] bad 87 "-- test --@iana.org". | |
[OK] bad 88 "[test]@iana.org". | |
[OK] bad 89 "\"test\"test\"@iana.org". | |
[OK] bad 90 "()[]\\;:,><@iana.org". | |
[OK] bad 91 "test@.". | |
[OK] bad 92 "test@example.". | |
[OK] bad 93 "test@.org". | |
[OK] bad 94 "test@[123.123.123.123". | |
[OK] bad 95 "test@123.123.123.123]". | |
[OK] bad 96 "NotAnEmail". | |
[OK] bad 97 "NotAnEmail". | |
[OK] bad 98 "\"test\"blah\"@iana.org". | |
[OK] bad 99 ".wooly@iana.org". | |
[OK] bad 100 "wo..oly@iana.org". | |
[OK] bad 101 "pootietang.@iana.org". | |
[OK] bad 102 ".@iana.org". | |
[OK] bad 103 "Ima Fool@iana.org". | |
[OK] bad 104 "phil.h\\@\\@ck@haacked.com". | |
[OK] bad 105 "first\\last@iana.org". | |
[OK] bad 106 "Abc\\@def@iana.org". | |
[OK] bad 107 "Fred\\ Bloggs@iana.org". | |
[OK] bad 108 "Joe.\\Blow@iana.org". | |
[OK] bad 109 "first.last@[IPv6:1111:2222:3333:4444:5555:... | |
[OK] bad 110 "{^c\\@**Dog^}@cartoon.com". | |
[OK] bad 111 "cal(foo(bar)@iamcal.com". | |
[OK] bad 112 "cal(foo\\)@iamcal.com". | |
[OK] bad 113 "cal(foo)bar)@iamcal.com". | |
[OK] bad 114 "first(middle)last@iana.org". | |
[OK] bad 115 "a(a(b(c)d(e(f))g)(h(i)j)@iana.org". | |
[OK] bad 116 ".@". | |
[OK] bad 117 "@bar.com". | |
[OK] bad 118 "@@bar.com". | |
[OK] bad 119 "aaa.com". | |
[OK] bad 120 "aaa@.com". | |
[OK] bad 121 "aaa@.com". | |
[OK] bad 122 "aaa@.123". | |
[OK] bad 123 "aaa@[123.123.123.123]a". | |
[OK] bad 124 "aaa@[123.123.123.333]". | |
[OK] bad 125 "a@bar.com.". | |
[OK] bad 126 "-@..com". | |
[OK] bad 127 "-@a..com". | |
[OK] bad 128 "test@...........com". | |
[OK] bad 129 "\"\000 \"@char.com". | |
[OK] bad 130 "\000@char.com". | |
[OK] bad 131 "first.last@[IPv6::]". | |
[OK] bad 132 "first.last@[IPv6::::]". | |
[OK] bad 133 "first.last@[IPv6::b4]". | |
[OK] bad 134 "first.last@[IPv6::::b4]". | |
[OK] bad 135 "first.last@[IPv6::b3:b4]". | |
[OK] bad 136 "first.last@[IPv6::::b3:b4]". | |
[OK] bad 137 "first.last@[IPv6:a1:::b4]". | |
[OK] bad 138 "first.last@[IPv6:a1:]". | |
[OK] bad 139 "first.last@[IPv6:a1:::]". | |
[OK] bad 140 "first.last@[IPv6:a1:a2:]". | |
[OK] bad 141 "first.last@[IPv6:a1:a2:::]". | |
[OK] bad 142 "first.last@[IPv6::11.22.33.44]". | |
[OK] bad 143 "first.last@[IPv6::::11.22.33.44]". | |
[OK] bad 144 "first.last@[IPv6:a1:11.22.33.44]". | |
[OK] bad 145 "first.last@[IPv6:a1:::11.22.33.44]". | |
[OK] bad 146 "first.last@[IPv6:a1:a2:::11.22.33.44]". | |
[OK] bad 147 "first.last@[IPv6:0123:4567:89ab:cdef::11.2... | |
[OK] bad 148 "first.last@[IPv6:0123:4567:89ab:CDEFF::11.... | |
[OK] bad 149 "first.last@[IPv6:a1::a4:b1::b4:11.22.33.44]". | |
[OK] bad 150 "first.last@[IPv6:a1::11.22.33]". | |
[OK] bad 151 "first.last@[IPv6:a1::11.22.33.44.55]". | |
[OK] bad 152 "first.last@[IPv6:a1::b211.22.33.44]". | |
[OK] bad 153 "first.last@[IPv6:a1::11.22.33]". | |
[OK] bad 154 "first.last@[IPv6:a1::11.22.33.44.55]". | |
[OK] bad 155 "first.last@[IPv6:a1::b211.22.33.44]". | |
[OK] bad 156 "first.last@[IPv6:a1::b2::11.22.33.44]". | |
[OK] bad 157 "first.last@[IPv6:a1::b3:]". | |
[OK] bad 158 "first.last@[IPv6::a2::b4]". | |
[OK] bad 159 "first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:]". | |
[OK] bad 160 "first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4]". | |
[OK] bad 161 "first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4]". | |
[OK] bad 162 "=?us-ascii?Q?Chri's_Smith?= =?us-ascii?Q?H... | |
[OK] bad 163 "jdoe@[RFC-5322-\\a-domain-literal]". | |
[OK] bad 164 "jdoe@[RFC-5322-\\t-domain-literal]". | |
[OK] bad 165 "jdoe@[RFC-5322-\\]-domain-literal]". | |
[OK] bad 166 "jdoe@[RFC-5322-domain-literal] (comment)". | |
┌──────────────────────────────────────────────────────────────────────────────┐ | |
│ [FAIL] good 0 "Mary Smith <mary@example.net>". │ | |
└──────────────────────────────────────────────────────────────────────────────┘ | |
ASSERT (Err.BaseError { Err.code = "invalid_email"; params = [] }) | |
FAIL (Err.BaseError { Err.code = "invalid_email"; params = [] }) | |
Raised at Alcotest_engine__Test.check_err in file "src/alcotest-engine/test.ml", line 157, characters 20-48 | |
Called from Alcotest_engine__Core.Make.protect_test.(fun) in file "src/alcotest-engine/core.ml", line 181, characters 17-23 | |
Called from Alcotest_engine__Monad.Identity.catch in file "src/alcotest-engine/monad.ml", line 24, characters 31-35 | |
Logs saved to `~/tmp/validate-email/_build/default/_build/_tests/Address test/good.000.output'. | |
────────────────────────────────────────────────────────────────────────────── | |
Full test results in `~/tmp/validate-email/_build/default/_build/_tests/Address test'. | |
134 failures! in 0.050s. 349 tests run. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let make_good_test s = | |
( Printf.sprintf "%S" s, | |
`Quick, | |
fun () -> | |
match Validate.validate_email s with | |
| Ok () -> () | |
| Error e -> Alcotest.failf "%s" (Validate.show_validation_error e) ) | |
let sp = Format.asprintf | |
let make_bad_test s = | |
Alcotest.test_case (sp "%S" s) `Quick @@ fun () -> | |
match Validate.validate_email s with | |
| Ok () -> Alcotest.fail "Expected error" | |
| Error _ -> () | |
let tests = | |
[ | |
"Mary Smith <mary@example.net>"; | |
"Mary Smith <mary@x.test>, jdoe@example.org, Who? <one@y.test>"; | |
"A Group:Ed Jones <c@a.test>,joe@where.test,John <jdoe@one.test>;"; | |
"Undisclosed recipients:;"; | |
"\"Mary Smith: Personal Account\" <smith@home.example>"; | |
"John Doe <jdoe@machine.example>"; | |
{|Pete(A nice \) chap) <pete(his account)@silly.test(his host)>|}; | |
"A Group(Some people) :Chris Jones <c@(Chris's \ | |
host.)public.example>, joe@example.org, John <jdoe@one.test> (my \ | |
dear friend); (the end of the group)"; | |
"(Empty list)(start)Hidden recipients :(nobody(that I know)) ;"; | |
"Mary Smith <@node.test:mary@example.net>, , jdoe@test . example"; | |
"Joe Q. Public <john.q.public@example.com>"; | |
"John Doe <jdoe@machine(comment). example>"; | |
"Mary Smith <mary@example.net>"; | |
"<boss@nil.test>, \"Giant; \\\"Big\\\" Box\" <sysservices@example.net>"; | |
"!#$%&`*+/=?^`{|}~@iana.org"; | |
"(\x07;)mary@example.net"; | |
"\"\\\x0a\"@x.test"; | |
{|"\a"@x.test|}; | |
"\"\x07\"@x.test"; | |
"\"\\\x07\"@x.test"; | |
"pete@[255.255.255.255]"; | |
"\"mary\"@example.net"; | |
"\"\\\"\"@example.net"; | |
"\"john\".\"public\"@example.com"; | |
"\"mary smith\"@home.example"; | |
"\"mary\".smith@home.example"; | |
"\"mary\\\000\"@home.example"; | |
" richard @home.example"; | |
"richar@ home .example"; | |
"mary . smith@y.test"; | |
" jdoe@example.net"; | |
" jdoe@example.net"; | |
"(comment)smith@home.example"; | |
"(comment(comment))smith@home.example"; | |
"smith@(comment)home.example"; | |
"smith@(comment)[255.255.255.255]"; | |
"robert@xn--hxajbheg2az3al.xn--jxalpdlp"; | |
"xn--robert@x.test"; | |
"stephane+blog@bortzmeyer.org"; | |
"{tropdur}@example.org"; | |
"c&a@hotmail.com"; | |
"directeur@arts-premiers.museum"; | |
"\"Stephane[Bortzmeyer]\"@laposte.net"; | |
"first.last@iana.org"; | |
"1234567890123456789012345678901234567890123456789012345678901234@iana.org"; | |
"\"first\\\"last\"@iana.org"; | |
"\"first@last\"@iana.org"; | |
"\"first\\last\"@iana.org"; | |
"first.last@[12.34.56.78]"; | |
"first.last@[IPv6:::12.34.56.78]"; | |
"first.last@[IPv6:1111:2222:3333::4444:12.34.56.78]"; | |
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78]"; | |
"first.last@[IPv6:::1111:2222:3333:4444:5555:6666]"; | |
"first.last@[IPv6:1111:2222:3333::4444:5555:6666]"; | |
"first.last@[IPv6:1111:2222:3333:4444:5555:6666::]"; | |
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888]"; | |
"first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org"; | |
"first.last@3com.com"; | |
"first.last@123.iana.org"; | |
"first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78]"; | |
"first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777]"; | |
"first.last@example.123"; | |
"first.last@com"; | |
"!#$%&'*+-/=?^_`.{|}~@example.com"; | |
"\"Abc@def\"@example.com"; | |
"\"Abc\\@def\"@iana.org"; | |
"\"Fred\\ Bloggs\"@iana.org"; | |
"\"Joe.\\Blow\"@iana.org"; | |
"\"Abc@def\"@iana.org"; | |
"\"Fred Bloggs\"@iana.org"; | |
"user+mailbox@iana.org"; | |
"customer/department=shipping@iana.org"; | |
"$A12345@iana.org"; | |
"!def!xyz%abc@iana.org"; | |
"_somename@iana.org"; | |
"dclo@us.ibm.com"; | |
"peter.piper@iana.org"; | |
"\"Doug \\\"Ace\\\" L.\"@iana.org"; | |
"test@iana.org"; | |
"TEST@iana.org"; | |
"1234567890@iana.org"; | |
"test+test@iana.org"; | |
"test-test@iana.org"; | |
"t*est@iana.org"; | |
"+1~1+@iana.org"; | |
"{_test_}@iana.org"; | |
"\"[[ test ]]\"@iana.org"; | |
"test.test@iana.org"; | |
"\"test.test\"@iana.org"; | |
"test.\"test\"@iana.org"; | |
"\"test@test\"@iana.org"; | |
"test@123.123.123.x123"; | |
"test@123.123.123.123"; | |
"test@[123.123.123.123]"; | |
"test@example.iana.org"; | |
"test@example.example.iana.org"; | |
"\"test\\test\"@iana.org"; | |
"test@example"; | |
"\"test\\blah\"@iana.org"; | |
"\"test\\\"blah\"@iana.org"; | |
"customer/department@iana.org"; | |
"_Yosemite.Sam@iana.org"; | |
"~@iana.org"; | |
"\"Austin@Powers\"@iana.org"; | |
"Ima.Fool@iana.org"; | |
"\"Ima.Fool\"@iana.org"; | |
"\"Ima Fool\"@iana.org"; | |
"\"first\".\"last\"@iana.org"; | |
"\"first\".middle.\"last\"@iana.org"; | |
"\"first\".last@iana.org"; | |
"first.\"last\"@iana.org"; | |
"\"first\".\"middle\".\"last\"@iana.org"; | |
"\"first.middle\".\"last\"@iana.org"; | |
"\"first.middle.last\"@iana.org"; | |
"\"first..last\"@iana.org"; | |
"\"first\\\\\\\"last\"@iana.org"; | |
"first.\"mid\\dle\".\"last\"@iana.org"; | |
"\"test blah\"@iana.org"; | |
"(foo)cal(bar)@(baz)iamcal.com(quux)"; | |
"cal@iamcal(woo).(yay)com"; | |
"cal(woo(yay)hoopla)@iamcal.com"; | |
"cal(foo\\@bar)@iamcal.com"; | |
"cal(foo\\)bar)@iamcal.com"; | |
"first().last@iana.org"; | |
"pete(his account)@silly.test(his host)"; | |
"c@(Chris's host.)public.example"; | |
"jdoe@machine(comment). example"; | |
"1234 @ local(blah) .machine .example"; | |
"first(abc.def).last@iana.org"; | |
"first(a\"bc.def).last@iana.org"; | |
"first.(\")middle.last(\")@iana.org"; | |
"first(abc\\(def)@iana.org"; | |
"first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com"; | |
"a(a(b(c)d(e(f))g)h(i)j)@iana.org"; | |
"name.lastname@domain.com"; | |
"a@b"; | |
"a@bar.com"; | |
"aaa@[123.123.123.123]"; | |
"a@bar"; | |
"a-b@bar.com"; | |
"+@b.c"; | |
"+@b.com"; | |
"a@b.co-foo.uk"; | |
"\"hello my name is\"@stutter.com"; | |
"\"Romain \" <romain@github.com>"; | |
"\"Test \\\"Fail\\\" Ing\"@iana.org"; | |
"valid@about.museum"; | |
"shaitan@my-domain.thisisminekthx"; | |
"foobar@192.168.0.1"; | |
"\"Joe\\Blow\"@iana.org"; | |
"HM2Kinsists@(that comments are allowed)this.is.ok"; | |
"user%uucp!path@berkeley.edu"; | |
"first.last @iana.org"; | |
"cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com"; | |
"first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::]"; | |
"first.last@[IPv6:::]"; | |
"first.last@[IPv6:::b4]"; | |
"first.last@[IPv6:::b3:b4]"; | |
"first.last@[IPv6:a1::b4]"; | |
"first.last@[IPv6:a1::]"; | |
"first.last@[IPv6:a1:a2::]"; | |
"first.last@[IPv6:0123:4567:89ab:cdef::]"; | |
"first.last@[IPv6:0123:4567:89ab:CDEF::]"; | |
"first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44]"; | |
"first.last@[IPv6:a1:a2:a3:a4::11.22.33.44]"; | |
"first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44]"; | |
"first.last@[IPv6:a1::11.22.33.44]"; | |
"first.last@[IPv6:a1:a2::11.22.33.44]"; | |
"first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44]"; | |
"first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44]"; | |
"first.last@[IPv6:a1::b2:11.22.33.44]"; | |
"first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4]"; | |
"first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44]"; | |
"test@test.com"; | |
"test@xn--example.com"; | |
"test@example.com"; | |
"用户@例子.广告"; | |
"अजय@डाटा.भारत"; | |
"квіточка@пошта.укр"; | |
"θσερ@εχαμπλε.ψομ"; | |
"Dörte@Sörensen.example.com"; | |
"коля@пример.рф"; | |
] | |
let bad_tests = | |
[ | |
""; | |
"mary"; | |
"@"; | |
"mary@"; | |
"@io"; | |
"@example.net"; | |
".mary@example.net"; | |
"jdoe.@example.net"; | |
"pete..silly.test"; | |
"sm_i-th.com"; | |
{|mary\@jdoe@one.test|}; | |
"jdoe@.one.test"; | |
"jdon@one.test."; | |
"boss@nil..test"; | |
"\"\"\"@example.net"; | |
"\"\\\"@example.net"; | |
"jdoe\"@machine.example"; | |
"\"jdoe@machine.example"; | |
"\"john\"public@example.com"; | |
"john\"public\"@example.com"; | |
"\"john\"\"public\"@example.com"; | |
"\"mary\000\"@home.example"; | |
"pete@a[255.255.255.255]"; | |
"((comment)smith@home.example"; | |
"smith(coment)doe@home.example"; | |
"robert@henry.com\r"; | |
"(smith@home.example"; | |
"robert@[1.2.3.4"; | |
"\"john\\\"@example.com"; | |
"(comment\\)smith@home.example"; | |
"smith@home.example(comment\\)"; | |
"smith@home.example(comment\\"; | |
"robert@[RFC5322-[domain-literal\\]"; | |
"robert@[RFC5322-[domain-literal]"; | |
"robert@[RFC5322-[domain-literal\\"; | |
"marx@capitalism.ru\x0d"; | |
"\x0dmarx@capitalism.ru"; | |
"\"\x0dmarx\"@capitalism.ru"; | |
"(\x0d)marx@capitalism.ru"; | |
"marx@capitalism.ru(\x0d)"; | |
"smith@communism.uk\x0a"; | |
"\x0asmith@communism.uk"; | |
"\"\x0asmith\"@communism.uk"; | |
"(\x0a)smith@communism.uk"; | |
"smith@communism.uk(\x0a)"; | |
"first.last@sub.do,com"; | |
"first\\@last@iana.org"; | |
"first.last"; | |
".first.last@iana.org"; | |
"first.last.@iana.org"; | |
"first..last@iana.org"; | |
"\"first\"last\"@iana.org"; | |
"\"\"\"@iana.org"; | |
"\"\\\"@iana.org"; | |
"\"\"@iana.org"; | |
"first\\@last@iana.org"; | |
"first.last@"; | |
"first.last@[.12.34.56.78]"; | |
"first.last@[12.34.56.789]"; | |
"first.last@[::12.34.56.78]"; | |
"first.last@[IPv5:::12.34.56.78]"; | |
"first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78]"; | |
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78]"; | |
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777]"; | |
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999]"; | |
"first.last@[IPv6:1111:2222::3333::4444:5555:6666]"; | |
"first.last@[IPv6:1111:2222:333x::4444:5555]"; | |
"first.last@[IPv6:1111:2222:33333::4444:5555]"; | |
"abc\\@def@iana.org"; | |
"abc\\@iana.org"; | |
"@iana.org"; | |
"doug@"; | |
"\"qu@iana.org"; | |
"ote\"@iana.org"; | |
".dot@iana.org"; | |
"dot.@iana.org"; | |
"two..dot@iana.org"; | |
"\"Doug \"Ace\" L.\"@iana.org"; | |
"Doug\\ \\\"Ace\\\"\\ L\\.@iana.org"; | |
"hello world@iana.org"; | |
"gatsby@f.sc.ot.t.f.i.tzg.era.l.d."; | |
"test.iana.org"; | |
"test.@iana.org"; | |
"test..test@iana.org"; | |
".test@iana.org"; | |
"test@test@iana.org"; | |
"test@@iana.org"; | |
"-- test --@iana.org"; | |
"[test]@iana.org"; | |
"\"test\"test\"@iana.org"; | |
{|()[]\;:,><@iana.org|}; | |
"test@."; | |
"test@example."; | |
"test@.org"; | |
"test@[123.123.123.123"; | |
"test@123.123.123.123]"; | |
"NotAnEmail"; | |
"NotAnEmail"; | |
"\"test\"blah\"@iana.org"; | |
".wooly@iana.org"; | |
"wo..oly@iana.org"; | |
"pootietang.@iana.org"; | |
".@iana.org"; | |
"Ima Fool@iana.org"; | |
"phil.h\\@\\@ck@haacked.com"; | |
"first\\last@iana.org"; | |
"Abc\\@def@iana.org"; | |
"Fred\\ Bloggs@iana.org"; | |
"Joe.\\Blow@iana.org"; | |
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]"; | |
"{^c\\@**Dog^}@cartoon.com"; | |
"cal(foo(bar)@iamcal.com"; | |
"cal(foo\\)@iamcal.com"; | |
"cal(foo)bar)@iamcal.com"; | |
"first(middle)last@iana.org"; | |
"a(a(b(c)d(e(f))g)(h(i)j)@iana.org"; | |
".@"; | |
"@bar.com"; | |
"@@bar.com"; | |
"aaa.com"; | |
"aaa@.com"; | |
"aaa@.com"; | |
"aaa@.123"; | |
"aaa@[123.123.123.123]a"; | |
"aaa@[123.123.123.333]"; | |
"a@bar.com."; | |
"-@..com"; | |
"-@a..com"; | |
"test@...........com"; | |
"\"\000 \"@char.com"; | |
"\000@char.com"; | |
"first.last@[IPv6::]"; | |
"first.last@[IPv6::::]"; | |
"first.last@[IPv6::b4]"; | |
"first.last@[IPv6::::b4]"; | |
"first.last@[IPv6::b3:b4]"; | |
"first.last@[IPv6::::b3:b4]"; | |
"first.last@[IPv6:a1:::b4]"; | |
"first.last@[IPv6:a1:]"; | |
"first.last@[IPv6:a1:::]"; | |
"first.last@[IPv6:a1:a2:]"; | |
"first.last@[IPv6:a1:a2:::]"; | |
"first.last@[IPv6::11.22.33.44]"; | |
"first.last@[IPv6::::11.22.33.44]"; | |
"first.last@[IPv6:a1:11.22.33.44]"; | |
"first.last@[IPv6:a1:::11.22.33.44]"; | |
"first.last@[IPv6:a1:a2:::11.22.33.44]"; | |
"first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx]"; | |
"first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44]"; | |
"first.last@[IPv6:a1::a4:b1::b4:11.22.33.44]"; | |
"first.last@[IPv6:a1::11.22.33]"; | |
"first.last@[IPv6:a1::11.22.33.44.55]"; | |
"first.last@[IPv6:a1::b211.22.33.44]"; | |
"first.last@[IPv6:a1::11.22.33]"; | |
"first.last@[IPv6:a1::11.22.33.44.55]"; | |
"first.last@[IPv6:a1::b211.22.33.44]"; | |
"first.last@[IPv6:a1::b2::11.22.33.44]"; | |
"first.last@[IPv6:a1::b3:]"; | |
"first.last@[IPv6::a2::b4]"; | |
"first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:]"; | |
"first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4]"; | |
"first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4]"; | |
"=?us-ascii?Q?Chri's_Smith?= =?us-ascii?Q?Henry?= \ | |
<.@gmail.com,@hotmail.fr:henry.chris+spam@(Chris's host.)public.example> \ | |
(a simple comment)"; | |
"jdoe@[RFC-5322-\\a-domain-literal]"; | |
"jdoe@[RFC-5322-\\t-domain-literal]"; | |
"jdoe@[RFC-5322-\\]-domain-literal]"; | |
"jdoe@[RFC-5322-domain-literal] (comment)"; | |
] | |
let () = | |
Alcotest.run "Address test" | |
[ | |
("good", List.map make_good_test tests); | |
("bad", List.map make_bad_test bad_tests); | |
] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment