| <p> |
| This page tests var declarations that attempt to shadow interesting global properties in |
| interesting ways. <a href="http://bugs.webkit.org/show_bug.cgi?id=16644">Bug 16644</a>. |
| </p> |
| |
| <p> |
| If the test passes, you'll see a series of PASS messages below. |
| </p> |
| |
| <pre id="console"></pre> |
| |
| <script> |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| |
| function log(s) |
| { |
| document.getElementById("console").appendChild(document.createTextNode(s + "\n")); |
| } |
| |
| function shouldBe(a, aDescription, b) |
| { |
| if (a == b) { |
| log("PASS: " + aDescription + " should be " + b + " and is."); |
| } else { |
| log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + "."); |
| } |
| } |
| |
| var marker = { }; |
| |
| var Node; // shadow existing property of the global object |
| eval("var Element;"); // ditto, but using eval |
| |
| var toString; // shadow existing property of the global object's prototype |
| eval("var valueOf;"); // ditto, but using eval |
| |
| shouldBe(Node == undefined, "Node == undefined", false); |
| shouldBe(eval('Node == undefined'), "eval('Node == undefined')", false); |
| |
| shouldBe(Element == undefined, "Element == undefined", false); |
| shouldBe(eval('Element == undefined'), "eval('Element == undefined')", false); |
| |
| shouldBe(toString != undefined, "toString != undefined", false); |
| shouldBe(eval('toString != undefined'), "eval('toString != undefined')", false); |
| |
| shouldBe(valueOf == undefined, "valueOf == undefined", false); |
| shouldBe(eval('valueOf == undefined'), "eval('valueOf == undefined')", false); |
| |
| log("-----"); |
| |
| // Repeat the tests above, this time explicitly overwriting existing properties |
| |
| var HTMLElement = marker; |
| eval("var HTMLLinkElement = marker;"); |
| |
| var moveBy = marker; |
| eval("var find = marker;"); |
| |
| shouldBe(HTMLElement == marker, "HTMLElement == marker", true); |
| shouldBe(eval('HTMLElement == marker'), "eval('HTMLElement == marker')", true); |
| |
| shouldBe(HTMLLinkElement == marker, "HTMLLinkElement == marker", true); |
| shouldBe(eval('HTMLLinkElement == marker'), "eval('HTMLLinkElement == marker')", true); |
| |
| shouldBe(moveBy == marker, "moveBy == marker", true); |
| shouldBe(eval('moveBy == marker'), "eval('moveBy == marker')", true); |
| |
| shouldBe(find == marker, "find == marker", true); |
| shouldBe(eval('find == marker'), "eval('find == marker')", true); |
| |
| log("-----"); |
| |
| // Various variable names that are, or at one point were, unsettable in WebKit. |
| |
| try { |
| eval("var locationbar = marker"); |
| } catch(e) { } |
| shouldBe(locationbar == marker, "locationbar == marker", true); |
| shouldBe(eval('locationbar == marker'), "eval('locationbar == marker')", true); |
| |
| try { |
| eval("var menubar = marker"); |
| } catch(e) { } |
| shouldBe(menubar == marker, "menubar == marker", true); |
| shouldBe(eval('menubar == marker'), "eval('menubar == marker')", true); |
| |
| try { |
| eval("var personalbar = marker"); |
| } catch(e) { } |
| shouldBe(personalbar == marker, "personalbar == marker", true); |
| shouldBe(eval('personalbar == marker'), "eval('personalbar == marker')", true); |
| |
| try { |
| eval("var scrollbars = marker"); |
| } catch(e) { } |
| shouldBe(scrollbars == marker, "scrollbars == marker", true); |
| shouldBe(eval('scrollbars == marker'), "eval('scrollbars == marker')", true); |
| |
| try { |
| eval("var statusbar = marker"); |
| } catch(e) { } |
| shouldBe(statusbar == marker, "statusbar == marker", true); |
| shouldBe(eval('statusbar == marker'), "eval('statusbar == marker')", true); |
| |
| try { |
| eval("var toolbar = marker"); |
| } catch(e) { } |
| shouldBe(toolbar == marker, "toolbar == marker", true); |
| shouldBe(eval('toolbar == marker'), "eval('toolbar == marker')", true); |
| |
| try { |
| eval("var offscreenBuffering = marker"); |
| } catch(e) { } |
| shouldBe(offscreenBuffering == marker, "offscreenBuffering == marker", true); |
| shouldBe(eval('offscreenBuffering == marker'), "eval('offscreenBuffering == marker')", true); |
| |
| try { |
| eval("var outerHeight = marker"); |
| } catch(e) { } |
| shouldBe(outerHeight == marker, "outerHeight == marker", true); |
| shouldBe(eval('outerHeight == marker'), "eval('outerHeight == marker')", true); |
| |
| try { |
| eval("var outerWidth = marker"); |
| } catch(e) { } |
| shouldBe(outerWidth == marker, "outerWidth == marker", true); |
| shouldBe(eval('outerWidth == marker'), "eval('outerWidth == marker')", true); |
| |
| try { |
| eval("var innerHeight = marker"); |
| } catch(e) { } |
| shouldBe(innerHeight == marker, "innerHeight == marker", true); |
| shouldBe(eval('innerHeight == marker'), "eval('innerHeight == marker')", true); |
| |
| try { |
| eval("var innerWidth = marker"); |
| } catch(e) { } |
| shouldBe(innerWidth == marker, "innerWidth == marker", true); |
| shouldBe(eval('innerWidth == marker'), "eval('innerWidth == marker')", true); |
| |
| try { |
| eval("var screenX = marker"); |
| } catch(e) { } |
| shouldBe(screenX == marker, "screenX == marker", true); |
| shouldBe(eval('screenX == marker'), "eval('screenX == marker')", true); |
| |
| try { |
| eval("var screenY = marker"); |
| } catch(e) { } |
| shouldBe(screenY == marker, "screenY == marker", true); |
| shouldBe(eval('screenY == marker'), "eval('screenY == marker')", true); |
| |
| try { |
| eval("var screenLeft = marker"); |
| } catch(e) { } |
| shouldBe(screenLeft == marker, "screenLeft == marker", true); |
| shouldBe(eval('screenLeft == marker'), "eval('screenLeft == marker')", true); |
| |
| try { |
| eval("var screenTop = marker"); |
| } catch(e) { } |
| shouldBe(screenTop == marker, "screenTop == marker", true); |
| shouldBe(eval('screenTop == marker'), "eval('screenTop == marker')", true); |
| |
| try { |
| eval("var scrollX = marker"); |
| } catch(e) { } |
| shouldBe(scrollX == marker, "scrollX == marker", true); |
| shouldBe(eval('scrollX == marker'), "eval('scrollX == marker')", true); |
| |
| try { |
| eval("var scrollY = marker"); |
| } catch(e) { } |
| shouldBe(scrollY == marker, "scrollY == marker", true); |
| shouldBe(eval('scrollY == marker'), "eval('scrollY == marker')", true); |
| |
| try { |
| eval("var length = marker"); |
| } catch(e) { } |
| shouldBe(length == marker, "length == marker", true); |
| shouldBe(eval('length == marker'), "eval('length == marker')", true); |
| |
| try { |
| eval("var self = marker"); |
| } catch(e) { } |
| shouldBe(self == marker, "self == marker", true); |
| shouldBe(eval('self == marker'), "eval('self == marker')", true); |
| |
| try { |
| eval("var frames = marker"); |
| } catch(e) { } |
| shouldBe(frames == marker, "frames == marker", true); |
| shouldBe(eval('frames == marker'), "eval('frames == marker')", true); |
| |
| try { |
| eval("var opener = marker"); |
| } catch(e) { } |
| shouldBe(opener == marker, "opener == marker", true); |
| shouldBe(eval('opener == marker'), "eval('opener == marker')", true); |
| |
| try { |
| eval("var parent = marker"); |
| } catch(e) { } |
| shouldBe(parent == marker, "parent == marker", true); |
| shouldBe(eval('parent == marker'), "eval('parent == marker')", true); |
| |
| try { |
| eval("var devicePixelRatio = marker"); |
| } catch(e) { } |
| shouldBe(devicePixelRatio == marker, "devicePixelRatio == marker", true); |
| shouldBe(eval('devicePixelRatio == marker'), "eval('devicePixelRatio == marker')", true); |
| |
| try { |
| eval("var devicePixelRatio = marker"); |
| } catch(e) { } |
| shouldBe(devicePixelRatio == marker, "devicePixelRatio == marker", true); |
| shouldBe(eval('devicePixelRatio == marker'), "eval('devicePixelRatio == marker')", true); |
| |
| try { |
| eval("var navigator = marker"); |
| } catch(e) { } |
| shouldBe(navigator == marker, "navigator == marker", false); |
| shouldBe(eval('navigator == marker'), "eval('navigator == marker')", false); |
| |
| try { |
| eval("var clientInformation = marker"); |
| } catch(e) { } |
| shouldBe(clientInformation == marker, "clientInformation == marker", true); |
| shouldBe(eval('clientInformation == marker'), "eval('clientInformation == marker')", true); |
| |
| try { |
| eval("var status = marker"); |
| } catch(e) { } |
| shouldBe(status == marker, "status == marker", true); |
| shouldBe(eval('status == marker'), "eval('status == marker')", true); |
| |
| try { |
| eval("var defaultStatus = marker"); |
| } catch(e) { } |
| shouldBe(defaultStatus == marker, "defaultStatus == marker", true); |
| shouldBe(eval('defaultStatus == marker'), "eval('defaultStatus == marker')", true); |
| |
| try { |
| eval("var defaultstatus = marker"); |
| } catch(e) { } |
| shouldBe(defaultstatus == marker, "defaultstatus == marker", true); |
| shouldBe(eval('defaultstatus == marker'), "eval('defaultstatus == marker')", true); |
| |
| try { |
| eval("var screen = marker"); |
| } catch(e) { } |
| shouldBe(screen == marker, "screen == marker", true); |
| shouldBe(eval('screen == marker'), "eval('screen == marker')", true); |
| |
| try { |
| eval("var history = marker"); |
| } catch(e) { } |
| shouldBe(history == marker, "history == marker", false); |
| shouldBe(eval('history == marker'), "eval('history == marker')", false); |
| |
| log("-----"); |
| |
| try { |
| eval("var frameElement = marker"); |
| } catch(e) { } |
| shouldBe(frameElement == marker, "frameElement == marker", false); |
| shouldBe(eval('frameElement == marker'), "eval('frameElement == marker')", false); |
| |
| try { |
| eval("var pageXOffset = marker"); |
| } catch(e) { } |
| shouldBe(pageXOffset == marker, "pageXOffset == marker", true); |
| shouldBe(eval('pageXOffset == marker'), "eval('pageXOffset == marker')", true); |
| |
| try { |
| eval("var pageYOffset = marker"); |
| } catch(e) { } |
| shouldBe(pageYOffset == marker, "pageYOffset == marker", true); |
| shouldBe(eval('pageYOffset == marker'), "eval('pageYOffset == marker')", true); |
| |
| try { |
| eval("var closed = marker"); |
| } catch(e) { } |
| shouldBe(closed == marker, "closed == marker", false); |
| shouldBe(eval('closed == marker'), "eval('closed == marker')", false); |
| |
| try { |
| eval("var window = marker"); |
| } catch(e) { } |
| shouldBe(window == marker, "window == marker", false); |
| shouldBe(eval('window == marker'), "eval('window == marker')", false); |
| |
| try { |
| eval("var document = marker"); |
| } catch(e) { } |
| shouldBe(document == marker, "document == marker", false); |
| shouldBe(eval('document == marker'), "eval('document == marker')", false); |
| |
| try { |
| eval("var crypto = marker"); |
| } catch(e) { } |
| shouldBe(crypto == marker, "crypto == marker", false); |
| shouldBe(eval('crypto == marker'), "eval('crypto == marker')", false); |
| |
| try { |
| eval("var top = marker"); |
| } catch(e) { } |
| shouldBe(top == marker, "top == marker", false); |
| shouldBe(eval('top == marker'), "eval('top == marker')", false); |
| |
| </script> |