blob: 30fc7edfc966facd303dcf74727a67e22d9e0438 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description(
"<p>This file test the behaviour of getAttribute with regard to case.</p><p>See Bug 20247: setAttributeNode() does not work when attribute name has a capital letter in it</p>"
);
function testGetAttributeCaseInsensitive()
{
var div = document.createElement('div');
div.setAttribute("mixedCaseAttrib", "x");
// Do original case lookup, and lowercase lookup.
return div.getAttribute("mixedcaseattrib");
}
shouldBe("testGetAttributeCaseInsensitive()", '"x"');
function testGetAttributeNodeMixedCase()
{
var div = document.createElement('div');
var a = div.ownerDocument.createAttribute("mixedCaseAttrib");
a.nodeValue = "x";
div.setAttributeNode(a);
return div.getAttributeNS("", "mixedcaseattrib");
}
shouldBe("testGetAttributeNodeMixedCase()", '"x"');
function testGetAttributeNodeLowerCase(div)
{
var div = document.createElement('div');
var a = div.ownerDocument.createAttribute("lowercaseattrib");
a.nodeValue = "x";
div.setAttributeNode(a);
return div.getAttribute("lowerCaseAttrib");
}
shouldBe("testGetAttributeNodeLowerCase()", '"x"');
function testSetAttributeNodeKeepsRef(div)
{
var div = document.createElement('div');
var a = div.ownerDocument.createAttribute("attrib_name");
a.nodeValue = "0";
div.setAttributeNode(a);
// Mutate the attribute node.
a.nodeValue = "1";
return div.getAttribute("attrib_name");
}
shouldBe("testSetAttributeNodeKeepsRef()", '"1"');
function testAttribNodeNamePreservesCase()
{
var div = document.createElement('div');
var a = div.ownerDocument.createAttribute("A");
a.nodeValue = "x";
div.setAttributeNode(a);
var result = [ a.name, a.nodeName ];
return result.join(",");
}
shouldBe("testAttribNodeNamePreservesCase()", '"a,a"');
function testAttribNodeNamePreservesCaseGetNode()
{
// getAttributeNode doesnt work on DIVs, use body element
var body = document.body;
var a = body.ownerDocument.createAttribute("A");
a.nodeValue = "x";
body.setAttributeNode(a);
a = document.body.getAttributeNode("A");
if (!a)
return "FAIL";
var result = [ a.name, a.nodeName ];
return result.join(",");
}
shouldBe("testAttribNodeNamePreservesCaseGetNode()", '"a,a"');
function testAttribNodeNamePreservesCaseGetNode2()
{
// getAttributeNode doesnt work on DIVs, use body element
var body = document.body;
var a = body.ownerDocument.createAttribute("B");
a.nodeValue = "x";
body.setAttributeNode(a);
a = document.body.getAttributeNodeNS("", "b");
if (!a)
return "FAIL";
a = body.ownerDocument.createAttributeNS("", "B");
a.nodeValue = "x";
body.setAttributeNode(a);
a = document.body.getAttributeNodeNS("", "B");
var result = [ a.name, a.nodeName ];
return result.join(",");
}
shouldBe("testAttribNodeNamePreservesCaseGetNode2()", '"B,B"');
function testAttribNodeNameGetMutate()
{
// getAttributeNode doesnt work on DIVs, use body element.
var body = document.body;
var a = body.ownerDocument.createAttribute("c");
a.nodeValue = "0";
body.setAttributeNode(a);
a = document.body.getAttributeNode("c");
a.value = "1";
a = document.body.getAttributeNode("c");
return a.nodeValue;
}
shouldBe("testAttribNodeNameGetMutate()", '"1"');
var node = document.createElement("div");
var attrib = document.createAttribute("myAttrib");
attrib.nodeValue = "XXX";
node.setAttributeNode(attrib);
var attrib2 = document.createAttributeNS("", "myAttrib2");
attrib2.nodeValue = "XXX";
node.setAttributeNode(attrib2);
shouldBe("(new XMLSerializer).serializeToString(node)", '"<div xmlns=\\"http://www.w3.org/1999/xhtml\\" myattrib=\\"XXX\\" myAttrib2=\\"XXX\\"></div>"');
shouldBe("node.getAttributeNodeNS('', 'myattrib')", 'attrib');
shouldBeNull("node.getAttributeNodeNS('', 'myAttrib')");
shouldBe("attrib.name", '"myattrib"');
shouldBe("node.getAttributeNodeNS('', 'myAttrib2')", 'attrib2');
shouldBeNull("node.getAttributeNodeNS('', 'myattrib2')");
shouldBe("attrib2.name", '"myAttrib2"');
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>