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