This test checks whether attribute names with uppercase work properly in HTML documents.

Add an attribute:

    setAttribute(attr_name)

The following should be non-empty, true, or non-null.

    getAttribute(attr_name) = attr_value
    hasAttribute(attr_name) = true
    getAttributeNode(attr_name) = [object Attr]
    attributes.getNamedItem(attr_name) = [object Attr]

    getAttributeNS(attr_name) = attr_value
    hasAttributeNS(attr_name) = true
    getAttributeNodeNS(attr_name) = [object Attr]
    attributes.getNamedItemNS(attr_name) = [object Attr]

    getAttribute(ATTR_NAME) = attr_value
    hasAttribute(ATTR_NAME) = true
    getAttributeNode(ATTR_NAME) = [object Attr]
    attributes.getNamedItem(ATTR_NAME) = [object Attr]

The following should be empty, false, or null.

    getAttributeNS(ATTR_NAME) = null
    hasAttributeNS(ATTR_NAME) = false
    getAttributeNodeNS(ATTR_NAME) = null
    attributes.getNamedItemNS(ATTR_NAME) = null

The following should successfully remove the attribute.

    setAttribute(attr_name); removeAttribute(attr_name)
        hasAttribute(attr_name) = false
    setAttribute(attr_name); removeAttributeNS(attr_name)
        hasAttribute(attr_name) = false
    setAttribute(attr_name); attributes.removeNamedItem(attr_name)
        hasAttribute(attr_name) = false
    setAttribute(attr_name); attributes.removeNamedItemNS(null, attr_name)
        hasAttribute(attr_name) = false

    setAttribute(attr_name); removeAttribute(ATTR_NAME)
        hasAttribute(attr_name) = false
    setAttribute(attr_name); attributes.removeNamedItem(ATTR_NAME)
        hasAttribute(attr_name) = false

The following should fail to remove the attribute.

    setAttribute(attr_name); removeAttributeNS(ATTR_NAME)
        hasAttribute(attr_name) = true

The following should fail to remove the attribute with an exception.

    attributes.removeNamedItemNS(ATTR_NAME) raised an exception as expected
        hasAttribute(attr_name) = true

The following should set a lowercase attribute, so the result should be true.

    setAttributeNS(attr_name)
        hasAttribute(attr_name) = true

The following should set an uppercase attribute, so the result should be false.

    setAttributeNS(ATTR_NAME)
        hasAttribute(attr_name) = false

