63 lines
1.5 KiB
HTML
63 lines
1.5 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<script src="../../../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
description("Tests that accessing Attr after its Element has been destroyed works without crashing.");
|
|
|
|
function gc()
|
|
{
|
|
if (window.GCController)
|
|
return GCController.collect();
|
|
|
|
// Trigger garbage collection indirectly.
|
|
for (var i = 0; i < 100000; i++)
|
|
new String(i);
|
|
}
|
|
|
|
var element = document.createElement("p");
|
|
element.setAttribute("a", "b");
|
|
var attributes = element.attributes;
|
|
element = null;
|
|
|
|
gc();
|
|
|
|
shouldBe("attributes.length", "1");
|
|
shouldBe("attributes[0]", "attributes.item(0)");
|
|
shouldBe("attributes.getNamedItem('a')", "attributes.item(0)");
|
|
|
|
shouldBe("attributes.item(0).name", "'a'");
|
|
shouldBe("attributes.item(0).specified", "true");
|
|
shouldBe("attributes.item(0).value", "'b'");
|
|
shouldBe("attributes.item(0).ownerElement.tagName", "'P'");
|
|
|
|
attributes.item(0).value = 'c';
|
|
|
|
shouldBe("attributes.item(0).value", "'c'");
|
|
|
|
attributes.removeNamedItem('a');
|
|
|
|
shouldBe("attributes.length", "0");
|
|
|
|
element = document.createElement("p");
|
|
element.setAttribute("a", "b");
|
|
var attr = element.attributes.item(0);
|
|
element = null;
|
|
|
|
gc();
|
|
|
|
shouldBe("attr.name", "'a'");
|
|
shouldBe("attr.specified", "true");
|
|
shouldBe("attr.value", "'b'");
|
|
shouldBe("attr.ownerElement.tagName", "'P'");
|
|
|
|
attr.value = 'c';
|
|
|
|
shouldBe("attr.value", "'c'");
|
|
</script>
|
|
<script src="../../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|