| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| function shouldThrow(func, message) { |
| var error = null; |
| try { |
| func(); |
| } catch (e) { |
| error = e; |
| } |
| if (!error) |
| throw new Error('not thrown.'); |
| if (String(error) !== message) |
| throw new Error('bad error: ' + String(error)); |
| } |
| |
| function unreachable() |
| { |
| throw new Error('unreachable'); |
| } |
| |
| function receiverTest(object, receiver) |
| { |
| shouldBe(Reflect.set(object, 'Cocoa', 42, receiver), true); |
| shouldBe(Reflect.get(receiver, 'Cocoa'), 42); |
| shouldBe(Reflect.get(object, 'Cocoa'), undefined); |
| |
| // Existing. |
| shouldBe(Reflect.set(object, 'Matcha', 40), true); |
| shouldBe(Reflect.get(object, 'Matcha'), 40); |
| shouldBe(Reflect.set(object, 'Matcha', 42, receiver), true); |
| shouldBe(Reflect.get(receiver, 'Matcha'), 42); |
| shouldBe(Reflect.get(object, 'Matcha'), 40); |
| |
| // Existing non writable own descriptor. |
| Reflect.defineProperty(object, 'Cappuccino', { |
| value: 'nice', |
| writable: false |
| }); |
| shouldBe(Reflect.set(object, 'Cappuccino', 42, receiver), false); |
| shouldBe(Reflect.get(receiver, 'Cappuccino'), undefined); |
| shouldBe(receiver.hasOwnProperty('Cappuccino'), false); |
| shouldBe(Reflect.get(object, 'Cappuccino'), 'nice'); |
| |
| // Existing non writable receiver descriptor. |
| Reflect.defineProperty(receiver, 'Kilimanjaro', { |
| value: 'good', |
| writable: false |
| }); |
| shouldBe(Reflect.set(object, 'Kilimanjaro', 42, receiver), false); |
| shouldBe(Reflect.get(receiver, 'Kilimanjaro'), 'good'); |
| shouldBe(receiver.hasOwnProperty('Kilimanjaro'), true); |
| shouldBe(Reflect.get(object, 'Kilimanjaro'), undefined); |
| shouldBe(object.hasOwnProperty('Kilimanjaro'), false); |
| |
| shouldBe(Reflect.set(object, 'Kilimanjaro', 42, 'receiver'), false); |
| |
| // Receiver accessors. |
| shouldBe(Reflect.defineProperty(receiver, 'Mocha', { |
| get() |
| { |
| return 42; |
| }, |
| configurable: true |
| }), true); |
| shouldBe(Reflect.set(object, 'Mocha', 42, receiver), false); |
| shouldBe(Reflect.defineProperty(receiver, 'Mocha', { |
| set(value) |
| { |
| unreachable(); |
| }, |
| configurable: true |
| }), true); |
| shouldBe(Reflect.set(object, 'Mocha', 42, receiver), false); |
| shouldBe(receiver.value, undefined); |
| shouldBe(Reflect.defineProperty(object, 'Mocha', { |
| get(value) |
| { |
| }, |
| configurable: true |
| }), true); |
| shouldBe(Reflect.set(object, 'Mocha', 42, receiver), false); |
| shouldBe(receiver.value, undefined); |
| shouldBe(Reflect.defineProperty(object, 'Mocha', { |
| set(value) |
| { |
| shouldBe(this, receiver); |
| this.value = value; |
| }, |
| configurable: true |
| }), true); |
| shouldBe(Reflect.set(object, 'Mocha', 42, receiver), true); |
| shouldBe(receiver.value, 42); |
| shouldBe(object.value, undefined); |
| } |
| |
| function receiverTestIndexed(object, receiver) |
| { |
| shouldBe(Reflect.set(object, 11, 42, receiver), true); |
| shouldBe(Reflect.get(receiver, 11), 42); |
| shouldBe(Reflect.get(object, 11), undefined); |
| |
| // Existing. |
| shouldBe(Reflect.set(object, 12, 40), true); |
| shouldBe(Reflect.get(object, 12), 40); |
| shouldBe(Reflect.set(object, 12, 42, receiver), true); |
| shouldBe(Reflect.get(receiver, 12), 42); |
| shouldBe(Reflect.get(object, 12), 40); |
| |
| // Existing non writable own descriptor. |
| Reflect.defineProperty(object, 13, { |
| value: 'nice', |
| writable: false |
| }); |
| shouldBe(Reflect.set(object, 13, 42, receiver), false); |
| shouldBe(Reflect.get(receiver, 13), undefined); |
| shouldBe(receiver.hasOwnProperty(13), false); |
| shouldBe(Reflect.get(object, 13), 'nice'); |
| |
| // Existing non writable receiver descriptor. |
| Reflect.defineProperty(receiver, 14, { |
| value: 'good', |
| writable: false |
| }); |
| shouldBe(Reflect.set(object, 14, 42, receiver), false); |
| shouldBe(Reflect.get(receiver, 14), 'good'); |
| shouldBe(receiver.hasOwnProperty(14), true); |
| shouldBe(Reflect.get(object, 14), undefined); |
| shouldBe(object.hasOwnProperty(14), false); |
| |
| // Receiver is a primitive value. |
| shouldBe(Reflect.set(object, 14, 42, 'receiver'), false); |
| |
| // Receiver accessors. |
| shouldBe(Reflect.defineProperty(receiver, 15, { |
| get() |
| { |
| return 42; |
| }, |
| configurable: true |
| }), true); |
| shouldBe(Reflect.set(object, 15, 42, receiver), false); |
| shouldBe(Reflect.defineProperty(receiver, 15, { |
| set(value) |
| { |
| unreachable(); |
| }, |
| configurable: true |
| }), true); |
| shouldBe(Reflect.set(object, 15, 42, receiver), false); |
| shouldBe(receiver.value, undefined); |
| shouldBe(Reflect.defineProperty(object, 15, { |
| get(value) |
| { |
| }, |
| configurable: true |
| }), true); |
| shouldBe(Reflect.set(object, 15, 42, receiver), false); |
| shouldBe(receiver.value, undefined); |
| shouldBe(Reflect.defineProperty(object, 15, { |
| set(value) |
| { |
| shouldBe(this, receiver); |
| this.value = value; |
| }, |
| configurable: true |
| }), true); |
| shouldBe(Reflect.set(object, 15, 42, receiver), true); |
| shouldBe(receiver.value, 42); |
| shouldBe(object.value, undefined); |
| } |
| |
| shouldBe(Reflect.set.length, 3); |
| |
| shouldThrow(() => { |
| Reflect.set('hello', 'hello', 42); |
| }, `TypeError: Reflect.set requires the first argument be an object`); |
| |
| var symbol = Symbol(); |
| |
| (function simpleReceiverCase() { |
| var receiver = {}; |
| var object = { |
| }; |
| |
| shouldBe(Reflect.set(object, 'Cocoa', 42, receiver), true); |
| shouldBe(Reflect.get(object, 'Cocoa'), undefined); |
| shouldBe(Reflect.get(receiver, 'Cocoa'), 42); |
| |
| var object2 = { |
| set Cocoa(value) { |
| print(value); |
| shouldBe(this, receiver); |
| this.value = value; |
| } |
| }; |
| shouldBe(Reflect.set(object, 'Cocoa', 42, receiver), true); |
| shouldBe(Reflect.get(object, 'Cocoa'), undefined); |
| shouldBe(Reflect.get(receiver, 'Cocoa'), 42); |
| }()); |
| |
| (function objectCase() { |
| 'use strict'; |
| var object = {}; |
| shouldBe(Reflect.get(object, 'hello'), undefined); |
| shouldBe(Reflect.set(object, 'hello', 42), true); |
| shouldBe(Reflect.get(object, 'hello'), 42); |
| shouldBe(Reflect.get(object, 0), undefined); |
| shouldBe(Reflect.set(object, 0, 42), true); |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(Reflect.get(object, symbol), undefined); |
| shouldBe(Reflect.set(object, symbol, 42), true); |
| shouldBe(Reflect.get(object, symbol), 42); |
| |
| var object = {}; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| var object = {}; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| var object = {}; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| receiverTest({}, {}); |
| receiverTestIndexed({}, {}); |
| }()); |
| |
| (function arrayCase() { |
| 'use strict'; |
| var object = []; |
| shouldBe(Reflect.get(object, 'hello'), undefined); |
| shouldBe(Reflect.set(object, 'hello', 42), true); |
| shouldBe(Reflect.get(object, 'hello'), 42); |
| shouldBe(Reflect.get(object, 0), undefined); |
| shouldBe(Reflect.set(object, 0, 42), true); |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(Reflect.get(object, symbol), undefined); |
| shouldBe(Reflect.set(object, symbol, 42), true); |
| shouldBe(Reflect.get(object, symbol), 42); |
| object[1000000] = 'Hello'; |
| shouldBe(Reflect.set(object, 0, 50), true); |
| shouldBe(Reflect.get(object, 0), 50); |
| |
| var object = []; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(object.length, 1); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| // Length. |
| var object = []; |
| shouldBe(Reflect.get(object, 'length'), 0); |
| shouldThrow(() => { |
| Reflect.set(object, 'length', 'Cappuccino'); |
| }, `RangeError: Invalid array length`); |
| shouldBe(Reflect.get(object, 'length'), 0); |
| |
| var object = []; |
| shouldBe(Reflect.get(object, 'length'), 0); |
| shouldBe(Reflect.set(object, 'length', 20), true); |
| shouldBe(Reflect.get(object, 'length'), 20); |
| |
| var object = []; |
| Object.freeze(object); |
| shouldBe(Reflect.get(object, 'length'), 0); |
| shouldBe(Reflect.set(object, 'length', 20), false); |
| shouldBe(Reflect.get(object, 'length'), 0); |
| |
| var object = []; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| var object = []; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| receiverTest([], []); |
| receiverTest({}, []); |
| receiverTest([], {}); |
| receiverTestIndexed([], []); |
| receiverTestIndexed({}, []); |
| receiverTestIndexed([], {}); |
| |
| var array = [0, 1, 2, 3]; |
| var receiver = {}; |
| shouldBe(Reflect.set(array, 'length', 'V', receiver), true); |
| shouldBe(Reflect.get(receiver, 'length'), 'V'); |
| shouldBe(receiver.hasOwnProperty('length'), true); |
| shouldBe(Reflect.get(array, 'length'), 4); |
| Object.freeze(array); |
| var receiver = {}; |
| shouldBe(Reflect.set(array, 'length', 'V', receiver), false); |
| shouldBe(Reflect.get(receiver, 'length'), undefined); |
| shouldBe(receiver.hasOwnProperty('length'), false); |
| shouldBe(Reflect.get(array, 'length'), 4); |
| }()); |
| |
| (function arrayBufferCase() { |
| 'use strict'; |
| var object = new ArrayBuffer(64); |
| shouldBe(Reflect.get(object, 'hello'), undefined); |
| shouldBe(Reflect.set(object, 'hello', 42), true); |
| shouldBe(Reflect.get(object, 'hello'), 42); |
| shouldBe(Reflect.get(object, 0), undefined); |
| shouldBe(Reflect.set(object, 0, 42), true); |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(Reflect.get(object, symbol), undefined); |
| shouldBe(Reflect.set(object, symbol, 42), true); |
| shouldBe(Reflect.get(object, symbol), 42); |
| object[1000000] = 'Hello'; |
| shouldBe(Reflect.set(object, 0, 50), true); |
| shouldBe(Reflect.get(object, 0), 50); |
| |
| var object = new ArrayBuffer(64); |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(object.length, undefined); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| var object = new ArrayBuffer(64); |
| shouldBe(Reflect.get(object, 'byteLength'), 64); |
| shouldBe(Reflect.set(object, 'byteLength', 'Cappuccino'), false); |
| shouldBe(Reflect.get(object, 'byteLength'), 64); |
| |
| var object = new ArrayBuffer(64); |
| shouldBe(Reflect.get(object, 'byteLength'), 64); |
| shouldBe(Reflect.set(object, 'byteLength', 2000), false); |
| shouldBe(Reflect.get(object, 'byteLength'), 64); |
| |
| var object = new ArrayBuffer(64); |
| shouldBe(Reflect.defineProperty(object, 'byteLength', { |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 'byteLength'), undefined); |
| shouldBe(Reflect.set(object, 'byteLength', 20), false); |
| shouldBe(Reflect.get(object, 'byteLength'), undefined); |
| |
| var object = new ArrayBuffer(64); |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| var object = new ArrayBuffer(64); |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| receiverTest(new ArrayBuffer(64), new ArrayBuffer(64)); |
| receiverTest({}, new ArrayBuffer(64)); |
| receiverTest(new ArrayBuffer(64), {}); |
| receiverTestIndexed(new ArrayBuffer(64), new ArrayBuffer(64)); |
| receiverTestIndexed({}, new ArrayBuffer(64)); |
| receiverTestIndexed(new ArrayBuffer(64), {}); |
| }()); |
| |
| [ |
| [ Uint8Array, 1 ], |
| [ Uint8ClampedArray, 1], |
| [ Uint16Array, 2 ], |
| [ Uint32Array, 4 ], |
| [ Int8Array, 1 ], |
| [ Int16Array, 2 ], |
| [ Int32Array, 4 ], |
| [ Float32Array, 4 ], |
| [ Float64Array, 8 ], |
| ].forEach((function() { |
| 'use strict'; |
| return function typedArrayCase([ TypedArray, bytesPerElement ]) { |
| var object = new TypedArray(64); |
| shouldBe(Reflect.get(object, 'hello'), undefined); |
| shouldBe(Reflect.set(object, 'hello', 42), true); |
| shouldBe(Reflect.get(object, 'hello'), 42); |
| shouldBe(Reflect.get(object, 0), 0); |
| shouldBe(Reflect.set(object, 0, 42), true); |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(Reflect.get(object, symbol), undefined); |
| shouldBe(Reflect.set(object, symbol, 42), true); |
| shouldBe(Reflect.get(object, symbol), 42); |
| object[1000000] = 'Hello'; |
| shouldBe(Reflect.set(object, 0, 50), true); |
| shouldBe(Reflect.get(object, 0), 50); |
| |
| var object = new TypedArray(64); |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| value: 'Cocoa', |
| writable: false |
| }), false); |
| shouldBe(Reflect.get(object, 0), 0); |
| shouldBe(Reflect.set(object, 0, 42), true); |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(object.length, 64); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| var object = new TypedArray(64); |
| shouldBe(Reflect.get(object, 'byteLength'), bytesPerElement * 64); |
| shouldBe(Reflect.set(object, 'byteLength', 'Cappuccino'), false); |
| shouldBe(Reflect.get(object, 'byteLength'), bytesPerElement * 64); |
| |
| var object = new TypedArray(64); |
| shouldBe(Reflect.get(object, 'byteLength'), bytesPerElement * 64); |
| shouldBe(Reflect.set(object, 'byteLength', 2000), false); |
| shouldBe(Reflect.get(object, 'byteLength'), bytesPerElement * 64); |
| |
| var object = new TypedArray(64); |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), false); |
| shouldBe(Reflect.get(object, 0), 0); |
| shouldBe(Reflect.set(object, 0, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| var object = new TypedArray(64); |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), false); |
| shouldBe(Reflect.get(object, 0), 0); |
| shouldBe(Reflect.set(object, 0, 42), true); |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| receiverTest(new TypedArray(64), new TypedArray(64)); |
| receiverTest(new TypedArray(64), {}); |
| receiverTest({}, new TypedArray(64)); |
| |
| var object = new TypedArray(64); |
| var receiver = {}; |
| // The receiver is ignored when the property name is an indexed one. |
| // shouldBe(Reflect.set(object, 0, 42, receiver), true); |
| shouldBe(Reflect.set(object, 0, 42, receiver), true); |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(receiver.hasOwnProperty(0), false); |
| }; |
| })()); |
| |
| |
| (function argumentCase() { |
| function test1() { |
| var object = arguments; |
| shouldBe(Reflect.get(object, 'hello'), undefined); |
| shouldBe(Reflect.set(object, 'hello', 42), true); |
| shouldBe(Reflect.get(object, 'hello'), 42); |
| shouldBe(Reflect.get(object, 0), undefined); |
| shouldBe(Reflect.set(object, 0, 42), true); |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(Reflect.get(object, symbol), undefined); |
| shouldBe(Reflect.set(object, symbol, 42), true); |
| shouldBe(Reflect.get(object, symbol), 42); |
| } |
| |
| function test2() { |
| var object = arguments; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(object.length, 0); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| } |
| |
| function test3() { |
| var object = arguments; |
| shouldBe(Reflect.get(object, 'length'), 0); |
| Reflect.set(object, 'length', 'Cappuccino'); |
| shouldBe(Reflect.get(object, 'length'), 'Cappuccino'); |
| |
| Reflect.set(object, 'callee', 'Cappuccino'); |
| shouldBe(Reflect.get(object, 'callee'), 'Cappuccino'); |
| } |
| |
| function test4() { |
| var object = arguments; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| } |
| |
| function test5() { |
| var object = arguments; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| } |
| |
| test1(); |
| test2(); |
| test3(); |
| test4(); |
| test5(); |
| |
| function getArguments() { return arguments; } |
| |
| receiverTest(getArguments(), getArguments()); |
| receiverTest({}, getArguments()); |
| receiverTest(getArguments(), {}); |
| receiverTestIndexed(getArguments(), getArguments()); |
| receiverTestIndexed({}, getArguments()); |
| receiverTestIndexed(getArguments(), {}); |
| |
| var args = getArguments(0, 1, 2); |
| var receiver = {}; |
| shouldBe(Reflect.set(args, 0, 'V', receiver), true); |
| shouldBe(Reflect.get(receiver, 0), 'V'); |
| shouldBe(Reflect.set(args, 'length', 'V', receiver), true); |
| shouldBe(Reflect.get(receiver, 'length'), 'V'); |
| }()); |
| |
| (function argumentStrictCase() { |
| 'use strict'; |
| function test1() { |
| var object = arguments; |
| shouldBe(Reflect.get(object, 'hello'), undefined); |
| shouldBe(Reflect.set(object, 'hello', 42), true); |
| shouldBe(Reflect.get(object, 'hello'), 42); |
| shouldBe(Reflect.get(object, 0), undefined); |
| shouldBe(Reflect.set(object, 0, 42), true); |
| shouldBe(Reflect.get(object, 0), 42); |
| shouldBe(Reflect.get(object, symbol), undefined); |
| shouldBe(Reflect.set(object, symbol, 42), true); |
| shouldBe(Reflect.get(object, symbol), 42); |
| } |
| |
| function test2() { |
| var object = arguments; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(object.length, 0); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| } |
| |
| function test3() { |
| var object = arguments; |
| shouldBe(Reflect.get(object, 'length'), 0); |
| Reflect.set(object, 'length', 'Cappuccino'); |
| shouldBe(Reflect.get(object, 'length'), 'Cappuccino'); |
| |
| shouldThrow(() => { |
| Reflect.set(object, 'callee', 'Cappuccino'); |
| }, `TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.`); |
| shouldThrow(() => { |
| Reflect.get(object, 'callee'); |
| }, `TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.`); |
| } |
| |
| function test4() { |
| var object = arguments; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| } |
| |
| function test5() { |
| var object = arguments; |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| } |
| |
| test1(); |
| test2(); |
| test3(); |
| test4(); |
| test5(); |
| |
| function getArguments() { return arguments; } |
| |
| receiverTest(getArguments(), getArguments()); |
| receiverTest({}, getArguments()); |
| receiverTest(getArguments(), {}); |
| receiverTestIndexed(getArguments(), getArguments()); |
| receiverTestIndexed({}, getArguments()); |
| receiverTestIndexed(getArguments(), {}); |
| |
| var args = getArguments(0, 1, 2); |
| var receiver = {}; |
| shouldBe(Reflect.set(args, 0, 'V', receiver), true); |
| shouldBe(Reflect.get(receiver, 0), 'V'); |
| shouldBe(Reflect.set(args, 'length', 'V', receiver), true); |
| shouldBe(Reflect.get(receiver, 'length'), 'V'); |
| }()); |
| |
| (function stringObjectCase() { |
| 'use strict'; |
| var object = new String('Cocoa'); |
| shouldBe(Reflect.get(object, 'hello'), undefined); |
| shouldBe(Reflect.set(object, 'hello', 42), true); |
| shouldBe(Reflect.get(object, 'hello'), 42); |
| shouldBe(Reflect.get(object, 0), 'C'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'C'); |
| shouldBe(Reflect.get(object, symbol), undefined); |
| shouldBe(Reflect.set(object, symbol, 42), true); |
| shouldBe(Reflect.get(object, symbol), 42); |
| object[1000000] = 'Cocoa'; |
| shouldBe(Reflect.set(object, 0, 50), false); |
| shouldBe(Reflect.get(object, 0), 'C'); |
| |
| var object = new String('Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| value: 'Cocoa', |
| writable: false |
| }), false); |
| shouldBe(Reflect.get(object, 0), 'C'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'C'); |
| shouldBe(object.length, 5); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| value: 'Cocoa', |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| // Length. |
| var object = new String('Cocoa'); |
| shouldBe(Reflect.get(object, 'length'), 5); |
| shouldBe(Reflect.set(object, 'length', 'Cappuccino'), false); |
| shouldBe(Reflect.get(object, 'length'), 5); |
| |
| var object = new String('Cocoa'); |
| shouldBe(Reflect.get(object, 'length'), 5); |
| shouldBe(Reflect.set(object, 'length', 20), false); |
| shouldBe(Reflect.get(object, 'length'), 5); |
| |
| var object = new String('Cocoa'); |
| Object.freeze(object); |
| shouldBe(Reflect.get(object, 'length'), 5); |
| shouldBe(Reflect.set(object, 'length', 20), false); |
| shouldBe(Reflect.get(object, 'length'), 5); |
| |
| var object = new String('Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), false); |
| shouldBe(Reflect.get(object, 0), 'C'); |
| shouldBe(Reflect.set(object, 0, 42), false); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, 0), 'C'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| }, |
| set() { |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), true); // Return true since the setter exists. |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| var object = new String('Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 'hello', { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.set(object, 'hello', 42), false); |
| shouldBe(Reflect.get(object, 'hello'), 'Cocoa'); |
| shouldBe(Reflect.defineProperty(object, 0, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), false); |
| shouldBe(Reflect.get(object, 0), 'C'); |
| shouldBe(Reflect.set(object, 0, 42), false); |
| shouldBe(Reflect.get(object, 0), 'C'); |
| shouldBe(Reflect.defineProperty(object, symbol, { |
| get() { |
| return 'Cocoa'; |
| } |
| }), true); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| shouldBe(Reflect.set(object, symbol, 42), false); |
| shouldBe(Reflect.get(object, symbol), 'Cocoa'); |
| |
| receiverTest(new String('Hello'), new String('World')); |
| receiverTest({}, new String('World')); |
| receiverTest(new String('Hello'), {}); |
| // Tested indice should be out of range of the string object. |
| receiverTestIndexed(new String('Hello'), new String('World')); |
| receiverTestIndexed({}, new String('World')); |
| receiverTestIndexed(new String('Hello'), {}); |
| |
| var string = new String('Hello'); |
| var receiver = {}; |
| shouldBe(Reflect.set(string, 0, 'V', receiver), false); |
| shouldBe(Reflect.get(receiver, 0), undefined); |
| shouldBe(receiver.hasOwnProperty(0), false); |
| shouldBe(Reflect.set(string, 'length', 'V', receiver), false); |
| shouldBe(Reflect.get(receiver, 'length'), undefined); |
| shouldBe(receiver.hasOwnProperty('length'), false); |
| }()); |
| |
| (function regExpCase() { |
| receiverTest(/hello/, /world/); |
| receiverTest({}, /world/); |
| receiverTest(/hello/, {}); |
| receiverTestIndexed(/hello/, /world/); |
| receiverTestIndexed({}, /world/); |
| receiverTestIndexed(/hello/, {}); |
| }()); |
| |
| (function customValue() { |
| // In this case, RegExp.multiline behaves like a setter because it coerce boolean type. |
| // Anyway, it's OK, because RegExp.multiline is not specified in the spec. |
| |
| function test1() { |
| shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino'), true); |
| shouldBe(Reflect.get(RegExp, 'multiline'), true); |
| shouldBe(Reflect.set(RegExp, 'multiline', 0), true); |
| shouldBe(Reflect.get(RegExp, 'multiline'), false); |
| |
| var receiver = {}; |
| shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino', receiver), true); |
| shouldBe(Reflect.get(receiver, 'multiline'), 'Cappuccino'); |
| shouldBe(Reflect.get(RegExp, 'multiline'), false); |
| } |
| |
| function test2() { |
| 'use strict'; |
| shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino'), true); |
| shouldBe(Reflect.get(RegExp, 'multiline'), true); |
| shouldBe(Reflect.set(RegExp, 'multiline', 0), true); |
| shouldBe(Reflect.get(RegExp, 'multiline'), false); |
| |
| var receiver = {}; |
| shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino', receiver), true); |
| shouldBe(Reflect.get(receiver, 'multiline'), 'Cappuccino'); |
| shouldBe(Reflect.get(RegExp, 'multiline'), false); |
| } |
| |
| function test3() { |
| 'use strict'; |
| shouldBe(Reflect.defineProperty(RegExp, 'multiline', { |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(RegExp, 'multiline'), false); |
| shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino'), false); |
| shouldBe(Reflect.get(RegExp, 'multiline'), false); |
| shouldBe(Reflect.set(RegExp, 'multiline', 0), false); |
| shouldBe(Reflect.get(RegExp, 'multiline'), false); |
| |
| var receiver = {}; |
| shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino', receiver), false); |
| shouldBe(Reflect.get(receiver, 'multiline'), undefined); |
| } |
| |
| test1(); |
| test2(); |
| test3(); |
| }()); |
| |
| (function regExpLastIndex() { |
| var regexp = new RegExp('Cocoa'); |
| regexp.lastIndex = 'Hello'; |
| shouldBe(Reflect.get(regexp, 'lastIndex'), 'Hello'); |
| regexp.lastIndex = 42; |
| shouldBe(Reflect.get(regexp, 'lastIndex'), 42); |
| |
| shouldBe(Reflect.set(regexp, 'lastIndex', 'Hello'), true); |
| shouldBe(Reflect.get(regexp, 'lastIndex'), 'Hello'); |
| |
| var receiver = {}; |
| shouldBe(Reflect.set(regexp, 'lastIndex', 'Cocoa', receiver), true); |
| shouldBe(Reflect.get(receiver, 'lastIndex'), 'Cocoa'); |
| shouldBe(Reflect.get(regexp, 'lastIndex'), 'Hello'); |
| |
| shouldBe(Reflect.defineProperty(regexp, 'lastIndex', { |
| value: 42, |
| writable: false |
| }), true); |
| shouldBe(Reflect.get(regexp, 'lastIndex'), 42); |
| shouldBe(Reflect.set(regexp, 'lastIndex', 'Hello'), false); |
| shouldBe(Reflect.get(regexp, 'lastIndex'), 42); |
| |
| var receiver = {}; |
| shouldBe(Reflect.set(regexp, 'lastIndex', 'Cocoa', receiver), false); |
| shouldBe(Reflect.get(receiver, 'lastIndex'), undefined); |
| shouldBe(Reflect.get(regexp, 'lastIndex'), 42); |
| |
| shouldThrow(function () { |
| 'use strict'; |
| regexp.lastIndex = 'NG'; |
| }, `TypeError: Attempted to assign to readonly property.`); |
| }()); |
| |
| (function functionCase() { |
| var func = function () { }; |
| shouldBe(Reflect.get(func, 'arguments'), null); |
| shouldBe(Reflect.set(func, 'arguments', 42), false); |
| shouldBe(Reflect.get(func, 'arguments'), null); |
| |
| shouldBe(Reflect.get(func, 'caller'), null); |
| shouldBe(Reflect.set(func, 'caller', 42), false); |
| shouldBe(Reflect.get(func, 'caller'), null); |
| |
| receiverTest(function () {}, function () {}); |
| receiverTest({}, function () {}); |
| receiverTest(function () {}, {}); |
| receiverTestIndexed(function () {}, function () {}); |
| receiverTestIndexed({}, function () {}); |
| receiverTestIndexed(function () {}, {}); |
| |
| var receiver = {}; |
| shouldBe(Reflect.set(func, 'arguments', 'V', receiver), false); |
| shouldBe(Reflect.get(receiver, 'arguments'), undefined); |
| shouldBe(receiver.hasOwnProperty('arguments'), false); |
| shouldBe(Reflect.get(func, 'arguments'), null); |
| shouldBe(Reflect.set(func, 'caller', 'V', receiver), false); |
| shouldBe(Reflect.get(receiver, 'caller'), undefined); |
| shouldBe(receiver.hasOwnProperty('caller'), false); |
| shouldBe(Reflect.get(func, 'caller'), null); |
| }()); |