Index: test/mjsunit/harmony/proxies.js |
diff --git a/test/mjsunit/harmony/proxies.js b/test/mjsunit/harmony/proxies.js |
index 45289432e4acc003117b0a74c606b99af320d916..129546eb87efba22ed1ad2692fd82b65814b97b9 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) |
@@ -578,6 +598,9 @@ function TestSetForDerived2(handler, create) { |
assertEquals("p_nosetter", key) |
assertEquals("", val) // not written at all |
+ assertThrows(function(){ o.p_nonconf = 53 }, TypeError) |
+ assertEquals("p_nonconf", key) |
+ |
assertThrows(function(){ o.p_throw = 51 }, "myexn") |
assertEquals("p_throw", key) |
@@ -589,10 +612,11 @@ TestSetForDerived({ |
getOwnPropertyDescriptor: function(k) { |
key = k; |
switch (k) { |
- case "p_writable": return {writable: true} |
- case "p_nonwritable": return {writable: false} |
- case "p_setter":return {set: function(x) { val = x }} |
- case "p_nosetter": return {get: function() { return 1 }} |
+ case "p_writable": return {writable: true, configurable: true} |
+ case "p_nonwritable": return {writable: false, configurable: true} |
+ case "p_setter":return {set: function(x) { val = x }, configurable: true} |
+ case "p_nosetter": return {get: function() { return 1 }, configurable: true} |
+ case "p_nonconf":return {} |
case "p_throw": throw "myexn" |
case "p_setterthrow": return {set: function(x) { throw "myexn" }} |
default: return undefined |
@@ -634,6 +658,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 +698,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 +738,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 +791,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 +805,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 +839,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 +1068,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") |
@@ -1079,11 +1117,11 @@ function TestInForDerived(handler) { |
function TestInForDerived2(handler, create) { |
var p = create(handler) |
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) |
@@ -1117,20 +1155,21 @@ function TestInForDerived2(handler, create) { |
TestInForDerived({ |
getPropertyDescriptor: function(k) { |
- key = k; return k < "z" ? {value: 42} : void 0 |
+ key = k; return k < "z" ? {value: 42, configurable: true} : void 0 |
} |
}) |
TestInForDerived({ |
getPropertyDescriptor: function(k) { return this.getPropertyDescriptor2(k) }, |
getPropertyDescriptor2: function(k) { |
- key = k; return k < "z" ? {value: 42} : void 0 |
+ key = k; return k < "z" ? {value: 42, configurable: true} : void 0 |
} |
}) |
TestInForDerived({ |
getPropertyDescriptor: function(k) { |
- key = k; return k < "z" ? {get value() { return 42 }} : void 0 |
+ key = k; |
+ return k < "z" ? {get value() { return 42 }, configurable: true} : void 0 |
} |
}) |
@@ -1138,7 +1177,7 @@ TestInForDerived({ |
* regarding default traps for getPropertyDescriptor. |
TestInForDerived({ |
getOwnPropertyDescriptor: function(k) { |
- key = k; return k < "z" ? {value: 42} : void 0 |
+ key = k; return k < "z" ? {value: 42, configurable: true} : void 0 |
} |
}) |
@@ -1147,20 +1186,23 @@ TestInForDerived({ |
return this.getOwnPropertyDescriptor2(k) |
}, |
getOwnPropertyDescriptor2: function(k) { |
- key = k; return k < "z" ? {value: 42} : void 0 |
+ key = k; return k < "z" ? {value: 42, configurable: true} : void 0 |
} |
}) |
TestInForDerived({ |
getOwnPropertyDescriptor: function(k) { |
- key = k; return k < "z" ? {get value() { return 42 }} : void 0 |
+ key = k; |
+ return k < "z" ? {get value() { return 42 }, configurable: true} : void 0 |
} |
}) |
*/ |
TestInForDerived(Proxy.create({ |
get: function(pr, pk) { |
- return function(k) { key = k; return k < "z" ? {value: 42} : void 0 } |
+ return function(k) { |
+ key = k; return k < "z" ? {value: 42, configurable: true} : void 0 |
+ } |
} |
})) |
@@ -1173,22 +1215,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 +1725,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} |
} |
} |