| Index: test/mjsunit/harmony/proxies.js
|
| diff --git a/test/mjsunit/harmony/proxies.js b/test/mjsunit/harmony/proxies.js
|
| index 45289432e4acc003117b0a74c606b99af320d916..696ba7a6e203cce0be06722b1910b7369fefd21a 100644
|
| --- a/test/mjsunit/harmony/proxies.js
|
| +++ b/test/mjsunit/harmony/proxies.js
|
| @@ -28,7 +28,6 @@
|
| // Flags: --harmony-proxies
|
|
|
|
|
| -// TODO(rossberg): integer-index properties not implemented properly.
|
| // TODO(rossberg): for-in not implemented on proxies.
|
|
|
|
|
| @@ -53,6 +52,8 @@ function TestGetOwnProperty2(handler, create) {
|
| var p = create(handler)
|
| assertEquals(42, Object.getOwnPropertyDescriptor(p, "a").value)
|
| assertEquals("a", key)
|
| + assertEquals(42, Object.getOwnPropertyDescriptor(p, 99).value)
|
| + assertEquals("99", key)
|
| }
|
|
|
| TestGetOwnProperty({
|
| @@ -93,6 +94,7 @@ function TestGetOwnPropertyThrow(handler) {
|
| function TestGetOwnPropertyThrow2(handler, create) {
|
| var p = create(handler)
|
| assertThrows(function(){ Object.getOwnPropertyDescriptor(p, "a") }, "myexn")
|
| + assertThrows(function(){ Object.getOwnPropertyDescriptor(p, 77) }, "myexn")
|
| }
|
|
|
| TestGetOwnPropertyThrow({
|
| @@ -196,6 +198,7 @@ function TestGetCall2(handler, create) {
|
| assertEquals(55, p.f("unused", "arguments"))
|
| assertEquals(55, p.f.call(p))
|
| assertEquals(55, p["f"].call(p))
|
| + assertEquals(55, p[101].call(p))
|
| assertEquals(55, p.withargs(45, 5))
|
| assertEquals(55, p.withargs.call(p, 11, 22))
|
| assertEquals("6655", "66" + p) // calls p.toString
|
| @@ -207,6 +210,7 @@ function TestGetCall2(handler, create) {
|
| assertEquals(55, o.f.call(o))
|
| assertEquals(55, o.f.call(p))
|
| assertEquals(55, o["f"].call(p))
|
| + assertEquals(55, o[101].call(p))
|
| assertEquals(55, o.withargs(45, 5))
|
| assertEquals(55, o.withargs.call(p, 11, 22))
|
| assertEquals(90, o.g(2))
|
| @@ -277,12 +281,15 @@ function TestGetThrow2(handler, create) {
|
| var p = create(handler)
|
| assertThrows(function(){ p.a }, "myexn")
|
| assertThrows(function(){ p["b"] }, "myexn")
|
| + assertThrows(function(){ p[3] }, "myexn")
|
|
|
| - var o = Object.create(p, {x: {value: 88}})
|
| + 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])
|
| }
|
|
|
| TestGetThrow({
|
| @@ -343,6 +350,9 @@ function TestSet2(handler, create) {
|
| assertEquals(43, p["b"] = 43)
|
| assertEquals("b", key)
|
| assertEquals(43, val)
|
| + assertEquals(44, p[77] = 44)
|
| + assertEquals("77", key)
|
| + assertEquals(44, val)
|
| }
|
|
|
| TestSet({
|
| @@ -423,6 +433,7 @@ function TestSetThrow2(handler, create) {
|
| var p = create(handler)
|
| assertThrows(function(){ p.a = 42 }, "myexn")
|
| assertThrows(function(){ p["b"] = 42 }, "myexn")
|
| + assertThrows(function(){ p[22] = 42 }, "myexn")
|
| }
|
|
|
| TestSetThrow({
|
| @@ -543,17 +554,26 @@ function TestSetForDerived(handler, create) {
|
|
|
| function TestSetForDerived2(handler, create) {
|
| var p = create(handler)
|
| - var o = Object.create(p, {x: {value: 88, writable: true}})
|
| + var o = Object.create(p, {x: {value: 88, writable: true},
|
| + '1': {value: 89, writable: true}})
|
|
|
| key = ""
|
| assertEquals(48, o.x = 48)
|
| assertEquals("", key) // trap not invoked
|
| assertEquals(48, o.x)
|
|
|
| + assertEquals(47, o[1] = 47)
|
| + assertEquals("", key) // trap not invoked
|
| + assertEquals(47, o[1])
|
| +
|
| assertEquals(49, o.y = 49)
|
| assertEquals("y", key)
|
| assertEquals(49, o.y)
|
|
|
| + assertEquals(50, o[2] = 50)
|
| + assertEquals("2", key)
|
| + assertEquals(50, o[2])
|
| +
|
| assertEquals(44, o.p_writable = 44)
|
| assertEquals("p_writable", key)
|
| assertEquals(44, o.p_writable)
|
| @@ -634,6 +654,12 @@ function TestDefine2(handler, create) {
|
| assertEquals(46, desc.value)
|
| assertEquals(false, desc.enumerable)
|
|
|
| + assertEquals(p, Object.defineProperty(p, 101, {value: 47, enumerable: false}))
|
| + assertEquals("101", key)
|
| + assertEquals(2, Object.getOwnPropertyNames(desc).length)
|
| + assertEquals(47, desc.value)
|
| + assertEquals(false, desc.enumerable)
|
| +
|
| var attributes = {configurable: true, mine: 66, minetoo: 23}
|
| assertEquals(p, Object.defineProperty(p, "d", attributes))
|
| assertEquals("d", key)
|
| @@ -668,7 +694,7 @@ function TestDefine2(handler, create) {
|
| // assertEquals(77, desc.value)
|
|
|
| var props = {
|
| - 'bla': {},
|
| + '11': {},
|
| blub: {get: function() { return true }},
|
| '': {get value() { return 20 }},
|
| last: {value: 21, configurable: true, mine: "eyes"}
|
| @@ -708,6 +734,7 @@ function TestDefineThrow(handler) {
|
| function TestDefineThrow2(handler, create) {
|
| var p = create(handler)
|
| 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({
|
| @@ -760,6 +787,8 @@ function TestDelete2(handler, create) {
|
| assertEquals("a", key)
|
| assertEquals(true, delete p["b"])
|
| assertEquals("b", key)
|
| + assertEquals(true, delete p[1])
|
| + assertEquals("1", key)
|
|
|
| assertEquals(false, delete p.z1)
|
| assertEquals("z1", key)
|
| @@ -772,6 +801,8 @@ function TestDelete2(handler, create) {
|
| assertEquals("c", key)
|
| assertEquals(true, delete p["d"])
|
| assertEquals("d", key)
|
| + assertEquals(true, delete p[2])
|
| + assertEquals("2", key)
|
|
|
| assertThrows(function(){ delete p.z3 }, TypeError)
|
| assertEquals("z3", key)
|
| @@ -804,11 +835,13 @@ function TestDeleteThrow2(handler, create) {
|
| var p = create(handler)
|
| assertThrows(function(){ delete p.a }, "myexn")
|
| assertThrows(function(){ delete p["b"] }, "myexn");
|
| + assertThrows(function(){ delete p[3] }, "myexn");
|
|
|
| (function() {
|
| "use strict"
|
| assertThrows(function(){ delete p.c }, "myexn")
|
| assertThrows(function(){ delete p["d"] }, "myexn")
|
| + assertThrows(function(){ delete p[4] }, "myexn");
|
| })()
|
| }
|
|
|
| @@ -1031,6 +1064,7 @@ function TestInThrow(handler) {
|
| function TestInThrow2(handler, create) {
|
| var p = create(handler)
|
| assertThrows(function(){ return "a" in o }, "myexn")
|
| + assertThrows(function(){ return 99 in o }, "myexn")
|
| assertThrows(function(){ return !("a" in o) }, "myexn")
|
| assertThrows(function(){ return ("a" in o) ? 2 : 3 }, "myexn")
|
| assertThrows(function(){ if ("b" in o) {} }, "myexn")
|
| @@ -1081,9 +1115,8 @@ function TestInForDerived2(handler, create) {
|
| var o = Object.create(p)
|
| assertTrue("a" in o)
|
| assertEquals("a", key)
|
| -// TODO(rossberg): integer indexes not correctly implemeted yet
|
| -// assertTrue(99 in o)
|
| -// assertEquals("99", key)
|
| + assertTrue(99 in o)
|
| + assertEquals("99", key)
|
| assertFalse("z" in o)
|
| assertEquals("z", key)
|
|
|
| @@ -1173,22 +1206,21 @@ var descget
|
| function TestDescriptorGetOrder(handler) {
|
| var p = Proxy.create(handler)
|
| var o = Object.create(p, {b: {value: 0}})
|
| - TestDescriptorGetOrder2(function(n) { p[n] }, "vV")
|
| - TestDescriptorGetOrder2(function(n) { n in p }, "")
|
| - TestDescriptorGetOrder2(function(n) { o[n] }, "vV")
|
| - TestDescriptorGetOrder2(function(n) { n in o }, "eEcCvVwWgs")
|
| + TestDescriptorGetOrder2(function(n) { return p[n] }, "vV")
|
| + TestDescriptorGetOrder2(function(n) { return n in p }, "")
|
| + TestDescriptorGetOrder2(function(n) { return o[n] }, "vV")
|
| + TestDescriptorGetOrder2(function(n) { return n in o }, "eEcCvVwWgs")
|
| }
|
|
|
| function TestDescriptorGetOrder2(f, access) {
|
| descget = ""
|
| - f("a")
|
| + assertTrue(f("a"))
|
| + assertEquals(access, descget)
|
| + descget = ""
|
| + assertTrue(f(99))
|
| assertEquals(access, descget)
|
| -// TODO(rossberg): integer indexes not correctly implemented yet.
|
| -// descget = ""
|
| -// f(99)
|
| -// assertEquals(access, descget)
|
| descget = ""
|
| - f("z")
|
| + assertFalse(!!f("z"))
|
| assertEquals("", descget)
|
| }
|
|
|
| @@ -1684,13 +1716,13 @@ TestFix([], {
|
| fix: function() { return {} }
|
| })
|
|
|
| -TestFix(["a", "b", "c", "d", "zz"], {
|
| +TestFix(["a", "b", "c", "3", "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},
|
| + '3': {value: true, writable: false, configurable: true, enumerable: true},
|
| zz: {value: 0, enumerable: false}
|
| }
|
| }
|
|
|