Reviewed by Geoff.
[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     var logMessage = logBuffer.join("");
20     pre.appendChild(document.createTextNode(logMessage));
21 }
22
23 function tryEval(string)
24 {
25     try {
26         return eval(string);
27     } catch (e) {
28         return new String("Caught exception: " + e);
29     }
30 }
31
32 function typeOfNullAware(value)
33 {
34     if (typeof value == "object" && value == null) //;
35         return "null";
36     return typeof value;
37 }
38
39 function typeStringNullAware(value)
40 {
41     var valueType = typeOfNullAware(value);
42     return valueType == "object"
43         ? Object.prototype.toString.call(value)
44         : "[" + valueType + "]";
45 }
46
47 function logValue(valueName)
48 {
49     var value = tryEval(valueName);
50     var valueType = typeOfNullAware(value);
51
52     // Don't taint the test with our own variables
53     if (value == logBuffer || value == pre)
54         return;
55     
56     // Don't taint the test with our own properties
57     if (/__visitedByLogValue__/.test(valueName) || /__nameWhenVisitedByLogValue__/.test(valueName))
58         return;
59         
60     // Work around DumpRenderTree bug where previous tests add window properties
61     if ("window.opener" == valueName)
62         return;
63     
64     // Work around http://bugs.webkit.org/show_bug.cgi?id=11373
65     if ("window.layoutTestController" == valueName)
66         return;
67
68     // Work around Firefox infinite recursion
69     if (/\.[0-9]/.test(valueName))
70         return;
71     
72     // Work around Firefox exception
73     if ("window.Components" == valueName)
74         return;
75
76     // Avoid infinite recursion
77     if (valueType == "object" && value.__visitedByLogValue__) { //;
78         log(valueName + " [printed above as " + value.__nameWhenVisitedByLogValue__ + "]\n");
79         return;
80     }
81
82     log(valueName + " " + typeStringNullAware(value) + "\n");
83     
84     if (valueType == "object") {
85         value.__visitedByLogValue__ = true;
86         value.__nameWhenVisitedByLogValue__ = valueName;
87         logProperties(value, valueName);
88     }
89 }
90
91 function logProperties(object, objectName)
92 {
93     var array = new Array;
94     for (var property in object) {
95         array.push(property);
96     }
97     array.sort();
98     for (var i = 0; i < array.length; i++) {
99         var property = array[i];
100         logValue(objectName + "." + property);
101     }
102 }
103
104 logValue('window');
105 logValue('window.getSelection()');
106 flushLog();
107 </script>