Index: test/mjsunit/harmony/proxies-set.js |
diff --git a/test/mjsunit/harmony/proxies-set.js b/test/mjsunit/harmony/proxies-set.js |
deleted file mode 100644 |
index 2fec115a103ea05d0a49fa350381e157f679487a..0000000000000000000000000000000000000000 |
--- a/test/mjsunit/harmony/proxies-set.js |
+++ /dev/null |
@@ -1,312 +0,0 @@ |
-// Copyright 2015 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Flags: --harmony-proxies --harmony-reflect |
- |
- |
-function sloppyDefaultSet(o, p, v) { return o[p] = v } |
-function sloppyReflectSet(o, p, v) { return Reflect.set(o, p, v) } |
-function strictDefaultSet(o, p, v) { "use strict"; return o[p] = v } |
-function strictReflectSet(o, p, v) { "use strict"; return Reflect.set(o, p, v) } |
- |
-sloppyDefaultSet.shouldThrow = false; |
-sloppyReflectSet.shouldThrow = false; |
-strictDefaultSet.shouldThrow = true; |
-strictReflectSet.shouldThrow = false; |
- |
-sloppyDefaultSet.returnsBool = false; |
-sloppyReflectSet.returnsBool = true; |
-strictDefaultSet.returnsBool = false; |
-strictReflectSet.returnsBool = true; |
- |
- |
-function assertTrueIf(flag, x) { if (flag) assertTrue(x) } |
-function assertFalseIf(flag, x) { if (flag) assertFalse(x) } |
-function assertSetFails(mySet, o, p, v) { |
- if (mySet.shouldThrow) { |
- assertThrows(() => mySet(o, p, v), TypeError); |
- } else { |
- assertFalseIf(mySet.returnsBool, mySet(o, p, v)); |
- } |
-} |
- |
- |
-function dataDescriptor(x) { |
- return {value: x, writable: true, enumerable: true, configurable: true}; |
-} |
- |
- |
-function toKey(x) { |
- if (typeof x === "symbol") return x; |
- return String(x); |
-} |
- |
- |
-var properties = |
- ["bla", "0", 1, Symbol(), {[Symbol.toPrimitive]() {return "a"}}]; |
- |
- |
-function TestForwarding(handler, mySet) { |
- assertTrue(undefined == handler.set); |
- assertTrue(undefined == handler.getOwnPropertyDescriptor); |
- assertTrue(undefined == handler.defineProperty); |
- |
- var target = {}; |
- var proxy = new Proxy(target, handler); |
- |
- // Property does not exist on target. |
- for (var p of properties) { |
- assertTrueIf(mySet.returnsBool, mySet(proxy, p, 42)); |
- assertSame(42, target[p]); |
- } |
- |
- // Property exists as writable data on target. |
- for (var p of properties) { |
- assertTrueIf(mySet.returnsBool, mySet(proxy, p, 0)); |
- assertSame(0, target[p]); |
- } |
- |
- // Property exists as non-writable data on target. |
- for (var p of properties) { |
- Object.defineProperty(target, p, |
- {value: 42, configurable: true, writable: false}); |
- assertSetFails(mySet, proxy, p, 42); |
- assertSetFails(mySet, proxy, p, 0); |
- assertEquals(42, target[p]); |
- } |
-}; |
- |
-(function () { |
- // No trap. |
- var handler = {}; |
- TestForwarding(handler, sloppyDefaultSet); |
- TestForwarding(handler, sloppyReflectSet); |
- TestForwarding(handler, strictDefaultSet); |
- TestForwarding(handler, strictReflectSet); |
-})(); |
- |
-(function () { |
- // "Undefined" trap. |
- var handler = { set: null }; |
- TestForwarding(handler, sloppyDefaultSet); |
- TestForwarding(handler, sloppyReflectSet); |
- TestForwarding(handler, strictDefaultSet); |
- TestForwarding(handler, strictReflectSet); |
-})(); |
- |
- |
-function TestForwarding2(mySet) { |
- // Check that setting on a proxy without "set" trap correctly triggers its |
- // "getOwnProperty" trap and its "defineProperty" trap. |
- |
- var target = {}; |
- var handler = {}; |
- var observations = []; |
- var proxy = new Proxy(target, handler); |
- |
- handler.getOwnPropertyDescriptor = function() { |
- observations.push(arguments); |
- return Reflect.getOwnPropertyDescriptor(...arguments); |
- } |
- |
- handler.defineProperty = function() { |
- observations.push(arguments); |
- return Reflect.defineProperty(...arguments); |
- } |
- |
- for (var p of properties) { |
- mySet(proxy, p, 42); |
- assertEquals(2, observations.length) |
- assertArrayEquals([target, toKey(p)], observations[0]); |
- assertSame(target, observations[0][0]); |
- assertArrayEquals([target, toKey(p), dataDescriptor(42)], observations[1]); |
- assertSame(target, observations[1][0]); |
- observations = []; |
- |
- mySet(proxy, p, 42); |
- assertEquals(2, observations.length) |
- assertArrayEquals([target, toKey(p)], observations[0]); |
- assertSame(target, observations[0][0]); |
- assertArrayEquals([target, toKey(p), {value: 42}], observations[1]); |
- assertSame(target, observations[1][0]); |
- observations = []; |
- } |
-} |
- |
-TestForwarding2(sloppyDefaultSet); |
-TestForwarding2(sloppyReflectSet); |
-TestForwarding2(strictDefaultSet); |
-TestForwarding2(strictReflectSet); |
- |
- |
-function TestInvalidTrap(proxy, mySet) { |
- for (var p of properties) { |
- assertThrows(() => mySet(proxy, p, 42), TypeError); |
- } |
-} |
- |
-(function () { |
- var target = {}; |
- var handler = { set: true }; |
- var proxy = new Proxy(target, handler); |
- |
- TestInvalidTrap(proxy, sloppyDefaultSet); |
- TestInvalidTrap(proxy, sloppyReflectSet); |
- TestInvalidTrap(proxy, strictDefaultSet); |
- TestInvalidTrap(proxy, strictReflectSet); |
-})(); |
- |
- |
-function TestTrappingFalsish(mySet) { |
- var target = {}; |
- var handler = { set() {return ""} }; |
- var proxy = new Proxy(target, handler); |
- |
- for (var p of properties) { |
- assertSetFails(mySet, proxy, p, 42); |
- } |
-} |
- |
-TestTrappingFalsish(sloppyDefaultSet); |
-TestTrappingFalsish(sloppyReflectSet); |
-TestTrappingFalsish(strictDefaultSet); |
-TestTrappingFalsish(strictReflectSet); |
- |
- |
-function TestTrappingTrueish(mySet) { |
- var target = {}; |
- var handler = { set() {return 42} }; |
- var proxy = new Proxy(target, handler); |
- |
- // Trap returns trueish and property does not exist in target. |
- for (var p of properties) { |
- assertTrueIf(mySet.returnsBool, mySet(proxy, p, 0)); |
- } |
- |
- // Trap returns trueish and target property is configurable or writable data. |
- for (var p of properties) { |
- Object.defineProperty(target, p, {configurable: true, writable: true}); |
- assertTrueIf(mySet.returnsBool, mySet(proxy, p, 0)); |
- Object.defineProperty(target, p, {configurable: true, writable: false}); |
- assertTrueIf(mySet.returnsBool, mySet(proxy, p, 0)); |
- Object.defineProperty(target, p, {configurable: false, writable: true}); |
- assertTrueIf(mySet.returnsBool, mySet(proxy, p, 0)); |
- } |
-} |
- |
-TestTrappingTrueish(sloppyDefaultSet); |
-TestTrappingTrueish(sloppyReflectSet); |
-TestTrappingTrueish(strictDefaultSet); |
-TestTrappingTrueish(strictReflectSet); |
- |
- |
-function TestTrappingTrueish2(mySet) { |
- var target = {}; |
- var handler = { set() {return 42} }; |
- var proxy = new Proxy(target, handler); |
- |
- // Trap returns trueish but target property is frozen data. |
- for (var p of properties) { |
- Object.defineProperty(target, p, { |
- configurable: false, writable: false, value: 0 |
- }); |
- assertThrows(() => mySet(proxy, p, 666), TypeError); // New value. |
- assertTrueIf(mySet.returnsBool, mySet(proxy, p, 0)); // Old value. |
- } |
-}; |
- |
-TestTrappingTrueish2(sloppyDefaultSet); |
-TestTrappingTrueish2(sloppyReflectSet); |
-TestTrappingTrueish2(strictDefaultSet); |
-TestTrappingTrueish2(strictReflectSet); |
- |
- |
-function TestTrappingTrueish3(mySet) { |
- var target = {}; |
- var handler = { set() {return 42} }; |
- var proxy = new Proxy(target, handler); |
- |
- // Trap returns trueish and target property is configurable accessor. |
- for (var p of properties) { |
- Object.defineProperty(target, p, { configurable: true, set: undefined }); |
- assertTrueIf(mySet.returnsBool, mySet(proxy, p, 0)); |
- } |
- |
- // Trap returns trueish and target property is non-configurable accessor. |
- for (var p of properties) { |
- Object.defineProperty(target, p, { configurable: false, set: undefined }); |
- assertThrows(() => mySet(proxy, p, 0)); |
- } |
-}; |
- |
-TestTrappingTrueish3(sloppyDefaultSet); |
-TestTrappingTrueish3(sloppyReflectSet); |
-TestTrappingTrueish3(strictDefaultSet); |
-TestTrappingTrueish3(strictReflectSet); |
- |
- |
-function TestTrapReceiverArgument(mySet) { |
- var target = {}; |
- var handler = {}; |
- var observations = []; |
- var proxy = new Proxy(target, handler); |
- var object = Object.create(proxy); |
- |
- handler.set = function() { |
- observations.push(arguments); |
- return Reflect.set(...arguments); |
- } |
- |
- for (var p of properties) { |
- mySet(object, p, 42); |
- assertEquals(1, observations.length) |
- assertArrayEquals([target, toKey(p), 42, object], observations[0]); |
- assertSame(target, observations[0][0]); |
- assertSame(object, observations[0][3]); |
- observations = []; |
- } |
-}; |
- |
-TestTrapReceiverArgument(sloppyDefaultSet); |
-TestTrapReceiverArgument(sloppyReflectSet); |
-TestTrapReceiverArgument(strictDefaultSet); |
-TestTrapReceiverArgument(strictReflectSet); |
- |
- |
-(function TestTrapReceiverArgument2() { |
- // Check that non-object receiver is passed through as well. |
- |
- var target = {}; |
- var handler = {}; |
- var observations = []; |
- var proxy = new Proxy(target, handler); |
- |
- handler.set = function() { |
- observations.push(arguments); |
- return Reflect.set(...arguments); |
- } |
- |
- for (var p of properties) { |
- for (var receiver of [null, undefined, 1]) { |
- Reflect.set(proxy, p, 42, receiver); |
- assertEquals(1, observations.length) |
- assertArrayEquals([target, toKey(p), 42, receiver], observations[0]); |
- assertSame(target, observations[0][0]); |
- assertSame(receiver, observations[0][3]); |
- observations = []; |
- } |
- } |
- |
- var object = Object.create(proxy); |
- for (var p of properties) { |
- for (var receiver of [null, undefined, 1]) { |
- Reflect.set(object, p, 42, receiver); |
- assertEquals(1, observations.length); |
- assertArrayEquals([target, toKey(p), 42, receiver], observations[0]); |
- assertSame(target, observations[0][0]); |
- assertSame(receiver, observations[0][3]); |
- observations = []; |
- } |
- } |
-})(); |