Attributes on the Window instance should be configurable unless [Unforgeable]
[WebKit-https.git] / LayoutTests / fast / dom / global-constructors.html
1 <html>
2 <head>
3 <style>
4   * {
5     color: black;
6   }
7 </style>
8 <script>
9 function print(message, color) 
10 {
11     var paragraph = document.createElement("div");
12     paragraph.appendChild(document.createTextNode(message));
13     paragraph.style.fontFamily = "monospace";
14     if (color)
15         paragraph.style.color = color;
16     document.getElementById("console").appendChild(paragraph);
17 }
18
19 function shouldBe(a, b)
20 {
21     var evalA;
22     try {
23         evalA = eval(a);
24     } catch(e) {
25         evalA = e;
26     }
27     if (evalA != b)
28         print("FAIL: " + a + " should be " + b + " but instead is " + evalA, "red");
29 }
30
31 function test() 
32 {
33     if (window.testRunner)
34         testRunner.dumpAsText();
35
36     domParser = new DOMParser();
37     shouldBe("DOMParser.prototype.isPrototypeOf(domParser)", true);
38     
39     xmlHttpRequest = new XMLHttpRequest();
40     shouldBe("XMLHttpRequest.prototype.isPrototypeOf(xmlHttpRequest)", true);
41     
42     xmlSerializer = new XMLSerializer();
43     shouldBe("XMLSerializer.prototype.isPrototypeOf(xmlSerializer)", true);
44     
45     xsltProcessor = new XSLTProcessor();
46     shouldBe("XSLTProcessor.prototype.isPrototypeOf(xsltProcessor)", true);
47
48     shouldBe("window.Document.prototype.isPrototypeOf(document)", true);
49     shouldBe("window.HTMLDocument.prototype.isPrototypeOf(document)", true);
50     
51     element = document.body;
52     shouldBe("window.Node.prototype.isPrototypeOf(element)", true);
53     shouldBe("window.Element.prototype.isPrototypeOf(element)", true);
54     shouldBe("window.HTMLElement.prototype.isPrototypeOf(element)", true);
55     
56     range = document.createRange();
57     shouldBe("window.Range.prototype.isPrototypeOf(range)", true);
58     
59     cssRule = document.styleSheets[0].cssRules[0];
60     shouldBe("window.CSSRule.prototype.isPrototypeOf(cssRule)", true);
61     
62     cssPrimitiveValue = cssRule.style.getPropertyCSSValue("color");
63     shouldBe("window.CSSValue.prototype.isPrototypeOf(cssPrimitiveValue)", true);
64     shouldBe("window.CSSPrimitiveValue.prototype.isPrototypeOf(cssPrimitiveValue)", true);
65
66     cssStyleDeclaration = cssRule.style;
67     shouldBe("window.CSSStyleDeclaration.prototype.isPrototypeOf(cssStyleDeclaration)", true);
68
69     event = document.createEvent("MutationEvents");
70     shouldBe("window.Event.prototype.isPrototypeOf(event)", true);
71     shouldBe("window.MutationEvent.prototype.isPrototypeOf(event)", true);
72
73     xmldoc = document.implementation.createDocument(null, null, null);
74     shouldBe("window.XMLDocument.prototype.isPrototypeOf(xmldoc)", true);
75     
76     fragment = document.createDocumentFragment();
77     shouldBe("window.DocumentFragment.prototype.isPrototypeOf(fragment)", true);
78     
79     xpathevaluator = new XPathEvaluator();
80     shouldBe("window.XPathEvaluator.prototype.isPrototypeOf(xpathevaluator)", true);
81     
82     xpathresult = xpathevaluator.evaluate('/', document, null, 0, null);
83     shouldBe("window.XPathResult.prototype.isPrototypeOf(xpathresult)", true);
84     
85     try {
86       nodeFilter = document.createNodeIterator(document, NodeFilter.SHOW_ELEMENT, function () {}, false).filter;
87     } catch(e) {}
88     shouldBe("Function.prototype.isPrototypeOf(nodeFilter)", true);
89
90     originalNodePrototype = window.Node.prototype;
91     
92     delete window.Node.prototype;
93     print("[Deleted window.Node.prototype]");
94     shouldBe("window.Node.prototype", originalNodePrototype);
95     
96     originalNodeConstructor = window.Node;    
97
98     // Set window.Node
99     window.Node = 1;
100     print("[Set window.Node = 1]");
101     shouldBe("window.Node", 1);
102     
103     // Delete window.Node
104     delete window.Node;
105     print("[Deleted window.Node]");
106     shouldBe("window.Node", undefined);
107
108     window.Node = originalNodeConstructor;
109
110     // Attempt to shadow window.Node with a frame named 'Node'
111     var iframe = document.createElement('iframe');
112     iframe.setAttribute('name', "Node");
113     document.body.appendChild(iframe);
114     print("[Added an iframe named 'Node']");
115     shouldBe("window.Node", originalNodeConstructor);
116     
117 }
118 </script>
119 </head>
120
121 <body onload="test();">
122 <p>This page tests global constructor objects like window.HTMLDocument. If it passes, you'll
123    see no lines with the text FAIL below.
124 </p>
125 <hr>
126 <div id='console'></div>
127
128 </body>
129 </html>