test_bug588990.html (8775B)
1 <html> 2 <!-- 3 https://bugzilla.mozilla.org/show_bug.cgi?id=588990 4 --> 5 <head> 6 <title>Test for Bug 588990</title> 7 <script src="/tests/SimpleTest/SimpleTest.js"></script> 8 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 9 </head> 10 <body> 11 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=588990">Mozilla Bug 588990</a> 12 <!-- DOM to muck around with for tests --> 13 <p id="root"> 14 <img name="n1"> 15 <img name="n2"> 16 <img name="n2"> 17 <img name="n3"> 18 <img name="n3"> 19 <img name="n3"> 20 </p> 21 22 <pre id="test"> 23 <script class="testbody" type="text/javascript"> 24 25 function test() { 26 root = $('root'); 27 i1_1 = root.children[0]; 28 i2_1 = root.children[1]; 29 i2_2 = root.children[2]; 30 i3_1 = root.children[3]; 31 i3_2 = root.children[4]; 32 i3_3 = root.children[5]; 33 34 function checkHasName(test) { 35 // Check name first to avoid flushes from hiding problems 36 checkHasNameNoDocProp(test); 37 38 is(document.n1, i1_1, "i1_1 doc.name " + test); 39 is(document.n2[0], i2_1, "i2_1 doc.name " + test); 40 is(document.n2[1], i2_2, "i2_2 doc.name " + test); 41 is(document.n2.length, 2, "doc.name.length " + test); 42 is(document.n3[0], i3_1, "i3_1 doc.name " + test); 43 is(document.n3[1], i3_2, "i3_2 doc.name " + test); 44 is(document.n3[2], i3_3, "i3_3 doc.name " + test); 45 is(document.n3.length, 3, "doc.name.length " + test); 46 } 47 48 function checkHasNameNoDocProp(test) { 49 is(i1_1.name, "n1", "i1_1 name " + test); 50 is(i2_1.name, "n2", "i2_1 name " + test); 51 is(i2_2.name, "n2", "i2_2 name " + test); 52 is(i3_1.name, "n3", "i3_1 name " + test); 53 is(i3_2.name, "n3", "i3_2 name " + test); 54 is(i3_3.name, "n3", "i3_3 name " + test); 55 } 56 57 function checkHasNoName(removed, test) { 58 is(i1_1.name, "", "i1_1 name " + test); 59 is(i2_1.name, "", "i2_1 name " + test); 60 is(i2_2.name, "", "i2_2 name " + test); 61 is(i3_1.name, "", "i3_1 name " + test); 62 is(i3_2.name, "", "i3_2 name " + test); 63 is(i3_3.name, "", "i3_3 name " + test); 64 65 var attrValue = removed ? null : ""; 66 is(i1_1.getAttribute("name"), attrValue, "i1_1 getAttribute " + test); 67 is(i2_1.getAttribute("name"), attrValue, "i2_1 getAttribute " + test); 68 is(i2_2.getAttribute("name"), attrValue, "i2_2 getAttribute " + test); 69 is(i3_1.getAttribute("name"), attrValue, "i3_1 getAttribute " + test); 70 is(i3_2.getAttribute("name"), attrValue, "i3_2 getAttribute " + test); 71 is(i3_3.getAttribute("name"), attrValue, "i3_3 getAttribute " + test); 72 73 is(document.n1, undefined, "doc.n1 " + test); 74 is(document.n2, undefined, "doc.n2 " + test); 75 is(document.n3, undefined, "doc.n3 " + test); 76 } 77 78 // Check that dynamic modifications of attribute work 79 80 checkHasName("in markup"); 81 82 i1_1.name = ""; 83 i2_1.name = ""; 84 i2_2.name = ""; 85 i3_1.name = ""; 86 i3_2.name = ""; 87 i3_3.name = ""; 88 89 checkHasNoName(false, "set to empty"); 90 91 i1_1.name = "n1"; 92 i2_1.name = "n2"; 93 i2_2.name = "n2"; 94 i3_1.name = "n3"; 95 i3_2.name = "n3"; 96 i3_3.name = "n3"; 97 98 checkHasName("set using .name"); 99 100 i1_1.setAttribute("name", ""); 101 i2_1.setAttribute("name", ""); 102 i2_2.setAttribute("name", ""); 103 i3_1.setAttribute("name", ""); 104 i3_2.setAttribute("name", ""); 105 i3_3.setAttribute("name", ""); 106 107 checkHasNoName(false, "setAttribute to empty"); 108 109 i1_1.name = "n1"; 110 i2_1.name = "n2"; 111 i2_2.name = "n2"; 112 i3_1.name = "n3"; 113 i3_2.name = "n3"; 114 i3_3.name = "n3"; 115 116 checkHasName("set again using .name"); 117 118 i1_1.removeAttribute("name"); 119 i2_1.removeAttribute("name"); 120 i2_2.removeAttribute("name"); 121 i3_1.removeAttribute("name"); 122 i3_2.removeAttribute("name"); 123 i3_3.removeAttribute("name"); 124 125 checkHasNoName(true, "removed attribute"); 126 127 i1_1.setAttribute("name", "n1"); 128 i2_1.setAttribute("name", "n2"); 129 i2_2.setAttribute("name", "n2"); 130 i3_1.setAttribute("name", "n3"); 131 i3_2.setAttribute("name", "n3"); 132 i3_3.setAttribute("name", "n3"); 133 134 checkHasName("set using setAttribute"); 135 136 t1 = document.createElement("img"); 137 t1.name = "n1"; 138 t2 = document.createElement("img"); 139 t2.name = "n2"; 140 t3 = document.createElement("img"); 141 t3.name = "n2"; 142 t4 = document.createElement("img"); 143 t4.name = "n3"; 144 t5 = document.createElement("img"); 145 t5.name = "n3"; 146 t6 = document.createElement("img"); 147 t6.name = "n3"; 148 149 // Check that inserting elements before/after existing work 150 151 function insertAfter(newChild, existing) { 152 existing.parentNode.insertBefore(newChild, existing.nextSibling); 153 } 154 function insertBefore(newChild, existing) { 155 existing.parentNode.insertBefore(newChild, existing); 156 } 157 function removeNode(child) { 158 child.remove(); 159 } 160 161 insertAfter(t1, i1_1); 162 insertAfter(t2, i2_1); 163 insertAfter(t3, i2_2); 164 insertAfter(t4, i3_1); 165 insertAfter(t5, i3_2); 166 insertAfter(t6, i3_3); 167 168 checkHasNameNoDocProp("inserted after"); 169 is(document.n1[0], i1_1, "i1_1 doc.name inserted after"); 170 is(document.n1[1], t1, "t1 doc.name inserted after"); 171 is(document.n1.length, 2, "doc.name1.length inserted after"); 172 is(document.n2[0], i2_1, "i2_1 doc.name inserted after"); 173 todo_is(document.n2[1], t2, "This is where t2 should show up. The elements in here should be in order-in-document rather than order-of-insertion"); 174 is(document.n2[1], i2_2, "i2_2 doc.name inserted after"); 175 is(document.n2[2], t2, "t2 doc.name inserted after"); 176 is(document.n2[3], t3, "t3 doc.name inserted after"); 177 is(document.n2.length, 4, "doc.name2.length inserted after"); 178 is(document.n3[0], i3_1, "i3_1 doc.name inserted after"); 179 is(document.n3[1], i3_2, "i3_3 doc.name inserted after"); 180 is(document.n3[2], i3_3, "i3_2 doc.name inserted after"); 181 is(document.n3[3], t4, "t4 doc.name inserted after"); 182 is(document.n3[4], t5, "t5 doc.name inserted after"); 183 is(document.n3[5], t6, "t6 doc.name inserted after"); 184 is(document.n3.length, 6, "doc.name3.length inserted after"); 185 186 insertBefore(t1, i1_1); 187 insertBefore(t2, i2_1); 188 insertBefore(t3, i2_2); 189 insertBefore(t4, i3_1); 190 insertBefore(t5, i3_2); 191 insertBefore(t6, i3_3); 192 193 checkHasNameNoDocProp("inserted before"); 194 is(document.n1[0], i1_1, "i1_1 doc.name inserted before"); 195 is(document.n1[1], t1, "t1 doc.name inserted before"); 196 is(document.n1.length, 2, "doc.name1.length inserted before"); 197 is(document.n2[0], i2_1, "i2_1 doc.name inserted before"); 198 is(document.n2[1], i2_2, "i2_2 doc.name inserted before"); 199 is(document.n2[2], t2, "t2 doc.name inserted before"); 200 is(document.n2[3], t3, "t3 doc.name inserted before"); 201 is(document.n2.length, 4, "doc.name2.length inserted before"); 202 is(document.n3[0], i3_1, "i3_1 doc.name inserted before"); 203 is(document.n3[1], i3_2, "i3_3 doc.name inserted before"); 204 is(document.n3[2], i3_3, "i3_2 doc.name inserted before"); 205 is(document.n3[3], t4, "t4 doc.name inserted before"); 206 is(document.n3[4], t5, "t5 doc.name inserted before"); 207 is(document.n3[5], t6, "t6 doc.name inserted before"); 208 is(document.n3.length, 6, "doc.name3.length inserted before"); 209 210 t1.removeAttribute("name"); 211 t2.removeAttribute("name"); 212 t3.removeAttribute("name"); 213 t4.removeAttribute("name"); 214 t5.removeAttribute("name"); 215 t6.removeAttribute("name"); 216 217 checkHasName("removed tx attribute"); 218 219 t1.setAttribute("name", "n1"); 220 t2.setAttribute("name", "n2"); 221 t3.setAttribute("name", "n2"); 222 t4.setAttribute("name", "n3"); 223 t5.setAttribute("name", "n3"); 224 t6.setAttribute("name", "n3"); 225 226 checkHasNameNoDocProp("inserted before"); 227 is(document.n1[0], i1_1, "i1_1 doc.name inserted before"); 228 is(document.n1[1], t1, "t1 doc.name inserted before"); 229 is(document.n1.length, 2, "doc.name1.length inserted before"); 230 is(document.n2[0], i2_1, "i2_1 doc.name inserted before"); 231 is(document.n2[1], i2_2, "i2_2 doc.name inserted before"); 232 is(document.n2[2], t2, "t2 doc.name inserted before"); 233 is(document.n2[3], t3, "t3 doc.name inserted before"); 234 is(document.n2.length, 4, "doc.name2.length inserted before"); 235 is(document.n3[0], i3_1, "i3_1 doc.name inserted before"); 236 is(document.n3[1], i3_2, "i3_3 doc.name inserted before"); 237 is(document.n3[2], i3_3, "i3_2 doc.name inserted before"); 238 is(document.n3[3], t4, "t4 doc.name inserted before"); 239 is(document.n3[4], t5, "t5 doc.name inserted before"); 240 is(document.n3[5], t6, "t6 doc.name inserted before"); 241 is(document.n3.length, 6, "doc.name3.length inserted before"); 242 243 removeNode(t1); 244 removeNode(t2); 245 removeNode(t3); 246 removeNode(t4); 247 removeNode(t5); 248 removeNode(t6); 249 250 checkHasName("removed temporaries"); 251 252 removeNode(i1_1); 253 removeNode(i2_1); 254 removeNode(i2_2); 255 removeNode(i3_1); 256 removeNode(i3_2); 257 removeNode(i3_3); 258 259 checkHasNameNoDocProp("removed node"); 260 261 SimpleTest.finish(); 262 } 263 264 SimpleTest.waitForExplicitFinish(); 265 SimpleTest.executeSoon(test); 266 267 </script> 268 </pre> 269 </body> 270 </html>