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 |
|
|
} |