DumpRenderTree should allow tests with modal dialogs
[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 var __skip__ = {
48     "window.__skip__" : 1,
49     "window.opener" : 1, // Work around DumpRenderTree bug where previous tests add window properties
50     "window.Components" : 1, // Work around Firefox exception
51
52     // Don't log DumpRenderTree injected objects
53     "window.layoutTestController" : 1, // Work around http://bugs.webkit.org/show_bug.cgi?id=11373
54     "window.GCController" : 1, 
55     "window.accessibilityController" : 1,
56     "window.appleScriptController" : 1,
57     "window.eventSender" : 1,
58     "window.navigationController" : 1,
59     "window.objCController" : 1,
60     "window.objCPlugin" : 1,
61     "window.objCPluginFunction" : 1,
62     "window.plainText" : 1,
63     "window.textInputController" : 1,
64     // Ignore these properties because they do not exist in all implementations. They will be tested separately
65     "window.WebGLRenderingContext" : 1, 
66     "window.WebGLArrayBuffer" : 1, 
67     "window.WebGLByteArray" : 1, 
68     "window.WebGLFloatArray" : 1, 
69     "window.WebGLIntArray" : 1, 
70     "window.WebGLShortArray" : 1, 
71     "window.WebGLUnsignedByteArray" : 1, 
72     "window.WebGLUnsignedIntArray" : 1, 
73     "window.WebGLUnsignedShortArray" : 1,
74     "window.ArrayBuffer" : 1,
75     "window.Int8Array" : 1,
76     "window.Uint8Array" : 1,
77     "window.Int16Array" : 1,
78     "window.Uint16Array" : 1,
79     "window.Int32Array" : 1,
80     "window.Uint32Array" : 1,
81     "window.Float32Array" : 1,
82     "window.clientInformation.geolocation" : 1,
83     "window.Blob.prototype.slice" : 1,
84     "window.FileError" : 1,
85     "window.FileReader" : 1,
86     "window.ondeviceorientation" : 1,
87
88     // showModalDialog is not implemented on all platforms in DumpRenderTree.
89     "window.showModalDialog" : 1
90 };
91
92 function logValue(valueName)
93 {
94     var value = tryEval(valueName);
95     var valueType = typeOfNullAware(value);
96
97     // Don't taint the test with our own variables
98     if (value == logBuffer || value == pre)
99         return;
100
101     // Don't taint the test with our own properties
102     if (/__visitedByLogValue__/.test(valueName) || /__nameWhenVisitedByLogValue__/.test(valueName))
103         return;
104
105     if (__skip__[valueName])
106         return;
107
108     // Work around Firefox infinite recursion
109     if (/\.[0-9]/.test(valueName))
110         return;
111
112     // Avoid infinite recursion
113     if (valueType == "object" && value.__visitedByLogValue__) { //;
114         log(valueName + " [printed above as " + value.__nameWhenVisitedByLogValue__ + "]\n");
115         return;
116     }
117
118     log(valueName + " " + typeStringNullAware(value) + "\n");
119
120     if (valueType == "object") {
121         value.__visitedByLogValue__ = true;
122         value.__nameWhenVisitedByLogValue__ = valueName;
123         logProperties(value, valueName);
124     }
125 }
126
127 function logProperties(object, objectName)
128 {
129     var array = new Array;
130     for (var property in object) {
131         array.push(property);
132     }
133     array.sort();
134     for (var i = 0; i < array.length; i++) {
135         var property = array[i];
136         logValue(objectName + "." + property);
137     }
138 }
139
140 logValue('window');
141 logValue('window.getSelection()');
142 flushLog();
143 </script>