| <!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> |