Chromium Code Reviews| 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"], { |
|
Mads Ager (chromium)
2011/07/17 10:43:47
I would add a newline between each TestFix invocat
rossberg
2011/07/18 10:53:53
Done.
|
| + 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}} |
| + } |
| + } |
| +}) |