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