Various tests for the the hidden IDL attribute.

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


The IDL attribute reflects what is present in markup:
PASS h1.hidden is true
PASS h2.hidden is true
PASS h3.hidden is true
PASS s1.hidden is false
Changes via DOM Core are reflected through the IDL attribute:
PASS (h1.removeAttribute("hidden"), h1.hidden) is false
PASS (h1.setAttribute("hidden", ""), h1.hidden) is true
PASS (h2.setAttribute("hidden", ""), h2.hidden) is true
PASS (s1.setAttribute("hidden", ""), s1.hidden) is true
Changes via IDL attribute are reflected in the core DOM:
PASS (h3.hidden = false, h3.getAttribute("hidden")) is null
PASS (h3.hidden = true, h3.getAttribute("hidden")) is ""
PASS successfullyParsed is true

TEST COMPLETE

