| Index: test/mjsunit/regress/regress-1170.js
|
| ===================================================================
|
| --- test/mjsunit/regress/regress-1170.js (revision 11348)
|
| +++ test/mjsunit/regress/regress-1170.js (working copy)
|
| @@ -27,46 +27,70 @@
|
|
|
| var setter_value = 0;
|
|
|
| -__proto__.__defineSetter__("a", function(v) { setter_value = v; });
|
| +this.__defineSetter__("a", function(v) { setter_value = v; });
|
| eval("var a = 1");
|
| assertEquals(1, setter_value);
|
| -assertFalse(this.hasOwnProperty("a"));
|
| +assertFalse("value" in Object.getOwnPropertyDescriptor(this, "a"));
|
|
|
| eval("with({}) { eval('var a = 2') }");
|
| assertEquals(2, setter_value);
|
| -assertFalse(this.hasOwnProperty("a"));
|
| +assertFalse("value" in Object.getOwnPropertyDescriptor(this, "a"));
|
|
|
| // Function declarations are treated specially to match Safari. We do
|
| // not call setters for them.
|
| +this.__defineSetter__("a", function(v) { assertUnreachable(); });
|
| eval("function a() {}");
|
| -assertTrue(this.hasOwnProperty("a"));
|
| +assertTrue("value" in Object.getOwnPropertyDescriptor(this, "a"));
|
|
|
| -__proto__.__defineSetter__("b", function(v) { assertUnreachable(); });
|
| -var exception = false;
|
| +this.__defineSetter__("b", function(v) { setter_value = v; });
|
| try {
|
| - eval("const b = 23");
|
| + eval("const b = 3");
|
| } catch(e) {
|
| - exception = true;
|
| - assertTrue(/TypeError/.test(e));
|
| + assertUnreachable();
|
| }
|
| -assertFalse(exception);
|
| +assertEquals(3, setter_value);
|
|
|
| -exception = false;
|
| try {
|
| eval("with({}) { eval('const b = 23') }");
|
| } catch(e) {
|
| - exception = true;
|
| - assertTrue(/TypeError/.test(e));
|
| + assertInstanceof(e, TypeError);
|
| }
|
| -assertTrue(exception);
|
|
|
| -__proto__.__defineSetter__("c", function(v) { throw 42; });
|
| -exception = false;
|
| +this.__defineSetter__("c", function(v) { throw 42; });
|
| try {
|
| eval("var c = 1");
|
| + assertUnreachable();
|
| } catch(e) {
|
| - exception = true;
|
| assertEquals(42, e);
|
| - assertFalse(this.hasOwnProperty("c"));
|
| + assertFalse("value" in Object.getOwnPropertyDescriptor(this, "c"));
|
| }
|
| -assertTrue(exception);
|
| +
|
| +
|
| +
|
| +
|
| +__proto__.__defineSetter__("aa", function(v) { assertUnreachable(); });
|
| +eval("var aa = 1");
|
| +assertTrue(this.hasOwnProperty("aa"));
|
| +
|
| +__proto__.__defineSetter__("bb", function(v) { assertUnreachable(); });
|
| +eval("with({}) { eval('var bb = 2') }");
|
| +assertTrue(this.hasOwnProperty("bb"));
|
| +
|
| +// Function declarations are treated specially to match Safari. We do
|
| +// not call setters for them.
|
| +__proto__.__defineSetter__("cc", function(v) { assertUnreachable(); });
|
| +eval("function cc() {}");
|
| +assertTrue(this.hasOwnProperty("cc"));
|
| +
|
| +__proto__.__defineSetter__("dd", function(v) { assertUnreachable(); });
|
| +try {
|
| + eval("const dd = 23");
|
| +} catch(e) {
|
| + assertUnreachable();
|
| +}
|
| +
|
| +try {
|
| + eval("with({}) { eval('const dd = 23') }");
|
| +} catch(e) {
|
| + assertInstanceof(e, TypeError);
|
| +}
|
|
|