/[suikacvs]/markup/html/whatpm/t/URIChecker.t
Suika

Contents of /markup/html/whatpm/t/URIChecker.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (hide annotations) (download) (as text)
Sat Aug 30 04:31:57 2008 UTC (16 years, 2 months ago) by wakaba
Branch: MAIN
Changes since 1.3: +77 -76 lines
File MIME type: application/x-troff
++ whatpm/t/ChangeLog	30 Aug 2008 04:31:55 -0000
2008-08-30  Wakaba  <wakaba@suika.fam.cx>

	* URIChecker.t: Test results updated to new error type names.

++ whatpm/Whatpm/ChangeLog	30 Aug 2008 04:31:29 -0000
2008-08-30  Wakaba  <wakaba@suika.fam.cx>

	* URIChecker.pm (check_iri_reference): Requires
	|Message::DOM::DOMImplementation|.

1 wakaba 1.1 #!/usr/bin/perl
2     use strict;
3    
4     use lib qw[/home/wakaba/work/manakai/lib];
5     ## ISSUE: Message::URI::URIReference module.
6    
7     use Test;
8 wakaba 1.2 BEGIN { plan tests => 81 }
9 wakaba 1.1
10     my $Cases = [
11     {
12     data => q<http://localhost/%40/>,
13     errors => [],
14     },
15     {
16     data => q<>,
17     errors => [],
18     },
19     {
20     data => q<abcdef>,
21     errors => [],
22     },
23     {
24     data => q<%7Fabc:efg>,
25 wakaba 1.4 errors => ['m::syntax error:iriref3987'],
26 wakaba 1.1 },
27     {
28     data => q<http://test/[53::0]>,
29 wakaba 1.4 errors => ['m::syntax error:iriref3987'],
30 wakaba 1.1 },
31     {
32     data => q<100%!>,
33 wakaba 1.4 errors => ['m::syntax error:iriref3987'],
34 wakaba 1.1 },
35     {
36     data => q<%a2>,
37 wakaba 1.4 errors => ['w:1:URL:lowercase hexadecimal digit'],
38 wakaba 1.1 },
39     {
40     data => q<%a2?>,
41 wakaba 1.4 errors => ['w:1:URL:lowercase hexadecimal digit'],
42 wakaba 1.1 },
43     {
44     data => q<?%a2>,
45 wakaba 1.4 errors => ['w:2:URL:lowercase hexadecimal digit'],
46 wakaba 1.1 },
47     {
48     data => q<%a2%1b>,
49 wakaba 1.4 errors => ['w:1:URL:lowercase hexadecimal digit',
50     'w:4:URL:lowercase hexadecimal digit'],
51 wakaba 1.1 },
52     {
53     data => q<http://%5b/>,
54 wakaba 1.4 errors => ['w:8:URL:lowercase hexadecimal digit',
55     'w::URL:non-DNS host'],
56 wakaba 1.1 },
57     {
58     data => q<http://%5b/%25a/bv/%cc>,
59 wakaba 1.4 errors => ['w:8:URL:lowercase hexadecimal digit',
60     'w:20:URL:lowercase hexadecimal digit',
61     'w::URL:non-DNS host'],
62 wakaba 1.1 },
63     {
64     data => q<%41>,
65 wakaba 1.4 errors => ['w:1:URL:percent-encoded unreserved'],
66 wakaba 1.1 },
67     {
68     data => q<%41%7E>,
69 wakaba 1.4 errors => ['w:1:URL:percent-encoded unreserved',
70     'w:4:URL:percent-encoded unreserved'],
71 wakaba 1.1 },
72     {
73     data => q</%41>,
74 wakaba 1.4 errors => ['w:2:URL:percent-encoded unreserved'],
75 wakaba 1.1 },
76     {
77     data => q<http://%5a/>,
78 wakaba 1.4 errors => ['w:8:URL:lowercase hexadecimal digit',
79     'w:8:URL:percent-encoded unreserved'],
80 wakaba 1.1 },
81     {
82     data => q<./%2E%2E>,
83 wakaba 1.4 errors => ['w:3:URL:percent-encoded unreserved',
84     'w:6:URL:percent-encoded unreserved'],
85 wakaba 1.1 },
86     {
87     data => q<http://www.example.com/%7Euser/>,
88 wakaba 1.4 errors => ['w:24:URL:percent-encoded unreserved'],
89 wakaba 1.1 },
90     {
91     data => q<HTTP://example/>,
92 wakaba 1.4 errors => ['w::URL:uppercase scheme name'],
93 wakaba 1.1 },
94     {
95     data => q<Http://example/>,
96 wakaba 1.4 errors => ['w::URL:uppercase scheme name'],
97 wakaba 1.1 },
98     {
99     data => q<datA:,>,
100 wakaba 1.4 errors => ['w::URL:uppercase scheme name'],
101 wakaba 1.1 },
102     {
103     data => q<dat%41:,>,
104 wakaba 1.4 errors => ['m::syntax error:iriref3987',
105     'w::URL:uppercase scheme name',
106     'w:4:URL:percent-encoded unreserved'],
107 wakaba 1.1 },
108     {
109     data => q<g%5A:,>,
110 wakaba 1.4 errors => ['m::syntax error:iriref3987',
111     'w::URL:uppercase scheme name',
112     'w:2:URL:percent-encoded unreserved'],
113 wakaba 1.1 },
114     {
115     data => q<g%7A:,>,
116 wakaba 1.4 errors => ['m::syntax error:iriref3987',
117     'w:2:URL:percent-encoded unreserved'],
118 wakaba 1.1 },
119     {
120     data => q<http://www.test:2222/>,
121     errors => [],
122     },
123     {
124     data => q<http://www.example:0/>,
125     errors => [],
126     },
127     {
128     data => q<http://www@example:/>,
129 wakaba 1.4 errors => ['w::URL:empty port'],
130 wakaba 1.1 },
131     {
132     data => q<http://www.test:/>,
133 wakaba 1.4 errors => ['w::URL:empty port'],
134 wakaba 1.1 },
135     {
136     data => q<http://user:password@example/>,
137 wakaba 1.4 errors => ['w::URL:password'],
138 wakaba 1.1 },
139     {
140     data => q<http://EXAMPLE/>,
141 wakaba 1.4 errors => ['w::URL:uppercase host:EXAMPLE'],
142 wakaba 1.1 },
143     {
144     data => q<http://USER@example/>,
145     errors => [],
146     },
147     {
148     data => q<http://[v0.aaa]/>,
149 wakaba 1.4 errors => ['u::URL:address format:v0'],
150 wakaba 1.1 },
151     {
152     data => q<http://user@[v0.aaa]/>,
153 wakaba 1.4 errors => ['u::URL:address format:v0'],
154 wakaba 1.1 },
155     {
156 wakaba 1.2 data => q<http://user@[V0A.aaa]/>,
157 wakaba 1.4 errors => ['u::URL:address format:V0A',
158     'w::URL:uppercase host:[V0A.aaa]'],
159 wakaba 1.2 },
160     {
161 wakaba 1.1 data => q<http://127.0.0.1/>,
162     errors => [],
163     },
164     {
165     data => q<http://123456789012345678901234567890123456789012345678901234567890123.test/>,
166     errors => [],
167     },
168     {
169     data => q<http://1234567890123456789012345678901234567890123456789012345678901234.test/>,
170 wakaba 1.4 errors => ['w::URL:non-DNS host'],
171 wakaba 1.1 },
172     {
173     data => q<http://123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123/>,
174     errors => [],
175     },
176     {
177     data => q<http://123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123./>,
178 wakaba 1.4 errors => ['w::URL:long host'],
179 wakaba 1.1 },
180     {
181     data => q<http://a_b.test/>,
182 wakaba 1.4 errors => ['w::URL:non-DNS host'],
183 wakaba 1.1 },
184     {
185     data => q<http://%61.test/>,
186 wakaba 1.4 errors => ['w:8:URL:percent-encoded unreserved'],
187 wakaba 1.1 },
188     {
189     data => q<http://a.test/>,
190     errors => [],
191     },
192     {
193     data => q<http://1.test/>,
194     errors => [],
195     },
196     {
197     data => q<http://a-1.test/>,
198     errors => [],
199     },
200     {
201     data => q<http://1-a.test/>,
202     errors => [],
203     },
204     {
205     data => q<http://a-.test/>,
206 wakaba 1.4 errors => ['w::URL:non-DNS host'],
207 wakaba 1.1 },
208     {
209     data => q<http://-a.test/>,
210 wakaba 1.4 errors => ['w::URL:non-DNS host'],
211 wakaba 1.1 },
212     {
213     data => q<http://a.b.test/>,
214     errors => [],
215     },
216     {
217     data => q<http://a.bc.test/>,
218     errors => [],
219     },
220     {
221     data => q<http://a.b-c.test/>,
222 wakaba 1.2 errors => [],
223     },
224     {
225     data => qq<http://\x{123}\x{456}.test/>,
226 wakaba 1.4 errors => ['w::URL:non-DNS host'],
227 wakaba 1.2 },
228     {
229     data => qq<http://\x{4E00}%80.test/>,
230 wakaba 1.4 errors => ['w::URL:non-DNS host',
231     'm::URL:non UTF-8 host'],
232 wakaba 1.2 },
233     {
234     data => q<http://a.%E3%81%82%E3%81%84.test/>,
235 wakaba 1.4 errors => ['w::URL:non-DNS host'],
236 wakaba 1.2 },
237     {
238     data => q<example://a/b/c/%7Bfoo%7D>,
239     errors => [],
240     },
241     {
242     data => q<eXAMPLE://a/./b/../b/%63/%7bfoo%7d>,
243 wakaba 1.4 errors => ['w::URL:uppercase scheme name',
244     'w:22:URL:percent-encoded unreserved',
245     'w:26:URL:lowercase hexadecimal digit',
246     'w:32:URL:lowercase hexadecimal digit',
247     'w::URL:dot-segment'],
248 wakaba 1.2 },
249     {
250     data => q<example://a/.htaccess>,
251     errors => [],
252     },
253     {
254     data => q<example://a/.>,
255 wakaba 1.4 errors => ['w::URL:dot-segment'],
256 wakaba 1.2 },
257     {
258     data => q<http://example.com>,
259 wakaba 1.4 errors => ['w::URL:empty path'],
260 wakaba 1.2 },
261     {
262     data => q<http://example.com/>,
263     errors => [],
264     },
265     {
266     data => q<http://example.com:/>,
267 wakaba 1.4 errors => ['w::URL:empty port'],
268 wakaba 1.2 },
269     {
270     data => q<http://example.com:80/>,
271 wakaba 1.4 errors => ['w::URL:default port'],
272 wakaba 1.2 },
273     {
274     data => q<hTTP://example.com:80/>,
275 wakaba 1.4 errors => ['w::URL:uppercase scheme name',
276     'w::URL:default port'],
277 wakaba 1.2 },
278     {
279     data => q<%68ttp://example.com:80/>,
280 wakaba 1.4 errors => ['m::syntax error:iriref3987',
281     'w:1:URL:percent-encoded unreserved',
282     'w::URL:default port'],
283 wakaba 1.2 },
284     {
285     data => q<file://user@/>,
286 wakaba 1.4 errors => ['w::URL:empty host'],
287 wakaba 1.2 },
288     {
289     data => q<http://example.com/?>,
290     errors => [],
291     },
292     {
293     data => q<mailto:Joe@Example.COM>,
294     errors => [],
295     },
296     {
297     data => q<mailto:Joe@example.com>,
298     errors => [],
299     },
300     {
301     data => q<http://example.com/data>,
302     errors => [],
303     },
304     {
305     data => q<ftp://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm>,
306     errors => [],
307     },
308     {
309     data => qq<http://r\xE9sum\xE9.example.org>,
310 wakaba 1.4 errors => ['w::URL:non-DNS host',
311     'w::URL:empty path'],
312 wakaba 1.2 },
313     {
314     data => qq<http://validator.w3.org/check?uri=http%3A%2F%2Fr\xE9;sum\xE9.example.com>,
315     errors => [],
316     },
317     {
318     data => q<http://validator.w3.org/check?uri=http%3A%2F%2Fr%C3%A9sum%C3%A9.example.com>,
319     errors => [],
320     },
321     {
322     data => qq<http://example.com/\x{10300}\x{10301}\x{10302}>,
323     errors => [],
324     },
325     {
326     data => q<http://example.com/%F0%90%8C%80%F0%90%8C%81%F0%90%8C%82>,
327     errors => [],
328     },
329     {
330     data => q<http://www.example.org/r%E9sum%E9.html>,
331     errors => [],
332     },
333     {
334     data => q<http://xn--99zt52a.example.org/%e2%80%ae>,
335 wakaba 1.4 errors => ['w:32:URL:lowercase hexadecimal digit',
336     'w:38:URL:lowercase hexadecimal digit'],
337 wakaba 1.2 },
338     {
339     data => qq<example://a/b/c/%7Bfoo%7D/ros\xE9>,
340     errors => [],
341     },
342     {
343     data => qq<eXAMPLE://a/./b/../b/%63/%7bfoo%7d/ros%C3%A9>,
344 wakaba 1.4 errors => ['w::URL:uppercase scheme name',
345     'w:22:URL:percent-encoded unreserved',
346     'w:26:URL:lowercase hexadecimal digit',
347     'w:32:URL:lowercase hexadecimal digit',
348     'w::URL:dot-segment'],
349 wakaba 1.2 },
350     {
351     data => qq<http://www.example.org/r\xE9sum\xE9.html>,
352     errors => [],
353     },
354     {
355     data => qq<http://www.example.org/re\x{301}sume\x{301}.html>,
356     errors => [], ## TODO: not in NFC
357     },
358     {
359     data => q<http://www.example.org/r%E9sum%E9.xml#r%C3%A9sum%C3%A9>,
360 wakaba 1.1 errors => [],
361     },
362     ];
363    
364     require Whatpm::URIChecker;
365    
366     for my $test (@$Cases) {
367     @{$test->{errors}} = sort {$a cmp $b} @{$test->{errors}};
368     my @errors;
369     Whatpm::URIChecker->check_iri_reference ($test->{data}, sub {
370     my %opt = @_;
371     push @errors, $opt{level} . ':' .
372     (defined $opt{position} ? $opt{position} : '') . ':' .
373 wakaba 1.4 $opt{type} .
374     (defined $opt{value} ? ':' . $opt{value} : '');
375 wakaba 1.1 });
376     @errors = sort {$a cmp $b} @errors;
377    
378     ok join ("\n", @errors), join ("\n", @{$test->{errors}}), $test->{data};
379     }

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24