|
1 <!DOCTYPE HTML> |
|
2 <html> |
|
3 <!-- |
|
4 https://bugzilla.mozilla.org/show_bug.cgi?id=469304 |
|
5 --> |
|
6 <head> |
|
7 <title>Test for Bug 469304</title> |
|
8 <script type="application/javascript" src="/MochiKit/MochiKit.js"></script> |
|
9 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> |
|
11 </head> |
|
12 <body> |
|
13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=469304">Mozilla Bug 469304</a> |
|
14 <p id="display"></p> |
|
15 <div id="content" style="display: none"> |
|
16 |
|
17 </div> |
|
18 <pre id="test"> |
|
19 <script type="application/javascript"> |
|
20 |
|
21 /** Test for Bug 469304 **/ |
|
22 function testGetAttribute() { |
|
23 var a1 = document.createAttribute("aa"); |
|
24 a1.nodeValue = "lowercase"; |
|
25 var a2 = document.createAttribute("AA"); |
|
26 a2.nodeValue = "UPPERCASE"; |
|
27 document.body.setAttributeNode(a1); |
|
28 document.body.setAttributeNode(a2); |
|
29 var log = document.getElementById("log"); |
|
30 is(document.body.getAttribute('aa'), "UPPERCASE", "Wrong value (1)"); |
|
31 is(document.body.getAttribute('AA'), "UPPERCASE", "Wrong value (2)"); |
|
32 |
|
33 var s = ""; |
|
34 for (var i = 0; i < document.body.attributes.length; ++i) { |
|
35 s += document.body.attributes[i].nodeName + "=" + |
|
36 document.body.attributes[i].nodeValue; |
|
37 } |
|
38 is(s, "AA=UPPERCASE", "Wrong attribute!"); |
|
39 |
|
40 is(document.body.getAttributeNode("aa"), document.body.getAttributeNode("AA"), |
|
41 "Wrong node!"); |
|
42 |
|
43 document.body.getAttributeNode("AA").nodeValue = "FOO"; |
|
44 is(document.body.getAttribute("AA"), "FOO", "Wrong value!"); |
|
45 |
|
46 document.body.removeAttributeNode(document.body.getAttributeNode("AA")); |
|
47 ok(!document.body.hasAttribute("AA"), "Should not have attribute!"); |
|
48 ok(!document.body.getAttributeNode("AA"), "Should not have attribute node!"); |
|
49 ok(!document.body.hasAttribute("aa"), "Should not have attribute!"); |
|
50 ok(!document.body.getAttributeNode("aa"), "Should not have attribute node!"); |
|
51 |
|
52 is(a2.nodeValue, "FOO", "Wrong value!"); |
|
53 a2.nodeValue = "UPPERCASE"; |
|
54 is(a2.nodeValue, "UPPERCASE", "Wrong value!"); |
|
55 |
|
56 document.body.setAttributeNode(a2); |
|
57 is(document.body.getAttribute("AA"), "UPPERCASE", "wrong value!"); |
|
58 ok(document.body.getAttributeNode("AA"), "Should have attribute node!"); |
|
59 is(document.body.getAttribute("aa"), "UPPERCASE", "wrong value!"); |
|
60 ok(document.body.getAttributeNode("aa"), "Should have attribute node!"); |
|
61 } |
|
62 testGetAttribute(); |
|
63 |
|
64 // A bit modified testcases from WebKit. |
|
65 function testGetAttributeCaseInsensitive() { |
|
66 var div = document.createElement('div'); |
|
67 div.setAttribute("mixedCaseAttrib", "x"); |
|
68 // Do original case lookup, and lowercase lookup. |
|
69 return div.getAttribute("mixedcaseattrib"); |
|
70 } |
|
71 is(testGetAttributeCaseInsensitive(), "x", "(1)"); |
|
72 |
|
73 function testGetAttributeNodeMixedCase() { |
|
74 var div = document.createElement('div'); |
|
75 var a = div.ownerDocument.createAttribute("mixedCaseAttrib"); |
|
76 a.nodeValue = "x"; |
|
77 div.setAttributeNode(a); |
|
78 return div.getAttribute("mixedCaseAttrib"); |
|
79 } |
|
80 is(testGetAttributeNodeMixedCase(), "x", "(2)"); |
|
81 |
|
82 function testGetAttributeNodeLowerCase(div) { |
|
83 var div = document.createElement('div'); |
|
84 var a = div.ownerDocument.createAttribute("lowercaseattrib"); |
|
85 a.nodeValue = "x"; |
|
86 div.setAttributeNode(a); |
|
87 return div.getAttribute("lowerCaseAttrib"); |
|
88 } |
|
89 is(testGetAttributeNodeLowerCase(), "x", "(3)"); |
|
90 |
|
91 function testSetAttributeNodeKeepsRef(div) { |
|
92 var div = document.createElement('div'); |
|
93 var a = div.ownerDocument.createAttribute("attrib_name"); |
|
94 a.nodeValue = "0"; |
|
95 div.setAttributeNode(a); |
|
96 // Mutate the attribute node. |
|
97 a.nodeValue = "1"; |
|
98 return div.getAttribute("attrib_name"); |
|
99 } |
|
100 is(testSetAttributeNodeKeepsRef(), "1", "(4)"); |
|
101 |
|
102 function testAttribNodeNamePreservesCase() { |
|
103 var div = document.createElement('div'); |
|
104 var a = div.ownerDocument.createAttribute("A"); |
|
105 a.nodeValue = "x"; |
|
106 div.setAttributeNode(a); |
|
107 var result = [ a.name, a.nodeName ]; |
|
108 return result.join(","); |
|
109 } |
|
110 is(testAttribNodeNamePreservesCase(), "A,A", "(5)"); |
|
111 |
|
112 function testAttribNodeNamePreservesCaseGetNode() { |
|
113 var body = document.body; |
|
114 var a = body.ownerDocument.createAttribute("A"); |
|
115 a.nodeValue = "x"; |
|
116 body.setAttributeNode(a); |
|
117 a = document.body.getAttributeNode("A"); |
|
118 if (!a) |
|
119 return "FAIL"; |
|
120 var result = [ a.name, a.nodeName ]; |
|
121 return result.join(","); |
|
122 } |
|
123 is(testAttribNodeNamePreservesCaseGetNode(), "A,A", "(6)"); |
|
124 |
|
125 function testAttribNodeNamePreservesCaseGetNode2() { |
|
126 var body = document.body; |
|
127 var a = body.ownerDocument.createAttribute("B"); |
|
128 a.nodeValue = "x"; |
|
129 body.setAttributeNode(a); |
|
130 a = document.body.getAttributeNode("B"); |
|
131 if (!a) |
|
132 return "FAIL"; |
|
133 // Now create node second time |
|
134 a = body.ownerDocument.createAttribute("B"); |
|
135 a.nodeValue = "x"; |
|
136 body.setAttributeNode(a); |
|
137 a = document.body.getAttributeNode("B"); |
|
138 var result = [ a.name, a.nodeName ]; |
|
139 return result.join(","); |
|
140 } |
|
141 is(testAttribNodeNamePreservesCaseGetNode2(), "B,B", "(7)"); |
|
142 |
|
143 function testAttribNodeNameGetMutate() { |
|
144 var body = document.body; |
|
145 var a = body.ownerDocument.createAttribute("c"); |
|
146 a.nodeValue = "0"; |
|
147 body.setAttributeNode(a); |
|
148 a = document.body.getAttributeNode("c"); |
|
149 a.value = "1"; |
|
150 a = document.body.getAttributeNode("c"); |
|
151 return a.nodeValue; |
|
152 } |
|
153 is(testAttribNodeNameGetMutate(), "1", "(8)"); |
|
154 |
|
155 var node = document.createElement("div"); |
|
156 var attrib = document.createAttribute("myAttrib"); |
|
157 attrib.nodeValue = "XXX"; |
|
158 node.setAttributeNode(attrib); |
|
159 // Note, this is different to what WebKit does |
|
160 is((new XMLSerializer).serializeToString(node), |
|
161 "<div xmlns=\"http://www.w3.org/1999/xhtml\" myattrib=\"XXX\"></div>", "(9)"); |
|
162 is(node.getAttributeNode('myAttrib').name, "myAttrib", "(10)"); |
|
163 is(node.getAttributeNode('myattrib').name, "myAttrib", "(11)"); |
|
164 is(attrib.name, "myAttrib", "(12)"); |
|
165 |
|
166 var o = document.createElement("div"); |
|
167 o.setAttribute("myAttrib","htmlattr"); |
|
168 o.setAttributeNS("","myAttrib","123"); |
|
169 is(o.getAttributeNodeNS("","myAttrib").nodeName, "myAttrib", "nodeName should be case-sensitive."); |
|
170 is(o.getAttributeNode("myAttrib").nodeName, "myattrib", "nodeName shouldn't be case-sensitive."); |
|
171 is(o.getAttributeNodeNS("","myAttrib").value, "123", "Should have got the case-sensitive attribute."); |
|
172 is(o.attributes.length, 2, "Should have two attributes."); |
|
173 o.setAttribute("myAttrib2", "htmlattr"); |
|
174 o.setAttributeNS("", "myAttrib2", "123"); |
|
175 is(o.attributes.length, 4, "Should have four attributes."); |
|
176 var an = o.attributes.removeNamedItem("myAttrib2"); |
|
177 is(o.attributes.length, 3, "An attribute should have been removed."); |
|
178 is(an.value, "htmlattr", "The removed attribute should have been the case-insensitive attribute."); |
|
179 is(o.getAttribute("myAttrib2"), null, "Element shouldn't have case-insensitive attribute anymore."); |
|
180 var an2 = o.attributes.removeNamedItemNS("", "myAttrib2"); |
|
181 is(an2.localName, "myAttrib2", "The removed attribute should be case-sensitive."); |
|
182 is(o.attributes.length, 2, "Element should have two attributes."); |
|
183 |
|
184 </script> |
|
185 </pre> |
|
186 </body> |
|
187 </html> |