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..84641d589e8e8f838ccc11d9157d74907c03b9b3 100644 |
| --- a/test/mjsunit/harmony/proxies.js |
| +++ b/test/mjsunit/harmony/proxies.js |
| @@ -28,6 +28,8 @@ |
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| +// TODO(rossberg): test exception cases. |
| + |
| // Getters. |
| @@ -402,6 +404,79 @@ assertTrue("object" == typeof Proxy.create({})) |
| +// Element (in). |
|
Mads Ager (chromium)
2011/07/19 08:18:05
We should have tests for the case where the Has tr
rossberg
2011/07/19 09:29:52
I left that for the TODO at the top, since I still
|
| + |
| +var key |
| +function TestIn(handler) { |
| + var o = Proxy.create(handler) |
| + assertTrue("a" in o) |
| + assertEquals("a", key) |
| + assertTrue(99 in o) |
| + assertEquals("99", key) |
| + assertFalse("z" in o) |
| + assertEquals("z", key) |
| + |
| + if ("b" in o) { |
| + } else { |
| + assertTrue(false) |
| + } |
| + assertEquals("b", key) |
| + |
| + if ("zz" in o) { |
| + assertTrue(false) |
| + } |
| + assertEquals("zz", key) |
| + |
| + if (!("c" in o)) { |
| + assertTrue(false) |
| + } |
| + assertEquals("c", key) |
| + |
| + if (!("zzz" in o)) { |
| + } else { |
| + assertTrue(false) |
| + } |
| + assertEquals("zzz", key) |
| +} |
| + |
| +TestIn({ |
| + has: function(k) { key = k; return k < "z" } |
| +}) |
| +TestIn({ |
| + has: function(k) { return this.has2(k) }, |
| + has2: function(k) { key = k; return k < "z" } |
| +}) |
| +TestIn({ |
| + getPropertyDescriptor: function(k) { |
| + key = k; return k < "z" ? {value: 42} : void 0 |
| + } |
| +}) |
| +TestIn({ |
| + getPropertyDescriptor: function(k) { return this.getPropertyDescriptor2(k) }, |
| + getPropertyDescriptor2: function(k) { |
| + key = k; return k < "z" ? {value: 42} : void 0 |
| + } |
| +}) |
| +TestIn({ |
| + getPropertyDescriptor: function(k) { |
| + key = k; return k < "z" ? {get value() { return 42 }} : void 0 |
| + } |
| +}) |
| +TestIn({ |
| + get: undefined, |
| + getPropertyDescriptor: function(k) { |
| + key = k; return k < "z" ? {value: 42} : void 0 |
| + } |
| +}) |
| + |
| +TestIn(Proxy.create({ |
| + get: function(pr, pk) { |
| + return function(k) { key = k; return k < "z" } |
| + } |
| +})) |
| + |
| + |
| + |
| // Instanceof (instanceof). |
| function TestInstanceof() { |
| @@ -529,3 +604,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}} |
| + } |
| + } |
| +}) |