/[suikacvs]/www/test/dom/node/prefix/mktests.pl
Suika

Contents of /www/test/dom/node/prefix/mktests.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations) (download)
Mon Jun 18 15:44:07 2007 UTC (17 years, 10 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -0 lines
File MIME type: text/plain
Extensions in .xhtml file was incorrect

1 wakaba 1.1 #!/usr/bin/perl
2     use strict;
3    
4     my @create_target;
5     for my $uri (
6     [null => 'null'],
7     [absuri => '"http://test/"'],
8     [xmluri => '"http://www.w3.org/XML/1998/namespace"'],
9     [xmlnsuri => '"http://www.w3.org/2000/xmlns/"'],
10     ) {
11     for my $prefix (
12     [null => '"localName"', 'null', '"localName"'],
13     [xml10ncname => '"originalPrefix:localName"',
14     '"originalPrefix"', '"localName"'],
15     [xml => '"xml:lang"', '"xml"', '"lang"'],
16     [xmlns => '"xmlns"', 'null', '"xmlns"'],
17     [xmlnsprefix => '"xmlns:declaredPrefix"', '"xmlns"', '"declaredPrefix"'],
18     ) {
19     push @create_target, ['Attr', $uri->[0], $prefix->[0], qq[
20     var el;
21     try {
22     el = document.createAttributeNS ($uri->[1], $prefix->[1]);
23     } catch (e) { }
24     if (!el) {
25     try {
26     el = document.createAttributeNS ($uri->[1], $prefix->[3]);
27     el.prefix = $prefix->[2];
28     } catch (e) { }
29     }
30     var ok = (el && el.prefix == $prefix->[2] &&
31     el.namespaceURI == $uri->[1]);
32     ]];
33     push @create_target, ['Element', $uri->[0], $prefix->[0], qq[
34     var el;
35     try {
36     el = document.createAttributeNS ($uri->[1], $prefix->[1]);
37     } catch (e) { }
38     if (!el) {
39     try {
40     el = document.createAttributeNS ($uri->[1], $prefix->[3]);
41     el.prefix = $prefix->[2];
42     } catch (e) { }
43     }
44     var ok = (el && el.prefix == $prefix->[2] &&
45     el.namespaceURI == $uri->[1]);
46     ]];
47     }
48     }
49    
50     my @set_value = (
51     ['null', 'null'],
52     ['undefined', 'undefined'],
53     ['empty', '""'],
54     ['nonxmlname', '"12345"'],
55     ['xml10name', '"new:Prefix"'],
56     ['xml10ncname', '"newPrefix"'],
57     ['xml', '"xml"'],
58     ['xmlns', '"xmlns"'],
59     );
60    
61     my $table = q[<tbody>];
62     my @items;
63     for my $create_target (@create_target) {
64     $table .= qq[<tr><th scope="row">$create_target->[0]</th>
65     <th scope="row">$create_target->[1]</th>
66     <th scope="row">$create_target->[2]</th>];
67     for my $set_value (@set_value) {
68     my $file_name = lc ($create_target->[0]) . '-' . $create_target->[1] .
69     '-' . $create_target->[2] . '-' . $set_value->[0];
70     warn $file_name, "\n";
71     $table .= qq[<td><a href="$file_name.xhtml" id="$file_name" class="FAIL"
72     title="@{[ ($create_target->[1] eq 'xmlnsuri' and
73     $create_target->[2] !~ 'xmlns') ? 'noopera' : '' ]}">FAIL (not executed)</a></td>];
74     push @items, $file_name;
75     my $file_content = qq[<head>
76     <title>$create_target->[0].prefix = $set_value->[0]</title>
77     </head><body>
78     <p id="result" class="FAIL">FAIL (not executed)</p>
79     <script type="text/javascript">// <![CDATA[
80     var result = document.getElementById ('result');
81     result.firstChild.data = 'FAIL (script error)';
82     $create_target->[3]
83     if (ok) {
84     try {
85     el.prefix = $set_value->[1];
86     result.className = '';
87     result.firstChild.data = el.prefix + ', type ' + typeof (el.prefix);
88     } catch (e) {
89     result.className = '';
90     result.firstChild.data = e.toString ();
91     }
92     } else {
93     result.className = 'NA';
94     result.firstChild.data = 'N/A';
95     }
96     // ]]></script>
97     </body></html>
98     ];
99     open my $file, '>', "$file_name.html" or die "$0: $file_name.html: $!";
100     print $file "<!DOCTYPE html><html>$file_content";
101     open $file, '>', "$file_name.xhtml" or die "$0: $file_name.xhtml: $!";
102     print $file qq'<html xmlns="http://www.w3.org/1999/xhtml">$file_content';
103     }
104     $table .= q[</tr>];
105     }
106     $table .= q[</tbody>];
107    
108     for my $type (
109     ['.html' => '<!DOCTYPE html><html>'],
110     ['.xhtml' => '<html xmlns="http://www.w3.org/1999/xhtml">'],
111     ) {
112 wakaba 1.2 my $table = $table;
113 wakaba 1.1 $table =~ s/\.xhtml\b/$type->[0]/g;
114     open my $file, '>', "set-prefix-list$type->[0]"
115     or die "$0: set-prefix-list$type->[0]: $!";
116     print $file qq[$type->[1]
117     <head>
118     <title>prefix Attribute Test Result</title>
119     <style type="text/css">
120     a {
121     color: blue;
122     }
123     a.NA {
124     color: gray;
125     }
126     a.FAIL {
127     color: red;
128     }
129     </style>
130     </head>
131     <body>
132     <table>
133     <thead>
134     <tr>
135     <th scope="col" colspan="3">Original</th>
136     @{[ map { qq[<th scope="col">$_->[0]</th>] } @set_value ]}
137     </tr>
138     <tr>
139     <th scope="col"><var>Node</var></th>
140     <th scope="col"><code>namespaceURI</code></th>
141     <th scope="col"><code>prefix</code></th>
142     </tr>
143     </thead>
144     $table
145     </table>
146     <p><iframe></iframe></p>
147     <script type="text/javascript">// <![CDATA[
148     window.testItems = ["@{[ join '", "', @items ]}"];
149     window.currentItem = window.testItems.pop ();
150     var iframe = document.getElementsByTagName ('iframe')[0];
151     iframe.onload = function () {
152     try {
153     var result = this.contentWindow.document.getElementById ('result');
154     var resultCell = document.getElementById (window.currentItem);
155     resultCell.className = result.className;
156     resultCell.firstChild.data = result.firstChild.data;
157     } catch (e) { }
158     while (testItems.length > 0) {
159     window.currentItem = window.testItems.pop ();
160     var resultCell = document.getElementById (window.currentItem);
161     if (window.opera && resultCell.title == 'noopera') {
162     /* Don't test since Opera dies with create*NS
163     <http://suika.fam.cx/gate/2005/sw/createAttributeNS> */
164     resultCell.className = 'NA';
165     resultCell.firstChild.data = 'N/A (skipped)';
166     } else {
167     this.src = window.currentItem + "$type->[0]";
168     return;
169     }
170     }
171     this.onload = null;
172     this.style.display = 'none';
173     };
174     iframe.src = window.currentItem + "$type->[0]";
175     // ]]></script>
176     </body>
177     </html>];
178     }

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24