Index: test/mjsunit/harmony/proxies.js |
=================================================================== |
--- test/mjsunit/harmony/proxies.js (revision 9808) |
+++ test/mjsunit/harmony/proxies.js (working copy) |
@@ -28,9 +28,6 @@ |
// Flags: --harmony-proxies |
-// TODO(rossberg): for-in not implemented on proxies. |
- |
- |
// Helper. |
function TestWithProxies(test, x, y, z) { |
@@ -138,6 +135,10 @@ |
assertEquals("b", key) |
assertEquals(42, p[99]) |
assertEquals("99", key) |
+ assertEquals(42, (function(n) { return p[n] })("c")) |
+ assertEquals("c", key) |
+ assertEquals(42, (function(n) { return p[n] })(101)) |
+ assertEquals("101", key) |
var o = Object.create(p, {x: {value: 88}}) |
assertEquals(42, o.a) |
@@ -148,6 +149,11 @@ |
assertEquals("99", key) |
assertEquals(88, o.x) |
assertEquals(88, o["x"]) |
+ assertEquals(42, (function(n) { return o[n] })("c")) |
+ assertEquals("c", key) |
+ assertEquals(42, (function(n) { return o[n] })(101)) |
+ assertEquals("101", key) |
+ assertEquals(88, (function(n) { return o[n] })("x")) |
} |
TestGet({ |
@@ -201,6 +207,10 @@ |
assertEquals(55, p[101].call(p)) |
assertEquals(55, p.withargs(45, 5)) |
assertEquals(55, p.withargs.call(p, 11, 22)) |
+ assertEquals(55, (function(n) { return p[n]() })("f")) |
+ assertEquals(55, (function(n) { return p[n].call(p) })("f")) |
+ assertEquals(55, (function(n) { return p[n](15, 20) })("withargs")) |
+ assertEquals(55, (function(n) { return p[n].call(p, 13, 21) })("withargs")) |
assertEquals("6655", "66" + p) // calls p.toString |
var o = Object.create(p, {g: {value: function(x) { return x + 88 }}}) |
@@ -216,6 +226,13 @@ |
assertEquals(90, o.g(2)) |
assertEquals(91, o.g.call(o, 3)) |
assertEquals(92, o.g.call(p, 4)) |
+ assertEquals(55, (function(n) { return o[n]() })("f")) |
+ assertEquals(55, (function(n) { return o[n].call(o) })("f")) |
+ assertEquals(55, (function(n) { return o[n](15, 20) })("withargs")) |
+ assertEquals(55, (function(n) { return o[n].call(o, 13, 21) })("withargs")) |
+ assertEquals(93, (function(n) { return o[n](5) })("g")) |
+ assertEquals(94, (function(n) { return o[n].call(o, 6) })("g")) |
+ assertEquals(95, (function(n) { return o[n].call(p, 7) })("g")) |
assertEquals("6655", "66" + o) // calls o.toString |
} |
@@ -282,14 +299,15 @@ |
assertThrows(function(){ p.a }, "myexn") |
assertThrows(function(){ p["b"] }, "myexn") |
assertThrows(function(){ p[3] }, "myexn") |
+ assertThrows(function(){ (function(n) { p[n] })("c") }, "myexn") |
+ assertThrows(function(){ (function(n) { p[n] })(99) }, "myexn") |
var o = Object.create(p, {x: {value: 88}, '4': {value: 89}}) |
assertThrows(function(){ o.a }, "myexn") |
assertThrows(function(){ o["b"] }, "myexn") |
assertThrows(function(){ o[3] }, "myexn") |
- assertEquals(88, o.x) |
- assertEquals(88, o["x"]) |
- assertEquals(89, o[4]) |
+ assertThrows(function(){ (function(n) { o[n] })("c") }, "myexn") |
+ assertThrows(function(){ (function(n) { o[n] })(99) }, "myexn") |
} |
TestGetThrow({ |
@@ -353,6 +371,13 @@ |
assertEquals(44, p[77] = 44) |
assertEquals("77", key) |
assertEquals(44, val) |
+ |
+ assertEquals(45, (function(n) { return p[n] = 45 })("c")) |
+ assertEquals("c", key) |
+ assertEquals(45, val) |
+ assertEquals(46, (function(n) { return p[n] = 46 })(99)) |
+ assertEquals("99", key) |
+ assertEquals(46, val) |
} |
TestSet({ |
@@ -434,6 +459,8 @@ |
assertThrows(function(){ p.a = 42 }, "myexn") |
assertThrows(function(){ p["b"] = 42 }, "myexn") |
assertThrows(function(){ p[22] = 42 }, "myexn") |
+ assertThrows(function(){ (function(n) { p[n] = 45 })("c") }, "myexn") |
+ assertThrows(function(){ (function(n) { p[n] = 46 })(99) }, "myexn") |
} |
TestSetThrow({ |
@@ -719,17 +746,17 @@ |
assertEquals("zzz", key) |
assertEquals(0, Object.getOwnPropertyNames(desc).length) |
-// TODO(rossberg): This test requires for-in on proxies. |
-// var d = create({ |
-// get: function(r, k) { return (k === "value") ? 77 : void 0 }, |
-// getOwnPropertyNames: function() { return ["value"] } |
-// }) |
-// assertEquals(1, Object.getOwnPropertyNames(d).length) |
-// assertEquals(77, d.value) |
-// assertEquals(p, Object.defineProperty(p, "p", d)) |
-// assertEquals("p", key) |
-// assertEquals(1, Object.getOwnPropertyNames(desc).length) |
-// assertEquals(77, desc.value) |
+ var d = create({ |
+ get: function(r, k) { return (k === "value") ? 77 : void 0 }, |
+ getOwnPropertyNames: function() { return ["value"] }, |
+ enumerate: function() { return ["value"] } |
+ }) |
+ assertEquals(1, Object.getOwnPropertyNames(d).length) |
+ assertEquals(77, d.value) |
+ assertEquals(p, Object.defineProperty(p, "p", d)) |
+ assertEquals("p", key) |
+ assertEquals(1, Object.getOwnPropertyNames(desc).length) |
+ assertEquals(77, desc.value) |
var props = { |
'11': {}, |
@@ -774,17 +801,16 @@ |
assertThrows(function(){ Object.defineProperty(p, "a", {value: 44})}, "myexn") |
assertThrows(function(){ Object.defineProperty(p, 0, {value: 44})}, "myexn") |
-// TODO(rossberg): These tests require for-in on proxies. |
-// var d1 = create({ |
-// get: function(r, k) { throw "myexn" }, |
-// getOwnPropertyNames: function() { return ["value"] } |
-// }) |
-// assertThrows(function(){ Object.defineProperty(p, "p", d1) }, "myexn") |
-// var d2 = create({ |
-// get: function(r, k) { return 77 }, |
-// getOwnPropertyNames: function() { throw "myexn" } |
-// }) |
-// assertThrows(function(){ Object.defineProperty(p, "p", d2) }, "myexn") |
+ var d1 = create({ |
+ get: function(r, k) { throw "myexn" }, |
+ getOwnPropertyNames: function() { return ["value"] } |
+ }) |
+ assertThrows(function(){ Object.defineProperty(p, "p", d1) }, "myexn") |
+ var d2 = create({ |
+ get: function(r, k) { return 77 }, |
+ getOwnPropertyNames: function() { throw "myexn" } |
+ }) |
+ assertThrows(function(){ Object.defineProperty(p, "p", d2) }, "myexn") |
var props = {bla: {get value() { throw "otherexn" }}} |
assertThrows(function(){ Object.defineProperties(p, props) }, "otherexn") |
@@ -1468,7 +1494,7 @@ |
var p1 = Proxy.create({}) |
var p2 = Proxy.create({}, o1) |
var p3 = Proxy.create({}, p2) |
- var p4 = Proxy.create({}, 666) |
+ var p4 = Proxy.create({}, null) |
var o2 = Object.create(p3) |
assertSame(Object.getPrototypeOf(o1), Object.prototype) |
@@ -1606,7 +1632,9 @@ |
TestKeys(["a", "0"], { |
getOwnPropertyNames: function() { return ["a", 23, "zz", "", 0] }, |
- getOwnPropertyDescriptor: function(k) { return {enumerable: k.length == 1} } |
+ getOwnPropertyDescriptor: function(k) { |
+ return k == "" ? undefined : {enumerable: k.length == 1} |
+ } |
}) |
TestKeys(["23", "zz", ""], { |
@@ -1620,10 +1648,12 @@ |
TestKeys(["a", "b", "c", "5"], { |
get getOwnPropertyNames() { |
- return function() { return ["0", 4, "a", "b", "c", 5] } |
+ return function() { return ["0", 4, "a", "b", "c", 5, "ety"] } |
}, |
get getOwnPropertyDescriptor() { |
- return function(k) { return {enumerable: k >= "44"} } |
+ return function(k) { |
+ return k == "ety" ? undefined : {enumerable: k >= "44"} |
+ } |
} |
}) |