OLD | NEW |
1 <p>This page tests getting and setting window properties and functions.</p> | 1 <p>This page tests getting and setting window properties and functions.</p> |
2 <pre id="console"></pre> | 2 <pre id="console"></pre> |
3 | 3 |
4 <script> | 4 <script> |
5 function log(s) | 5 function log(s) |
6 { | 6 { |
7 document.getElementById("console").appendChild(document.createTextNode(s + "
\n")); | 7 document.getElementById("console").appendChild(document.createTextNode(s + "
\n")); |
8 } | 8 } |
9 | 9 |
10 function shouldBe(a, b) | 10 function shouldBe(a, b) |
(...skipping 25 matching lines...) Expand all Loading... |
36 function canGet(keyPath) | 36 function canGet(keyPath) |
37 { | 37 { |
38 try { | 38 try { |
39 return eval("window." + keyPath) !== undefined; | 39 return eval("window." + keyPath) !== undefined; |
40 } catch(e) { | 40 } catch(e) { |
41 return false; | 41 return false; |
42 } | 42 } |
43 } | 43 } |
44 | 44 |
45 window.marker = { "foo": "bar", toString: function(){ return "window.marker.toSt
ring()"; } }; | 45 window.marker = { "foo": "bar", toString: function(){ return "window.marker.toSt
ring()"; } }; |
| 46 window.callableMarker = function() { return "window.callableMarker.toString()";
}; |
46 | 47 |
47 function canSet(keyPath) | 48 function canSet(keyPath) |
48 { | 49 { |
49 var valuePath = "window.marker"; | 50 var valuePath = "window.marker"; |
50 | 51 |
51 try { | 52 try { |
52 eval("window." + keyPath + " = " + valuePath); | 53 eval("window." + keyPath + " = " + valuePath); |
53 return eval("window." + keyPath) === eval("window." + valuePath); | 54 return eval("window." + keyPath) === eval("window." + valuePath); |
54 } catch(e) { | 55 } catch(e) { |
55 return false; | 56 return false; |
56 } | 57 } |
57 } | 58 } |
58 | 59 |
59 function canSetWithTypeConversion(keyPath) | 60 function canSetWithTypeConversion(keyPath) |
60 { | 61 { |
61 var valuePath = "window.marker"; | 62 var valuePath = "window.marker"; |
62 | 63 |
63 try { | 64 try { |
64 eval("window." + keyPath + " = " + valuePath); | 65 eval("window." + keyPath + " = " + valuePath); |
65 return eval("window." + keyPath) == eval("window." + valuePath); | 66 return eval("window." + keyPath) == eval("window." + valuePath); |
66 } catch(e) { | 67 } catch(e) { |
67 return false; | 68 return false; |
68 } | 69 } |
69 } | 70 } |
70 | 71 |
| 72 function canSetWithCallable(keyPath) |
| 73 { |
| 74 var valuePath = "window.callableMarker"; |
| 75 |
| 76 try { |
| 77 eval("window." + keyPath + " = " + valuePath); |
| 78 return eval("window." + keyPath) === eval("window." + valuePath); |
| 79 } catch(e) { |
| 80 return false; |
| 81 } |
| 82 } |
| 83 |
71 var windowReadWriteProperties = [ | 84 var windowReadWriteProperties = [ |
72 "Attr", | 85 "Attr", |
73 "CDATASection", | 86 "CDATASection", |
74 "CSSPrimitiveValue", | 87 "CSSPrimitiveValue", |
75 "CSSRule", | 88 "CSSRule", |
76 "CSSStyleDeclaration", | 89 "CSSStyleDeclaration", |
77 "CSSValue", | 90 "CSSValue", |
78 "CharacterData", | 91 "CharacterData", |
79 "Comment", | 92 "Comment", |
80 "DOMException", | 93 "DOMException", |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 "blur", | 231 "blur", |
219 "close", | 232 "close", |
220 "confirm", | 233 "confirm", |
221 "find", | 234 "find", |
222 "focus", | 235 "focus", |
223 "getComputedStyle", | 236 "getComputedStyle", |
224 "getMatchedCSSRules", | 237 "getMatchedCSSRules", |
225 "getSelection", | 238 "getSelection", |
226 "moveBy", | 239 "moveBy", |
227 "moveTo", | 240 "moveTo", |
| 241 "open", |
| 242 "print", |
| 243 "prompt", |
| 244 "releaseEvents", |
| 245 "removeEventListener", |
| 246 "resizeBy", |
| 247 "resizeTo", |
| 248 "scroll", |
| 249 "scrollBy", |
| 250 "scrollTo", |
| 251 "setInterval", |
| 252 "setTimeout", |
| 253 "stop" |
| 254 ]; |
| 255 |
| 256 var windowEventHandlers = [ |
228 "onabort", | 257 "onabort", |
229 "onbeforeunload", | 258 "onbeforeunload", |
230 "onblur", | 259 "onblur", |
231 "onchange", | 260 "onchange", |
232 "onclick", | 261 "onclick", |
233 "ondblclick", | 262 "ondblclick", |
234 "onerror", | 263 "onerror", |
235 "onfocus", | 264 "onfocus", |
236 "onkeydown", | 265 "onkeydown", |
237 "onkeypress", | 266 "onkeypress", |
238 "onkeyup", | 267 "onkeyup", |
239 "onload", | 268 "onload", |
240 "onmousedown", | 269 "onmousedown", |
241 "onmousemove", | 270 "onmousemove", |
242 "onmouseout", | 271 "onmouseout", |
243 "onmouseover", | 272 "onmouseover", |
244 "onmouseup", | 273 "onmouseup", |
245 "onmousewheel", | 274 "onmousewheel", |
246 "onreset", | 275 "onreset", |
247 "onresize", | 276 "onresize", |
248 "onscroll", | 277 "onscroll", |
249 "onsearch", | 278 "onsearch", |
250 "onselect", | 279 "onselect", |
251 "onsubmit", | 280 "onsubmit", |
252 "onunload", | 281 "onunload" |
253 "open", | |
254 "print", | |
255 "prompt", | |
256 "releaseEvents", | |
257 "removeEventListener", | |
258 "resizeBy", | |
259 "resizeTo", | |
260 "scroll", | |
261 "scrollBy", | |
262 "scrollTo", | |
263 "setInterval", | |
264 "setTimeout", | |
265 "stop" | |
266 ]; | 282 ]; |
267 | 283 |
268 window.onload = function() | 284 window.onload = function() |
269 { | 285 { |
270 if (window.testRunner) | 286 if (window.testRunner) |
271 testRunner.dumpAsText(); | 287 testRunner.dumpAsText(); |
272 | 288 |
273 log("\n----- tests for getting/setting read-write properties -----\n"); | 289 log("\n----- tests for getting/setting read-write properties -----\n"); |
274 | 290 |
275 for (var i = 0; i < windowReadWriteProperties.length; i++) { //> | 291 for (var i = 0; i < windowReadWriteProperties.length; i++) { |
276 var property = windowReadWriteProperties[i]; | 292 var property = windowReadWriteProperties[i]; |
277 shouldBeTrue("canGet('" + property + "')"); | 293 shouldBeTrue("canGet('" + property + "')"); |
278 shouldBeTrue("canSet('" + property + "')"); | 294 shouldBeTrue("canSet('" + property + "')"); |
279 } | 295 } |
280 | 296 |
281 log("\n----- tests for getting/setting readonly properties -----\n"); | 297 log("\n----- tests for getting/setting readonly properties -----\n"); |
282 | 298 |
283 for (var i = 0; i < windowReadOnlyProperties.length; i++) { //> | 299 for (var i = 0; i < windowReadOnlyProperties.length; i++) { |
284 var property = windowReadOnlyProperties[i]; | 300 var property = windowReadOnlyProperties[i]; |
285 shouldBeTrue("canGet('" + property + "')"); | 301 shouldBeTrue("canGet('" + property + "')"); |
286 shouldBeFalse("canSet('" + property + "')"); | 302 shouldBeFalse("canSet('" + property + "')"); |
287 } | 303 } |
288 | 304 |
289 log("\n----- tests for getting/setting string properties -----\n"); | 305 log("\n----- tests for getting/setting string properties -----\n"); |
290 for (var i = 0; i < windowReadWriteStringProperties.length; i++) { //> | 306 for (var i = 0; i < windowReadWriteStringProperties.length; i++) { |
291 var property = windowReadWriteStringProperties[i]; | 307 var property = windowReadWriteStringProperties[i]; |
292 shouldBeTrue("canGet('" + property + "')"); | 308 shouldBeTrue("canGet('" + property + "')"); |
293 shouldBeTrue("canSetWithTypeConversion('" + property + "')"); | 309 shouldBeTrue("canSetWithTypeConversion('" + property + "')"); |
294 | 310 |
295 } | 311 } |
296 | 312 |
297 log("\n----- tests for getting/setting functions -----\n"); | 313 log("\n----- tests for getting/setting functions -----\n"); |
298 | 314 |
299 for (var i = 0; i < windowFunctions.length; i++) { //> | 315 for (var i = 0; i < windowFunctions.length; i++) { |
300 var property = windowFunctions[i]; | 316 var property = windowFunctions[i]; |
301 shouldBeTrue("canGet('" + property + "')"); | 317 shouldBeTrue("canGet('" + property + "')"); |
302 shouldBeTrue("canSet('" + property + "')"); | 318 shouldBeTrue("canSet('" + property + "')"); |
303 } | 319 } |
| 320 |
| 321 log("\n----- tests for getting/setting event handlers -----\n"); |
| 322 |
| 323 for (var i = 0; i < windowEventHandlers.length; i++) { |
| 324 var property = windowEventHandlers[i]; |
| 325 shouldBeTrue("canGet('" + property + "')"); |
| 326 shouldBeTrue("canSetWithCallable('" + property + "')"); |
| 327 } |
304 } | 328 } |
305 </script> | 329 </script> |
OLD | NEW |