chromium/third_party/blink/web_tests/fast/html/hidden-attr.html

<!DOCTYPE html>
<meta charset=utf8>
<script src="../../resources/js-test.js"></script>

<p id="description"></p>
<div id="console">
Tests that hidden in markup works:
<div hidden><span class=fail>FAIL</span> - this line should not appear</div><div hidden=hidden><span class=fail>FAIL</span> - this line should not appear</div><div hidden=false><span class=fail>FAIL</span> - this line should not appear</div><p hidden><span class=fail>FAIL</span> - this line should not appear</p><span hidden><span class=fail>FAIL</span> - this line should not appear</span><img width=400px alt="FAIL - this should not appear" src="resources/xxx-missing.jpeg" hidden>

Tests that dynamically adding/removing hidden works:
<div hidden id=test1><span class=pass>PASS</span> - this line should appear<div id=test2><span class=fail>FAIL</span> - this line should not appear</div>
</div>
<script>
description('Various tests for the hidden attribute.');

document.getElementById("test1").removeAttribute("hidden");
document.getElementById("test2").setAttribute("hidden", "");

var testParent = document.createElement('div');
document.body.appendChild(testParent);

debug('Dynamic changing of hidden and effects on style:');
testParent.innerHTML="<div id=test3 hidden>a</div><div id=test4>b</div>"
var test3 = document.getElementById("test3");
var test4 = document.getElementById("test4");

shouldBe('getComputedStyle(test3, false).display', '"none"');
test3.removeAttribute("hidden");
debug('test3.removeAttribute("hidden")');
shouldBe('getComputedStyle(test3, false).display', '"block"');

shouldBe('getComputedStyle(test4, false).display', '"block"');
test4.setAttribute("hidden", "");
debug('test4.setAttribute("hidden", "")');
shouldBe('getComputedStyle(test4, false).display', '"none"');

</script>
</body>
</html>