blob: 7dfdd871f154bdc42429acd975b10c2c866d771c [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/js-test-pre.js"></script>
<script>
description("Tests that Object.getOwnPropertyDescriptor() works correctly for Window properties");
function checkWindowPropertyDescriptor(descriptor, readOnly)
{
shouldBeType("descriptor.get", "Function");
if (readOnly)
shouldBeUndefined("descriptor.set");
else
shouldBeType("descriptor.set", "Function");
shouldBeTrue("descriptor.enumerable");
shouldBeTrue("descriptor.configurable");
nonWindowObject = document;
shouldThrow("descriptor.get.call(nonWindowObject)");
}
// The properties of global objects (such as Window) need to be on the instance as per the Web IDL specification,
// even if they are not marked as [Unforgeable].
debug("* Window.screen");
descriptor = Object.getOwnPropertyDescriptor(window, "screen");
checkWindowPropertyDescriptor(descriptor, false);
shouldBeTrue("descriptor.get.call(window) === window.screen");
shouldBeTrue("descriptor.get.call() === window.screen");
debug("");
debug("* Window.navigator");
descriptor = Object.getOwnPropertyDescriptor(window, "navigator");
checkWindowPropertyDescriptor(descriptor, true);
shouldBeTrue("descriptor.get.call(window) === window.navigator");
shouldBeTrue("descriptor.get.call() === window.navigator");
debug("");
debug("* Window.self");
descriptor = Object.getOwnPropertyDescriptor(window, "self");
checkWindowPropertyDescriptor(descriptor);
shouldBeTrue("descriptor.get.call(window) === window.self");
shouldBeTrue("descriptor.get.call() === window.self");
debug("");
debug("* Window.frameElement");
descriptor = Object.getOwnPropertyDescriptor(window, "frameElement");
checkWindowPropertyDescriptor(descriptor, true);
shouldBeTrue("descriptor.get.call(window) === window.frameElement");
shouldBeTrue("descriptor.get.call() === window.frameElement");
debug("");
debug("* Window.name");
descriptor = Object.getOwnPropertyDescriptor(window, "name");
checkWindowPropertyDescriptor(descriptor, false);
shouldBeTrue("descriptor.get.call(window) === window.name");
shouldBeTrue("descriptor.get.call() === window.name");
debug("");
debug("* window.Node");
descriptor = Object.getOwnPropertyDescriptor(window, "Node");
shouldBeFalse("descriptor.enumerable");
shouldBeTrue("descriptor.writable");
shouldBeTrue("descriptor.configurable");
shouldBe("descriptor.value", "window.Node");
debug("");
debug("* window.__proto__.constructor");
descriptor = Object.getOwnPropertyDescriptor(window.__proto__, "constructor");
shouldBeFalse("descriptor.enumerable");
shouldBeTrue("descriptor.writable");
shouldBeTrue("descriptor.configurable");
shouldBe("descriptor.value", "window.Window");
debug("");
</script>
<script src="../resources/js-test-post.js"></script>