Index: test/mjsunit/harmony/proxies.js |
diff --git a/test/mjsunit/harmony/proxies.js b/test/mjsunit/harmony/proxies.js |
index f87d756ee1e3ce6a9374c872abd2c7a5b8899f19..123ab83f0752fbce3ab08029dfa976e9b7367f4b 100644 |
--- a/test/mjsunit/harmony/proxies.js |
+++ b/test/mjsunit/harmony/proxies.js |
@@ -529,3 +529,84 @@ TestKeys([], { |
}, |
getOwnPropertyDescriptor: function(k) { return {} } |
}) |
+ |
+ |
+ |
+// Fixing (Object.freeze, Object.seal, Object.preventExtensions, |
+// Object.isFrozen, Object.isSealed, Object.isExtensible) |
+ |
+function TestFix(names, handler) { |
+ var proto = {p: 77} |
+ var assertFixing = function(o, s, f, e) { |
+ assertEquals(s, Object.isSealed(o)) |
+ assertEquals(f, Object.isFrozen(o)) |
+ assertEquals(e, Object.isExtensible(o)) |
+ } |
+ |
+ var o1 = Proxy.create(handler, proto) |
+ assertFixing(o1, false, false, true) |
+ Object.seal(o1) |
+ assertFixing(o1, true, names.length === 0, false) |
+ assertArrayEquals(names.sort(), Object.getOwnPropertyNames(o1).sort()) |
+ assertArrayEquals(names.filter(function(x) {return x < "z"}).sort(), |
+ Object.keys(o1).sort()) |
+ assertEquals(proto, Object.getPrototypeOf(o1)) |
+ assertEquals(77, o1.p) |
+ for (var n in o1) { |
+ var desc = Object.getOwnPropertyDescriptor(o1, n) |
+ if (desc !== undefined) assertFalse(desc.configurable) |
+ } |
+ |
+ var o2 = Proxy.create(handler, proto) |
+ assertFixing(o2, false, false, true) |
+ Object.freeze(o2) |
+ assertFixing(o2, true, true, false) |
+ assertArrayEquals(names.sort(), Object.getOwnPropertyNames(o2).sort()) |
+ assertArrayEquals(names.filter(function(x) {return x < "z"}).sort(), |
+ Object.keys(o2).sort()) |
+ assertEquals(proto, Object.getPrototypeOf(o2)) |
+ assertEquals(77, o2.p) |
+ for (var n in o2) { |
+ var desc = Object.getOwnPropertyDescriptor(o2, n) |
+ if (desc !== undefined) assertFalse(desc.writable) |
+ if (desc !== undefined) assertFalse(desc.configurable) |
+ } |
+ |
+ var o3 = Proxy.create(handler, proto) |
+ assertFixing(o3, false, false, true) |
+ Object.preventExtensions(o3) |
+ assertFixing(o3, names.length === 0, names.length === 0, false) |
+ assertArrayEquals(names.sort(), Object.getOwnPropertyNames(o3).sort()) |
+ assertArrayEquals(names.filter(function(x) {return x < "z"}).sort(), |
+ Object.keys(o3).sort()) |
+ assertEquals(proto, Object.getPrototypeOf(o3)) |
+ assertEquals(77, o3.p) |
+} |
+ |
+TestFix([], { |
+ fix: function() { return {} } |
+}) |
+TestFix(["a", "b", "c", "d", "zz"], { |
+ fix: function() { |
+ return { |
+ a: {value: "a", writable: true, configurable: false, enumerable: true}, |
+ b: {value: 33, writable: false, configurable: false, enumerable: true}, |
+ c: {value: 0, writable: true, configurable: true, enumerable: true}, |
+ d: {value: true, writable: false, configurable: true, enumerable: true}, |
+ zz: {value: 0, enumerable: false} |
+ } |
+ } |
+}) |
+TestFix(["a"], { |
+ fix: function() { return this.fix2() }, |
+ fix2: function() { |
+ return {a: {value: 4, writable: true, configurable: true, enumerable: true}} |
+ } |
+}) |
+TestFix(["b"], { |
+ get fix() { |
+ return function() { |
+ return {b: {configurable: true, writable: true, enumerable: true}} |
+ } |
+ } |
+}) |