]> gitweb.factorcode.org Git - factor.git/blob - extra/punycode/punycode-tests.factor
punycode: simplify ebnf, and handle iquery.
[factor.git] / extra / punycode / punycode-tests.factor
1
2 USING: arrays assocs fry kernel linked-assocs punycode
3 tools.test urls ;
4
5 {
6     ! Wikipedia Examples
7
8     { "" "" }
9     { "A" "A-" }
10     { "3" "3-" }
11     { "-" "--" }
12     { "--" "---" }
13     { "abc" "abc-" }
14     { "London" "London-" }
15     { "Lloyd-Atkinson" "Lloyd-Atkinson-" }
16     { "This has spaces" "This has spaces-" }
17     { "ü" "tda" }
18     { "αβγ" "mxacd" }
19     { "München" "Mnchen-3ya" }
20     { "Mnchen-3ya" "Mnchen-3ya-" }
21     { "München-Ost" "Mnchen-Ost-9db" }
22     { "Bahnhof München-Ost" "Bahnhof Mnchen-Ost-u6b" }
23
24     ! (A) Arabic (Egyptian):
25     {
26         "\u{0644}\u{064A}\u{0647}\u{0645}\u{0627}\u{0628}\u{062A}\u{0643}\u{0644}\u{0645}\u{0648}\u{0634}\u{0639}\u{0631}\u{0628}\u{064A}\u{061F}"
27         "egbpdaj6bu4bxfgehfvwxn"
28     }
29
30     ! (B) Chinese (simplified):
31     {
32         "\u{4ED6}\u{4EEC}\u{4E3A}\u{4EC0}\u{4E48}\u{4E0D}\u{8BF4}\u{4E2D}\u{6587}"
33         "ihqwcrb4cv8a8dqg056pqjye"
34     }
35
36     ! (C) Chinese (traditional):
37     {
38         "\u{4ED6}\u{5011}\u{7232}\u{4EC0}\u{9EBD}\u{4E0D}\u{8AAA}\u{4E2D}\u{6587}"
39         "ihqwctvzc91f659drss3x8bo0yb"
40     }
41
42     ! (D) Czech:
43     {
44        "\u{0050}\u{0072}\u{006F}\u{010D}\u{0070}\u{0072}\u{006F}\u{0073}\u{0074}\u{011B}\u{006E}\u{0065}\u{006D}\u{006C}\u{0075}\u{0076}\u{00ED}\u{010D}\u{0065}\u{0073}\u{006B}\u{0079}"
45        "Proprostnemluvesky-uyb24dma41a"
46     }
47
48     ! (E) Hebrew:
49     {
50         "\u{05DC}\u{05DE}\u{05D4}\u{05D4}\u{05DD}\u{05E4}\u{05E9}\u{05D5}\u{05D8}\u{05DC}\u{05D0}\u{05DE}\u{05D3}\u{05D1}\u{05E8}\u{05D9}\u{05DD}\u{05E2}\u{05D1}\u{05E8}\u{05D9}\u{05EA}"
51         "4dbcagdahymbxekheh6e0a7fei0b"
52     }
53
54     ! (F) Hindi (Devanagari):
55     {
56         "\u{092F}\u{0939}\u{0932}\u{094B}\u{0917}\u{0939}\u{093F}\u{0928}\u{094D}\u{0926}\u{0940}\u{0915}\u{094D}\u{092F}\u{094B}\u{0902}\u{0928}\u{0939}\u{0940}\u{0902}\u{092C}\u{094B}\u{0932}\u{0938}\u{0915}\u{0924}\u{0947}\u{0939}\u{0948}\u{0902}"
57         "i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd"
58     }
59
60     ! (G) Japanese (kanji and hiragana):
61     {
62         "\u{306A}\u{305C}\u{307F}\u{3093}\u{306A}\u{65E5}\u{672C}\u{8A9E}\u{3092}\u{8A71}\u{3057}\u{3066}\u{304F}\u{308C}\u{306A}\u{3044}\u{306E}\u{304B}"
63         "n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa"
64     }
65
66     ! (H) Korean (Hangul syllables):
67     {
68         "\u{C138}\u{ACC4}\u{C758}\u{BAA8}\u{B4E0}\u{C0AC}\u{B78C}\u{B4E4}\u{C774}\u{D55C}\u{AD6D}\u{C5B4}\u{B97C}\u{C774}\u{D574}\u{D55C}\u{B2E4}\u{BA74}\u{C5BC}\u{B9C8}\u{B098}\u{C88B}\u{C744}\u{AE4C}"
69         "989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c"
70     }
71
72     ! (I) Russian (Cyrillic):
73     {
74         "\u{043F}\u{043E}\u{0447}\u{0435}\u{043C}\u{0443}\u{0436}\u{0435}\u{043E}\u{043D}\u{0438}\u{043D}\u{0435}\u{0433}\u{043E}\u{0432}\u{043E}\u{0440}\u{044F}\u{0442}\u{043F}\u{043E}\u{0440}\u{0443}\u{0441}\u{0441}\u{043A}\u{0438}"
75         ! FIXME: example has upper-case? "b1abfaaepdrnnbgefbaDotcwatmq2g4l"
76         "b1abfaaepdrnnbgefbadotcwatmq2g4l"
77     }
78
79     ! (J) Spanish:
80     {
81         "\u{0050}\u{006F}\u{0072}\u{0071}\u{0075}\u{00E9}\u{006E}\u{006F}\u{0070}\u{0075}\u{0065}\u{0064}\u{0065}\u{006E}\u{0073}\u{0069}\u{006D}\u{0070}\u{006C}\u{0065}\u{006D}\u{0065}\u{006E}\u{0074}\u{0065}\u{0068}\u{0061}\u{0062}\u{006C}\u{0061}\u{0072}\u{0065}\u{006E}\u{0045}\u{0073}\u{0070}\u{0061}\u{00F1}\u{006F}\u{006C}"
82         "PorqunopuedensimplementehablarenEspaol-fmd56a"
83     }
84
85     ! (K) Vietnamese:
86     {
87         "\u{0054}\u{1EA1}\u{0069}\u{0073}\u{0061}\u{006F}\u{0068}\u{1ECD}\u{006B}\u{0068}\u{00F4}\u{006E}\u{0067}\u{0074}\u{0068}\u{1EC3}\u{0063}\u{0068}\u{1EC9}\u{006E}\u{00F3}\u{0069}\u{0074}\u{0069}\u{1EBF}\u{006E}\u{0067}\u{0056}\u{0069}\u{1EC7}\u{0074}"
88         "TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g"
89     }
90
91     ! (L) 3<nen>B<gumi><kinpachi><sensei>
92     {
93         "\u{0033}\u{5E74}\u{0042}\u{7D44}\u{91D1}\u{516B}\u{5148}\u{751F}"
94         "3B-ww4c5e180e575a65lsy2b"
95     }
96
97     ! (M) <amuro><namie>-with-SUPER-MONKEYS
98     {
99         "\u{5B89}\u{5BA4}\u{5948}\u{7F8E}\u{6075}\u{002D}\u{0077}\u{0069}\u{0074}\u{0068}\u{002D}\u{0053}\u{0055}\u{0050}\u{0045}\u{0052}\u{002D}\u{004D}\u{004F}\u{004E}\u{004B}\u{0045}\u{0059}\u{0053}"
100         "-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n"
101     }
102
103     ! (N) Hello-Another-Way-<sorezore><no><basho>
104     {
105         "\u{0048}\u{0065}\u{006C}\u{006C}\u{006F}\u{002D}\u{0041}\u{006E}\u{006F}\u{0074}\u{0068}\u{0065}\u{0072}\u{002D}\u{0057}\u{0061}\u{0079}\u{002D}\u{305D}\u{308C}\u{305E}\u{308C}\u{306E}\u{5834}\u{6240}"
106        "Hello-Another-Way--fc4qua05auwb3674vfr0b"
107     }
108
109     ! (O) <hitotsu><yane><no><shita>2
110     {
111         "\u{3072}\u{3068}\u{3064}\u{5C4B}\u{6839}\u{306E}\u{4E0B}\u{0032}"
112         "2-u9tlzr9756bt3uc0v"
113     }
114
115     ! (P) Maji<de>Koi<suru>5<byou><mae>
116     {
117        "\u{004D}\u{0061}\u{006A}\u{0069}\u{3067}\u{004B}\u{006F}\u{0069}\u{3059}\u{308B}\u{0035}\u{79D2}\u{524D}"
118        "MajiKoi5-783gue6qz075azm5e"
119     }
120
121     ! (Q) <pafii>de<runba>
122     {
123        "\u{30D1}\u{30D5}\u{30A3}\u{30FC}\u{0064}\u{0065}\u{30EB}\u{30F3}\u{30D0}"
124        "de-jg4avhby1noc0d"
125     }
126
127     ! (R) <sono><supiido><de>
128     {
129         "\u{305D}\u{306E}\u{30B9}\u{30D4}\u{30FC}\u{30C9}\u{3067}"
130         "d9juau41awczczp"
131     }
132
133     ! (S) -> $1.00 <-
134     {
135        "\u{002D}\u{003E}\u{0020}\u{0024}\u{0031}\u{002E}\u{0030}\u{0030}\u{0020}\u{003C}\u{002D}"
136         "-> $1.00 <--"
137     }
138 } [
139     [ [ 1array ] dip '[ _ punycode> ] unit-test ]
140     [ 1array swap '[ _ >punycode ] unit-test ] 2bi
141 ] assoc-each
142
143 {
144     { "😉.com" "xn--n28h.com" }
145     { "💩.la" "xn--ls8h.la" }
146     { "са.com" "xn--80a7a.com" } ! phishing
147 } [
148     [ [ 1array ] dip '[ _ idna> ] unit-test ]
149     [ 1array swap '[ _ >idna ] unit-test ] 2bi
150 ] assoc-each
151
152 { IRL" http://例子.卷筒纸" } [ URL" http://xn--fsqu00a.xn--3lr804guic/" >irl ] unit-test
153 { URL" http://xn--fsqu00a.xn--3lr804guic/" } [ IRL" http://例子.卷筒纸" >url ] unit-test
154
155 {
156     T{ irl
157         { protocol "http" }
158         { username f }
159         { password f }
160         { host "März.com" }
161         { port f }
162         { path "/päth" }
163         { query LH{ { "query" "Dürst" } } }
164         { anchor "☃" }
165     }
166 } [ "http://März.com/päth?query=Dürst#☃" >irl ] unit-test