This test checks whether passing wrong types to setAttributeNode causes a crash.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS element.setAttributeNode("style"); threw exception TypeError: Argument 1 ('attr') to Element.setAttributeNode must be an instance of Attr.
PASS element.setAttributeNode(null); threw exception TypeError: Argument 1 ('attr') to Element.setAttributeNode must be an instance of Attr.
PASS element.setAttributeNode(undefined); threw exception TypeError: Argument 1 ('attr') to Element.setAttributeNode must be an instance of Attr.
PASS element.setAttributeNode(new Object); threw exception TypeError: Argument 1 ('attr') to Element.setAttributeNode must be an instance of Attr.
PASS element.removeAttributeNode("style"); threw exception TypeError: Argument 1 ('attr') to Element.removeAttributeNode must be an instance of Attr.
PASS element.removeAttributeNode(null); threw exception TypeError: Argument 1 ('attr') to Element.removeAttributeNode must be an instance of Attr.
PASS element.removeAttributeNode(undefined); threw exception TypeError: Argument 1 ('attr') to Element.removeAttributeNode must be an instance of Attr.
PASS element.removeAttributeNode(new Object); threw exception TypeError: Argument 1 ('attr') to Element.removeAttributeNode must be an instance of Attr.
PASS element.setAttributeNodeNS("style"); threw exception TypeError: Argument 1 ('attr') to Element.setAttributeNodeNS must be an instance of Attr.
PASS element.setAttributeNodeNS(null); threw exception TypeError: Argument 1 ('attr') to Element.setAttributeNodeNS must be an instance of Attr.
PASS element.setAttributeNodeNS(undefined); threw exception TypeError: Argument 1 ('attr') to Element.setAttributeNodeNS must be an instance of Attr.
PASS element.setAttributeNodeNS(new Object); threw exception TypeError: Argument 1 ('attr') to Element.setAttributeNodeNS must be an instance of Attr.
PASS successfullyParsed is true

TEST COMPLETE

