| OLD | NEW |
| 1 description("Tests that accessing Attr after its Element has been destroyed work
s without crashing."); | 1 description("Tests that accessing Attr after its Element has been destroyed work
s without crashing."); |
| 2 | 2 |
| 3 function gc() | 3 function gc() |
| 4 { | 4 { |
| 5 if (window.GCController) | 5 if (window.GCController) |
| 6 return GCController.collect(); | 6 return GCController.collect(); |
| 7 | 7 |
| 8 // Trigger garbage collection indirectly. | 8 // Trigger garbage collection indirectly. |
| 9 for (var i = 0; i < 100000; i++) | 9 for (var i = 0; i < 100000; i++) |
| 10 new String(i); | 10 new String(i); |
| 11 } | 11 } |
| 12 | 12 |
| 13 var element = document.createElement("p"); | 13 var element = document.createElement("p"); |
| 14 element.setAttribute("a", "b"); | 14 element.setAttribute("a", "b"); |
| 15 var attributes = element.attributes; | 15 var attributes = element.attributes; |
| 16 element = null; | 16 element = null; |
| 17 | 17 |
| 18 gc(); | 18 gc(); |
| 19 | 19 |
| 20 shouldBe("attributes.length", "1"); | 20 shouldBe("attributes.length", "1"); |
| 21 shouldBe("attributes[0]", "attributes.item(0)"); | 21 shouldBe("attributes[0]", "attributes.item(0)"); |
| 22 shouldBe("attributes.getNamedItem('a')", "attributes.item(0)"); | 22 shouldBe("attributes.getNamedItem('a')", "attributes.item(0)"); |
| 23 | 23 |
| 24 shouldBe("attributes.item(0).name", "'a'"); | 24 shouldBe("attributes.item(0).name", "'a'"); |
| 25 shouldBe("attributes.item(0).value", "'b'"); | 25 shouldBe("attributes.item(0).value", "'b'"); |
| 26 shouldBe("attributes.item(0).ownerElement.tagName", "'P'"); | |
| 27 | 26 |
| 28 attributes.item(0).value = 'c'; | 27 attributes.item(0).value = 'c'; |
| 29 | 28 |
| 30 shouldBe("attributes.item(0).value", "'c'"); | 29 shouldBe("attributes.item(0).value", "'c'"); |
| 31 | 30 |
| 32 attributes.removeNamedItem('a'); | 31 attributes.removeNamedItem('a'); |
| 33 | 32 |
| 34 shouldBe("attributes.length", "0"); | 33 shouldBe("attributes.length", "0"); |
| 35 | 34 |
| 36 element = document.createElement("p"); | 35 element = document.createElement("p"); |
| 37 element.setAttribute("a", "b"); | 36 element.setAttribute("a", "b"); |
| 38 var attr = element.attributes.item(0); | 37 var attr = element.attributes.item(0); |
| 39 element = null; | 38 element = null; |
| 40 | 39 |
| 41 gc(); | 40 gc(); |
| 42 | 41 |
| 43 shouldBe("attr.name", "'a'"); | 42 shouldBe("attr.name", "'a'"); |
| 44 shouldBe("attr.value", "'b'"); | 43 shouldBe("attr.value", "'b'"); |
| 45 shouldBe("attr.ownerElement.tagName", "'P'"); | |
| 46 | 44 |
| 47 attr.value = 'c'; | 45 attr.value = 'c'; |
| 48 | 46 |
| 49 shouldBe("attr.value", "'c'"); | 47 shouldBe("attr.value", "'c'"); |
| OLD | NEW |