<script src="../../resources/js-test-pre.js"></script>

<script>
description("This page tests what happens when a getter / setter on the window object conflicts with another property or declared variable");

var x = 1;
shouldThrowErrorName(function() {
    window.__defineGetter__("x", function() { return "window.x __getter__"; });
}, "TypeError");

shouldBe("window.x", "1");
shouldBe("typeof window.__lookupGetter__('x')", "'undefined'");
shouldBe("typeof Object.getOwnPropertyDescriptor(window, 'x').get", "'undefined'");
debug("");


shouldThrowErrorName(function() {
window.__defineSetter__("x", function() { debug("window.x __setter__ called"); });
}, "TypeError");
x = 2;

shouldBe("window.x", "2");
shouldBe("typeof window.__lookupGetter__('x')", "'undefined'");
shouldBe("typeof Object.getOwnPropertyDescriptor(window, 'x').get", "'undefined'");
debug("");


window.y = 1;
try {
    window.__defineGetter__("y", function() { return "window.y __getter__"; });
} catch(e) { debug(e); }

shouldBe("window.y", "'window.y __getter__'");
shouldBe("typeof window.__lookupGetter__('y')", "'function'");
shouldBe("typeof Object.getOwnPropertyDescriptor(window, 'y').get", "'function'");
debug("");


try {
window.__defineSetter__("y", function() { "window.y __setter__ called"; });
} catch(e) { debug(e); }
window.y = 2;

shouldBe("window.y", "'window.y __getter__'");
shouldBe("typeof window.__lookupGetter__('y')", "'function'");
shouldBe("typeof Object.getOwnPropertyDescriptor(window, 'y').get", "'function'");
debug("");


try {
window.__defineSetter__("z", function() { "window.z __setter__ called"; });
} catch(e) { debug(e); }
window.z = 1;

shouldBeUndefined("window.z");
shouldBe("typeof window.__lookupSetter__('z')", "'function'");
shouldBe("typeof Object.getOwnPropertyDescriptor(window, 'z').set", "'function'");

</script>
