<!doctype html> <meta charset=utf-8> <title>HTMLCollection getters and own properties</title> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <div id=log></div> <script> function append(t, tag, name) { var element = document.createElement(tag); if (name) { element.id = name; } document.body.appendChild(element); t.add_cleanup(function() { element.remove(); }); return element; } test(function() { var name = "named", tag = "a"; var c = document.getElementsByTagName(tag); var element = append(this, tag, name); assert_equals(c[name], element); c[name] = "foo"; assert_equals(c[name], element); }, "Setting non-array index while named property exists (loose)"); test(function() { "use strict"; var name = "named", tag = "b"; var c = document.getElementsByTagName(tag); var element = append(this, tag, name); assert_equals(c[name], element); assert_throws_js(TypeError, function() { c[name] = "foo"; }); assert_equals(c[name], element); }, "Setting non-array index while named property exists (strict)"); test(function() { var name = "named", tag = "i"; var c = document.getElementsByTagName(tag); assert_equals(c[name], undefined); c[name] = "foo"; assert_equals(c[name], "foo"); var element = append(this, tag, name); assert_equals(c[name], "foo"); assert_equals(c.namedItem(name), element); }, "Setting non-array index while named property doesn't exist (loose)"); test(function() { "use strict"; var name = "named", tag = "p"; var c = document.getElementsByTagName(tag); assert_equals(c[name], undefined); c[name] = "foo"; assert_equals(c[name], "foo"); var element = append(this, tag, name); assert_equals(c[name], "foo"); assert_equals(c.namedItem(name), element); }, "Setting non-array index while named property doesn't exist (strict)"); test(function() { var tag = "q"; var c = document.getElementsByTagName(tag); var element = append(this, tag); assert_equals(c[0], element); c[0] = "foo"; assert_equals(c[0], element); }, "Setting array index while indexed property exists (loose)"); test(function() { "use strict"; var tag = "s"; var c = document.getElementsByTagName(tag); var element = append(this, tag); assert_equals(c[0], element); assert_throws_js(TypeError, function() { c[0] = "foo"; }); assert_equals(c[0], element); }, "Setting array index while indexed property exists (strict)"); test(function() { var tag = "u"; var c = document.getElementsByTagName(tag); assert_equals(c[0], undefined); c[0] = "foo"; assert_equals(c[0], undefined); var element = append(this, tag); assert_equals(c[0], element); }, "Setting array index while indexed property doesn't exist (loose)"); test(function() { "use strict"; var tag = "u"; var c = document.getElementsByTagName(tag); assert_equals(c[0], undefined); assert_throws_js(TypeError, function() { c[0] = "foo"; }); assert_equals(c[0], undefined); var element = append(this, tag); assert_equals(c[0], element); }, "Setting array index while indexed property doesn't exist (strict)"); </script>