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); |
+} |