/[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.1 - (hide annotations) (download)
Sat Jun 16 12:36:16 2007 UTC (17 years, 10 months ago) by wakaba
Branch: MAIN
File MIME type: text/plain
See <http://suika.fam.cx/gate/2005/sw/prefix>

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     $table =~ s/\.xhtml\b/$type->[0]/g;
113     open my $file, '>', "set-prefix-list$type->[0]"
114     or die "$0: set-prefix-list$type->[0]: $!";
115     print $file qq[$type->[1]
116     <head>
117     <title>prefix Attribute Test Result</title>
118     <style type="text/css">
119     a {
120     color: blue;
121     }
122     a.NA {
123     color: gray;
124     }
125     a.FAIL {
126     color: red;
127     }
128     </style>
129     </head>
130     <body>
131     <table>
132     <thead>
133     <tr>
134     <th scope="col" colspan="3">Original</th>
135     @{[ map { qq[<th scope="col">$_->[0]</th>] } @set_value ]}
136     </tr>
137     <tr>
138     <th scope="col"><var>Node</var></th>
139     <th scope="col"><code>namespaceURI</code></th>
140     <th scope="col"><code>prefix</code></th>
141     </tr>
142     </thead>
143     $table
144     </table>
145     <p><iframe></iframe></p>
146     <script type="text/javascript">// <![CDATA[
147     window.testItems = ["@{[ join '", "', @items ]}"];
148     window.currentItem = window.testItems.pop ();
149     var iframe = document.getElementsByTagName ('iframe')[0];
150     iframe.onload = function () {
151     try {
152     var result = this.contentWindow.document.getElementById ('result');
153     var resultCell = document.getElementById (window.currentItem);
154     resultCell.className = result.className;
155     resultCell.firstChild.data = result.firstChild.data;
156     } catch (e) { }
157     while (testItems.length > 0) {
158     window.currentItem = window.testItems.pop ();
159     var resultCell = document.getElementById (window.currentItem);
160     if (window.opera && resultCell.title == 'noopera') {
161     /* Don't test since Opera dies with create*NS
162     <http://suika.fam.cx/gate/2005/sw/createAttributeNS> */
163     resultCell.className = 'NA';
164     resultCell.firstChild.data = 'N/A (skipped)';
165     } else {
166     this.src = window.currentItem + "$type->[0]";
167     return;
168     }
169     }
170     this.onload = null;
171     this.style.display = 'none';
172     };
173     iframe.src = window.currentItem + "$type->[0]";
174     // ]]></script>
175     </body>
176     </html>];
177     }

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24