<html>
<head>
<script>

function write(str) {
    pre = document.getElementById('console');
    text = document.createTextNode(str + '\n');
    pre.appendChild(text);
}

function runTests() {
    if (window.testRunner)
        testRunner.dumpAsText();

    elem = document.createElement('test');
    elem.setAttribute('attr_name', 'attr_value');
    write("Add an attribute:");
    write("");
    write("    setAttribute(attr_name)");
    write("");
    write("The following should be non-empty, true, or non-null.");
    write("");
    write("    getAttribute(attr_name) = " + elem.getAttribute('attr_name'));
    write("    hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    write("    getAttributeNode(attr_name) = " + elem.getAttributeNode('attr_name'));
    write("    attributes.getNamedItem(attr_name) = " + elem.attributes.getNamedItem('attr_name'));
    write("");
    write("    getAttributeNS(attr_name) = " + elem.getAttributeNS(null, 'attr_name'));
    write("    hasAttributeNS(attr_name) = " + elem.hasAttributeNS(null, 'attr_name'));
    write("    getAttributeNodeNS(attr_name) = " + elem.getAttributeNodeNS(null, 'attr_name'));
    write("    attributes.getNamedItemNS(attr_name) = " + elem.attributes.getNamedItemNS(null, 'attr_name'));
    write("");
    write("    getAttribute(ATTR_NAME) = " + elem.getAttribute('ATTR_NAME'));
    write("    hasAttribute(ATTR_NAME) = " + elem.hasAttribute('ATTR_NAME'));
    write("    getAttributeNode(ATTR_NAME) = " + elem.getAttributeNode('ATTR_NAME'));
    write("    attributes.getNamedItem(ATTR_NAME) = " + elem.attributes.getNamedItem('ATTR_NAME'));
    write("");
    write("The following should be empty, false, or null.");
    write("");
    write("    getAttributeNS(ATTR_NAME) = " + elem.getAttributeNS(null, 'ATTR_NAME'));
    write("    hasAttributeNS(ATTR_NAME) = " + elem.hasAttributeNS(null, 'ATTR_NAME'));
    write("    getAttributeNodeNS(ATTR_NAME) = " + elem.getAttributeNodeNS(null, 'ATTR_NAME'));
    write("    attributes.getNamedItemNS(ATTR_NAME) = " + elem.attributes.getNamedItemNS(null, 'ATTR_NAME'));
    write("");
    write("The following should successfully remove the attribute.");
    write("");
    elem.setAttribute('attr_name', 'attr_value');
    elem.removeAttribute('attr_name');
    write("    setAttribute(attr_name); removeAttribute(attr_name)")
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    elem.setAttribute('attr_name', 'attr_value');
    elem.removeAttributeNS(null, 'attr_name');
    write("    setAttribute(attr_name); removeAttributeNS(attr_name)")
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    elem.setAttribute('attr_name', 'attr_value');
    elem.attributes.removeNamedItem('attr_name');
    write("    setAttribute(attr_name); attributes.removeNamedItem(attr_name)")
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    elem.setAttribute('attr_name', 'attr_value');
    elem.attributes.removeNamedItemNS(null, 'attr_name');
    write("    setAttribute(attr_name); attributes.removeNamedItemNS(null, attr_name)")
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    write("");
    elem.setAttribute('attr_name', 'attr_value');
    elem.removeAttribute('ATTR_NAME');
    write("    setAttribute(attr_name); removeAttribute(ATTR_NAME)")
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    elem.setAttribute('attr_name', 'attr_value');
    elem.attributes.removeNamedItem('ATTR_NAME');
    write("    setAttribute(attr_name); attributes.removeNamedItem(ATTR_NAME)")
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    write("");
    write("The following should fail to remove the attribute.");
    write("");
    elem.setAttribute('attr_name', 'attr_value');
    elem.removeAttributeNS(null, 'ATTR_NAME');
    write("    setAttribute(attr_name); removeAttributeNS(ATTR_NAME)")
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    write("");
    write("The following should fail to remove the attribute with an exception.");
    write("");
    elem.setAttribute('attr_name', 'attr_value');
    try {
        elem.attributes.removeNamedItemNS(null, 'ATTR_NAME');
        write("    attributes.removeNamedItemNS(ATTR_NAME) was expected to raise an exception but did not");
    } catch (e) {
        write("    attributes.removeNamedItemNS(ATTR_NAME) raised an exception as expected");
    }
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    write("");
    write("The following should set a lowercase attribute, so the result should be true.");
    write("");
    elem.setAttributeNS(null, 'attr_name', 'attr_value');
    write("    setAttributeNS(attr_name)");
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    elem.removeAttributeNS(null, 'attr_name');
    write("");
    write("The following should set an uppercase attribute, so the result should be false.");
    write("");
    elem.setAttributeNS(null, 'ATTR_NAME', 'attr_value');
    write("    setAttributeNS(ATTR_NAME)");
    write("        hasAttribute(attr_name) = " + elem.hasAttribute('attr_name'));
    elem.removeAttributeNS(null, 'ATTR_NAME');
}

</script>
</head>

<body onload="runTests();">
<pre id="console">This test checks whether attribute names with uppercase work properly in HTML documents.

</pre>
</body>

</html>
