Attributes on the Window instance should be configurable unless [Unforgeable]
[WebKit-https.git] / LayoutTests / js / getOwnPropertyDescriptor-window-attributes.html
1 <!DOCTYPE html>
2 <script src="../resources/js-test-pre.js"></script>
3 <script>
4 description("Tests that Object.getOwnPropertyDescriptor() works correctly for Window properties");
5
6 function checkWindowPropertyDescriptor(descriptor, readOnly)
7 {
8     shouldBeType("descriptor.get", "Function");
9     if (readOnly)
10         shouldBeUndefined("descriptor.set");
11     else
12         shouldBeType("descriptor.set", "Function");
13     shouldBeTrue("descriptor.enumerable");
14     shouldBeTrue("descriptor.configurable");
15     nonWindowObject = document;
16     shouldThrow("descriptor.get.call(nonWindowObject)");
17 }
18
19 // The properties of global objects (such as Window) need to be on the instance as per the Web IDL specification,
20 // even if they are not marked as [Unforgeable].
21
22 debug("* Window.screen");
23 descriptor = Object.getOwnPropertyDescriptor(window, "screen");
24 checkWindowPropertyDescriptor(descriptor, false);
25 shouldBeTrue("descriptor.get.call(window) === window.screen");
26 shouldBeTrue("descriptor.get.call() === window.screen");
27
28 debug("");
29 debug("* Window.navigator");
30 descriptor = Object.getOwnPropertyDescriptor(window, "navigator");
31 checkWindowPropertyDescriptor(descriptor, false);
32 shouldBeTrue("descriptor.get.call(window) === window.navigator");
33 shouldBeTrue("descriptor.get.call() === window.navigator");
34
35 debug("");
36 debug("* Window.self");
37 descriptor = Object.getOwnPropertyDescriptor(window, "self");
38 checkWindowPropertyDescriptor(descriptor);
39 shouldBeTrue("descriptor.get.call(window) === window.self");
40 shouldBeTrue("descriptor.get.call() === window.self");
41
42 debug("");
43 debug("* Window.frameElement");
44 descriptor = Object.getOwnPropertyDescriptor(window, "frameElement");
45 checkWindowPropertyDescriptor(descriptor, true);
46 shouldBeTrue("descriptor.get.call(window) === window.frameElement");
47 shouldBeTrue("descriptor.get.call() === window.frameElement");
48
49 debug("");
50 debug("* Window.name");
51 descriptor = Object.getOwnPropertyDescriptor(window, "name");
52 checkWindowPropertyDescriptor(descriptor, false);
53 shouldBeTrue("descriptor.get.call(window) === window.name");
54 shouldBeTrue("descriptor.get.call() === window.name");
55
56 debug("");
57 debug("* window.Node");
58 descriptor = Object.getOwnPropertyDescriptor(window, "Node");
59 shouldBeFalse("descriptor.enumerable");
60 shouldBeTrue("descriptor.writable");
61 shouldBeTrue("descriptor.configurable");
62 shouldBe("descriptor.value", "window.Node");
63
64 debug("");
65 // FIXME: 'constructor' should be on the prototype.
66 debug("* window.constructor");
67 descriptor = Object.getOwnPropertyDescriptor(window, "constructor");
68 shouldBeFalse("descriptor.enumerable");
69 shouldBeTrue("descriptor.writable");
70 shouldBeTrue("descriptor.configurable");
71 shouldBe("descriptor.value", "window.Window");
72
73 debug("");
74 </script>
75 <script src="../resources/js-test-post.js"></script>