a600401a8b7f908f8a3887c9c19c9d70ead5ba4a
[WebKit-https.git] / LayoutTests / fast / dom / Window / window-properties.html
1 <p>This test dumps all of the properties that are reachable from the window
2 object, along with their types.</p>
3 <hr>
4 <pre id="pre"></pre>
5
6 <script>
7 if (window.layoutTestController)
8     layoutTestController.dumpAsText();
9     
10 var logBuffer = [];
11 function log(s)
12 {
13     logBuffer.push(s);
14 }
15
16 var pre = document.getElementById('pre');
17 function flushLog()
18 {
19     logBuffer.sort();
20     var logMessage = logBuffer.join("");
21     pre.appendChild(document.createTextNode(logMessage));
22 }
23
24 function tryEval(string)
25 {
26     try {
27         return eval(string);
28     } catch (e) {
29         return new String("Caught exception: " + e);
30     }
31 }
32
33 function typeOfNullAware(value)
34 {
35     if (typeof value == "object" && value == null) //;
36         return "null";
37     return typeof value;
38 }
39
40 function typeStringNullAware(value)
41 {
42     var valueType = typeOfNullAware(value);
43     return valueType == "object"
44         ? Object.prototype.toString.call(value)
45         : "[" + valueType + "]";
46 }
47
48 function logValue(valueName)
49 {
50     var value = tryEval(valueName);
51     var valueType = typeOfNullAware(value);
52
53     // Don't taint the test with our own variables
54     if (value == logBuffer || value == pre)
55         return;
56     
57     // Don't taint the test with our own properties
58     if (/__visitedByLogValue__/.test(valueName) || /__nameWhenVisitedByLogValue__/.test(valueName))
59         return;
60         
61     // Work around DumpRenderTree bug where previous tests add window properties
62     if ("window.opener" == valueName)
63         return;
64     
65     // Work around http://bugs.webkit.org/show_bug.cgi?id=11373
66     if ("window.layoutTestController" == valueName)
67         return;
68
69     // Work around Firefox infinite recursion
70     if (/\.[0-9]/.test(valueName))
71         return;
72     
73     // Work around Firefox exception
74     if ("window.Components" == valueName)
75         return;
76
77     // Avoid infinite recursion
78     if (valueType == "object" && value.__visitedByLogValue__) { //;
79         log(valueName + " [printed above as " + value.__nameWhenVisitedByLogValue__ + "]\n");
80         return;
81     }
82
83     log(valueName + " " + typeStringNullAware(value) + "\n");
84     
85     if (valueType == "object") {
86         value.__visitedByLogValue__ = true;
87         value.__nameWhenVisitedByLogValue__ = valueName;
88         logProperties(value, valueName);
89     }
90 }
91
92 function logProperties(object, objectName)
93 {
94     for (var property in object)
95         logValue(objectName + "." + property);
96 }
97
98 logValue('window');
99 logValue('window.getSelection()');
100 flushLog();
101 </script>