Chromium Code Reviews| Index: test/mjsunit/harmony/proxies.js | 
| diff --git a/test/mjsunit/harmony/proxies.js b/test/mjsunit/harmony/proxies.js | 
| index 3c4e5f61c5862f7c9273e77b11422af0c53ee7e7..2e8df2677a2831a7814c3e22bb8ab294cd5ab238 100644 | 
| --- a/test/mjsunit/harmony/proxies.js | 
| +++ b/test/mjsunit/harmony/proxies.js | 
| @@ -1680,3 +1680,133 @@ var p = Proxy.createFunction( | 
| {fix: function() {return {}}}, function() { throw "myexn" }) | 
| Object.freeze(p) | 
| TestCallThrow(p) | 
| + | 
| + | 
| + | 
| +// TODO(rossberg): once we merge with 7799026, remove this. | 
| +function createFrozen(handler, callTrap) { | 
| + if (!("fix" in handler)) handler.fix = function() { return {} } | 
| + var f = Proxy.createFunction(handler, callTrap) | 
| + Object.freeze(f) | 
| + return f | 
| +} | 
| + | 
| + | 
| +// Getters and setters. | 
| + | 
| +var value | 
| +var receiver | 
| + | 
| +function TestAccessorCall(getterCallTrap, setterCallTrap) { | 
| + var handler = {fix: function() { return {} }} | 
| + var pgetter = Proxy.createFunction(handler, getterCallTrap) | 
| + var psetter = Proxy.createFunction(handler, setterCallTrap) | 
| + | 
| + var o = {} | 
| + var oo = Object.create(o) | 
| + Object.defineProperty(o, "a", {get: pgetter, set: psetter}) | 
| + Object.defineProperty(o, "b", {get: pgetter}) | 
| + Object.defineProperty(o, "c", {set: psetter}) | 
| + Object.defineProperty(o, "3", {get: pgetter, set: psetter}) | 
| + Object.defineProperty(oo, "a", {value: 43}) | 
| + | 
| + receiver = "" | 
| + assertEquals(42, o.a) | 
| + assertSame(o, receiver) | 
| + receiver = "" | 
| + assertEquals(42, o.b) | 
| + assertSame(o, receiver) | 
| + receiver = "" | 
| + assertEquals(undefined, o.c) | 
| + assertSame("", receiver) | 
| 
 
Jakob Kummerow
2011/09/22 12:23:19
This works, but you're implicitly testing an unrel
 
rossberg
2011/09/22 16:39:52
Done.
 
 | 
| + receiver = "" | 
| + assertEquals(42, o["a"]) | 
| + assertSame(o, receiver) | 
| + receiver = "" | 
| +// TODO(rossberg): test once we merge with elements branch | 
| 
 
Jakob Kummerow
2011/09/22 12:23:19
nit: please indent to the same level as the surrou
 
rossberg
2011/09/22 16:39:52
Actually, uncommented the code, since the tests wo
 
 | 
| +// assertEquals(42, o[3]) | 
| +// assertSame(o, receiver) | 
| + | 
| + receiver = "" | 
| + assertEquals(43, oo.a) | 
| + assertSame("", receiver) | 
| + receiver = "" | 
| + assertEquals(42, oo.b) | 
| + assertSame(o, receiver) | 
| + receiver = "" | 
| + assertEquals(undefined, oo.c) | 
| + assertSame("", receiver) | 
| + receiver = "" | 
| + assertEquals(43, oo["a"]) | 
| + assertSame("", receiver) | 
| + receiver = "" | 
| +// TODO(rossberg): test once we merge with elements branch | 
| +// assertEquals(42, oo[3]) | 
| +// assertSame(o, receiver) | 
| + | 
| + receiver = "" | 
| + assertEquals(50, o.a = 50) | 
| + assertSame(o, receiver) | 
| + assertEquals(50, value) | 
| + receiver = "" | 
| + assertEquals(51, o.b = 51) | 
| + assertSame("", receiver) | 
| + assertEquals(50, value) // no setter | 
| + assertThrows(function(){ "use strict"; o.b = 51 }, TypeError) | 
| 
 
Jakob Kummerow
2011/09/22 12:23:19
nit: space before '{'
 
rossberg
2011/09/22 16:39:52
Done.
 
 | 
| + receiver = "" | 
| + assertEquals(52, o.c = 52) | 
| + assertSame(o, receiver) | 
| + assertEquals(52, value) | 
| + receiver = "" | 
| + assertEquals(53, o["a"] = 53) | 
| + assertSame(o, receiver) | 
| + assertEquals(53, value) | 
| + receiver = "" | 
| + assertEquals(54, o[3] = 54) | 
| +// TODO(rossberg): test once we merge with elements branch | 
| +// assertSame(o, receiver) | 
| +// assertEquals(54, value) | 
| + | 
| + value = 0 | 
| + receiver = "" | 
| + assertEquals(60, oo.a = 60) | 
| + assertSame("", receiver) | 
| + assertEquals(0, value) // oo has own `a' | 
| 
 
Jakob Kummerow
2011/09/22 12:23:19
nit: s/`/'/
 
rossberg
2011/09/22 16:39:52
Done.
 
 | 
| + assertEquals(61, oo.b = 61) | 
| + assertSame("", receiver) | 
| + assertEquals(0, value) // no setter | 
| + assertThrows(function(){ "use strict"; oo.b = 61 }, TypeError) | 
| 
 
Jakob Kummerow
2011/09/22 12:23:19
nit: space before '{'
 
rossberg
2011/09/22 16:39:52
Done.
 
 | 
| + receiver = "" | 
| + assertEquals(62, oo.c = 62) | 
| + assertSame(oo, receiver) | 
| + assertEquals(62, value) | 
| + receiver = "" | 
| + assertEquals(63, oo["c"] = 63) | 
| + assertSame(oo, receiver) | 
| + assertEquals(63, value) | 
| + receiver = "" | 
| + assertEquals(64, oo[3] = 64) | 
| +// TODO(rossberg): test once we merge with elements branch | 
| +// assertSame(oo, receiver) | 
| +// assertEquals(64, value) | 
| +} | 
| + | 
| +TestAccessorCall( | 
| + function() { receiver = this; return 42 }, | 
| + function(x) { receiver = this; value = x } | 
| +) | 
| + | 
| +TestAccessorCall( | 
| + function() { "use strict"; receiver = this; return 42 }, | 
| + function(x) { "use strict"; receiver = this; value = x } | 
| +) | 
| + | 
| +TestAccessorCall( | 
| + Proxy.createFunction({}, function() { receiver = this; return 42 }), | 
| + Proxy.createFunction({}, function(x) { receiver = this; value = x }) | 
| +) | 
| + | 
| +TestAccessorCall( | 
| + createFrozen({}, function() { receiver = this; return 42 }), | 
| + createFrozen({}, function(x) { receiver = this; value = x }) | 
| +) |