| Index: test/mjsunit/harmony/reflect.js
|
| diff --git a/test/mjsunit/harmony/reflect.js b/test/mjsunit/harmony/reflect.js
|
| deleted file mode 100644
|
| index 6449eb8259f4ee5fdd34dc848b4166eb4257a149..0000000000000000000000000000000000000000
|
| --- a/test/mjsunit/harmony/reflect.js
|
| +++ /dev/null
|
| @@ -1,572 +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-reflect
|
| -
|
| -// TODO(neis): Test with proxies.
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// (Auxiliaries)
|
| -
|
| -
|
| -"use strict";
|
| -
|
| -var global = this;
|
| -
|
| -var sym = Symbol("gaga");
|
| -
|
| -var objects = [
|
| - {},
|
| - [],
|
| - function() {},
|
| - function() {
|
| - return arguments;
|
| - }(),
|
| - function() {
|
| - 'use strict';
|
| - return arguments;
|
| - }(),
|
| - Object(1),
|
| - Object(true),
|
| - Object('bla'),
|
| - new Date,
|
| - new RegExp,
|
| - new Set,
|
| - new Map,
|
| - new WeakMap,
|
| - new WeakSet,
|
| - new ArrayBuffer(10),
|
| - new Int32Array(5),
|
| - Object,
|
| - Function,
|
| - Date,
|
| - RegExp,
|
| - global
|
| -];
|
| -
|
| -function prepare(target) {
|
| - target["bla"] = true;
|
| - target[4] = 42;
|
| - target[sym] = "foo";
|
| - target["noconf"] = 43;
|
| - Object.defineProperty(target, "noconf",
|
| - { configurable: false });
|
| - Object.defineProperty(target, "nowrite",
|
| - { writable: false, configurable: true, value: 44 });
|
| - Object.defineProperty(target, "getter",
|
| - { get: function () {return this.bla}, configurable: true });
|
| - Object.defineProperty(target, "setter",
|
| - { set: function (x) {this.gaga = x}, configurable: true });
|
| - Object.defineProperty(target, "setter2",
|
| - { set: function (x) {}, configurable: true });
|
| -}
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.get
|
| -
|
| -
|
| -(function testReflectGetArity() {
|
| - assertEquals(2, Reflect.get.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectGetOnNonObject() {
|
| - assertThrows(function() { Reflect.get(); }, TypeError);
|
| - assertThrows(function() { Reflect.get(42, "bla"); }, TypeError);
|
| - assertThrows(function() { Reflect.get(null, "bla"); }, TypeError);
|
| -})();
|
| -
|
| -
|
| -(function testReflectGetKeyConversion() {
|
| - var target = {bla: 42};
|
| - var a = { [Symbol.toPrimitive]: function() { return "bla" } };
|
| - var b = { [Symbol.toPrimitive]: function() { throw "gaga" } };
|
| - assertEquals(42, Reflect.get(target, a));
|
| - assertThrowsEquals(function() { Reflect.get(target, b); }, "gaga");
|
| -})();
|
| -
|
| -
|
| -(function testReflectGetOnObject() {
|
| - var receiver = {bla: false};
|
| - for (let target of objects) {
|
| - prepare(target);
|
| - assertEquals(true, Reflect.get(target, "bla"));
|
| - assertEquals(true, Reflect.get(target, "bla", target));
|
| - assertEquals(true, Reflect.get(target, "bla", receiver));
|
| - assertEquals(42, Reflect.get(target, 4));
|
| - assertEquals(42, Reflect.get(target, 4, target));
|
| - assertEquals(42, Reflect.get(target, 4, receiver));
|
| - assertEquals(42, Reflect.get(target, "4"));
|
| - assertEquals(42, Reflect.get(target, "4", target));
|
| - assertEquals(42, Reflect.get(target, "4", receiver));
|
| - assertEquals("foo", Reflect.get(target, sym));
|
| - assertEquals("foo", Reflect.get(target, sym, target));
|
| - assertEquals("foo", Reflect.get(target, sym, receiver));
|
| - assertEquals(43, Reflect.get(target, "noconf"));
|
| - assertEquals(43, Reflect.get(target, "noconf", target));
|
| - assertEquals(43, Reflect.get(target, "noconf", receiver));
|
| - assertEquals(true, Reflect.get(target, "getter"));
|
| - assertEquals(true, Reflect.get(target, "getter", target));
|
| - assertEquals(false, Reflect.get(target, "getter", receiver));
|
| - assertEquals(undefined, Reflect.get(target, "setter"));
|
| - assertEquals(undefined, Reflect.get(target, "setter", target));
|
| - assertEquals(undefined, Reflect.get(target, "setter", receiver));
|
| - assertEquals(undefined, Reflect.get(target, "foo"));
|
| - assertEquals(undefined, Reflect.get(target, "foo", target));
|
| - assertEquals(undefined, Reflect.get(target, "foo", receiver));
|
| - assertEquals(undefined, Reflect.get(target, 666));
|
| - assertEquals(undefined, Reflect.get(target, 666, target));
|
| - assertEquals(undefined, Reflect.get(target, 666, receiver));
|
| -
|
| - let proto = target.__proto__;
|
| - target.__proto__ = { get foo() {return this.bla} };
|
| - assertEquals(true, Reflect.get(target, "foo"));
|
| - assertEquals(true, Reflect.get(target, "foo", target));
|
| - assertEquals(false, Reflect.get(target, "foo", receiver));
|
| - target.__proto__ = proto;
|
| - }
|
| -})();
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.set
|
| -
|
| -
|
| -(function testReflectSetArity() {
|
| - assertEquals(3, Reflect.set.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectSetOnNonObject() {
|
| - assertThrows(function() { Reflect.set(); }, TypeError);
|
| - assertThrows(function() { Reflect.set(42, "bla"); }, TypeError);
|
| - assertThrows(function() { Reflect.set(null, "bla"); }, TypeError);
|
| -})();
|
| -
|
| -
|
| -(function testReflectSetKeyConversion() {
|
| - var target = {};
|
| - var a = { [Symbol.toPrimitive]: function() { return "bla" } };
|
| - var b = { [Symbol.toPrimitive]: function() { throw "gaga" } };
|
| - assertTrue(Reflect.set(target, a, 42));
|
| - assertEquals(42, target.bla);
|
| - assertThrowsEquals(function() { Reflect.set(target, b, 42); }, "gaga");
|
| -})();
|
| -
|
| -
|
| -(function testReflectSetOnObject() {
|
| - var receiver = {bla: false};
|
| - var value = 34234;
|
| - for (let target of objects) {
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, "bla", value));
|
| - assertEquals(value, target.bla);
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, "bla", value, target));
|
| - assertEquals(value, target.bla);
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, "bla", value, receiver));
|
| - assertEquals(true, target.bla);
|
| - assertEquals(value, receiver.bla);
|
| - receiver.bla = false;
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, 4, value));
|
| - assertEquals(value, target[4]);
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, 4, value, target));
|
| - assertEquals(value, target[4]);
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, 4, value, receiver));
|
| - assertEquals(42, target[4]);
|
| - assertEquals(value, receiver[4]);
|
| - delete receiver[4];
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, sym, value));
|
| - assertEquals(value, target[sym]);
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, sym, value, target));
|
| - assertEquals(value, target[sym]);
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, sym, value, receiver));
|
| - assertEquals("foo", target[sym]);
|
| - assertEquals(value, receiver[sym]);
|
| - delete receiver[sym];
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, "noconf", value));
|
| - assertEquals(value, target.noconf);
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, "noconf", value, target));
|
| - assertEquals(value, target.noconf);
|
| -
|
| - prepare(target);
|
| - assertTrue(Reflect.set(target, "noconf", value, receiver));
|
| - assertEquals(43, target.noconf);
|
| - assertEquals(value, receiver.noconf);
|
| - delete receiver.noconf;
|
| -
|
| - assertTrue(Reflect.set(target, "setter", value));
|
| - assertEquals(value, target.gaga)
|
| - delete target.gaga;
|
| -
|
| - assertTrue(Reflect.set(target, "setter", value, target));
|
| - assertEquals(value, target.gaga)
|
| - delete target.gaga;
|
| -
|
| - assertTrue(Reflect.set(target, "setter", value, receiver));
|
| - assertFalse("gaga" in target);
|
| - assertEquals(value, receiver.gaga);
|
| - delete receiver.gaga;
|
| -
|
| - assertFalse(Reflect.set(target, "nowrite", value));
|
| - assertEquals(44, target.nowrite);
|
| -
|
| - assertFalse(Reflect.set(target, "nowrite", value, target));
|
| - assertEquals(44, target.nowrite);
|
| -
|
| - assertFalse(Reflect.set(target, "nowrite", value, receiver));
|
| - assertEquals(44, target.nowrite);
|
| - assertFalse("nowrite" in receiver);
|
| -
|
| - // Data vs Non-Writable
|
| - assertFalse(Reflect.set({}, "nowrite", value, target));
|
| -
|
| - // Data vs Accessor
|
| - assertFalse(Reflect.set({}, "unknown", 0, {set unknown(x) {}}));
|
| - assertFalse(Reflect.set(target, "unknown", value, {set unknown(x) {}}));
|
| - assertFalse(Reflect.set(target, "bla", value, {set bla(x) {}}));
|
| - assertFalse(Reflect.set(target, "bla", value, {get bla() {}}));
|
| -
|
| - // Accessor vs Data
|
| - assertTrue(Reflect.set({set bla(x) {}}), "bla", value, target);
|
| - assertFalse(Reflect.set({get bla() {}}, "bla", value, target));
|
| -
|
| - // Data vs Non-Object
|
| - assertFalse(Reflect.set({}, "bla", value, null));
|
| - assertFalse(Reflect.set({bla: 42}, "bla", value, null));
|
| -
|
| - // Accessor vs Non-Object
|
| - assertTrue(Reflect.set(target, "setter2", value, null));
|
| - assertFalse(Reflect.set(target, "getter", value, null));
|
| -
|
| - let receiver2 = {};
|
| - Object.defineProperty(receiver2, "bla",
|
| - {configurable: false, writable: true, value: true});
|
| - Object.defineProperty(receiver2, "not_in_target",
|
| - {configurable: false, writable: true, value: true});
|
| - assertTrue(Reflect.set(target, "bla", value, receiver2));
|
| - assertTrue(Reflect.set(target, "not_in_target", value, receiver2));
|
| - }
|
| -})();
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.has
|
| -
|
| -
|
| -(function testReflectHasArity() {
|
| - assertEquals(2, Reflect.has.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectHasOnNonObject() {
|
| - assertThrows(function() { Reflect.has(); }, TypeError);
|
| - assertThrows(function() { Reflect.has(42, "bla"); }, TypeError);
|
| - assertThrows(function() { Reflect.has(null, "bla"); }, TypeError);
|
| -})();
|
| -
|
| -
|
| -(function testReflectHasKeyConversion() {
|
| - var target = {bla: 42};
|
| - var a = { [Symbol.toPrimitive]: function() { return "bla" } };
|
| - var b = { [Symbol.toPrimitive]: function() { throw "gaga" } };
|
| - assertTrue(Reflect.has(target, a));
|
| - assertThrowsEquals(function() { Reflect.has(target, b); }, "gaga");
|
| -})();
|
| -
|
| -
|
| -(function testReflectHasOnObject() {
|
| - for (let target of objects) {
|
| - prepare(target);
|
| - assertTrue(Reflect.has(target, "bla"));
|
| - assertTrue(Reflect.has(target, 4));
|
| - assertTrue(Reflect.has(target, "4"));
|
| - assertTrue(Reflect.has(target, sym));
|
| - assertTrue(Reflect.has(target, "noconf"));
|
| - assertTrue(Reflect.has(target, "getter"));
|
| - assertTrue(Reflect.has(target, "setter"));
|
| - assertFalse(Reflect.has(target, "foo"));
|
| - assertFalse(Reflect.has(target, 666));
|
| -
|
| - let proto = target.__proto__;
|
| - target.__proto__ = { get foo() {return this.bla} };
|
| - assertEquals(true, Reflect.has(target, "foo"));
|
| - target.__proto__ = proto;
|
| - }
|
| -})();
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.defineProperty
|
| -
|
| -
|
| -(function testReflectDefinePropertyArity() {
|
| - assertEquals(3, Reflect.defineProperty.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectDefinePropertyOnNonObject() {
|
| - assertThrows(function() { Reflect.defineProperty(); }, TypeError);
|
| - assertThrows(function() { Reflect.defineProperty(42, "bla"); }, TypeError);
|
| - assertThrows(function() { Reflect.defineProperty(null, "bla"); }, TypeError);
|
| - assertThrows(function() { Reflect.defineProperty({}, "bla"); }, TypeError);
|
| - assertThrows(function() { Reflect.defineProperty({}, "bla", 42); },
|
| - TypeError);
|
| - assertThrows(function() { Reflect.defineProperty({}, "bla", null); },
|
| - TypeError);
|
| -})();
|
| -
|
| -
|
| -(function testReflectDefinePropertyKeyConversion() {
|
| - var target = {};
|
| - var a = { [Symbol.toPrimitive]: function() { return "bla" } };
|
| - var b = { [Symbol.toPrimitive]: function() { throw "gaga" } };
|
| - assertTrue(Reflect.defineProperty(target, a, {value: 42}));
|
| - assertEquals(target.bla, 42);
|
| - assertThrowsEquals(function() { Reflect.defineProperty(target, b); }, "gaga");
|
| -})();
|
| -
|
| -
|
| -// See reflect-define-property.js for further tests.
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.deleteProperty
|
| -
|
| -
|
| -(function testReflectDeletePropertyArity() {
|
| - assertEquals(2, Reflect.deleteProperty.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectDeletePropertyOnNonObject() {
|
| - assertThrows(function() { Reflect.deleteProperty(); }, TypeError);
|
| - assertThrows(function() { Reflect.deleteProperty(42, "bla"); }, TypeError);
|
| - assertThrows(function() { Reflect.deleteProperty(null, "bla"); }, TypeError);
|
| -})();
|
| -
|
| -
|
| -(function testReflectDeletePropertyKeyConversion() {
|
| - var target = {bla: 42};
|
| - var a = { [Symbol.toPrimitive]: function() { return "bla" } };
|
| - var b = { [Symbol.toPrimitive]: function() { throw "gaga" } };
|
| - assertTrue(Reflect.deleteProperty(target, a));
|
| - assertThrowsEquals(function() { Reflect.deleteProperty(target, b); }, "gaga");
|
| -})();
|
| -
|
| -
|
| -(function testReflectDeletePropertyOnObject() {
|
| - for (let target of objects) {
|
| - prepare(target);
|
| - assertTrue(Reflect.deleteProperty(target, "bla"));
|
| - assertEquals(undefined, Object.getOwnPropertyDescriptor(target, "bla"));
|
| - if (target instanceof Int32Array) {
|
| - assertFalse(Reflect.deleteProperty(target, 4));
|
| - } else {
|
| - assertTrue(Reflect.deleteProperty(target, 4));
|
| - assertEquals(undefined, Object.getOwnPropertyDescriptor(target, 4));
|
| - }
|
| - assertTrue(Reflect.deleteProperty(target, sym));
|
| - assertEquals(undefined, Object.getOwnPropertyDescriptor(target, sym));
|
| - assertFalse(Reflect.deleteProperty(target, "noconf"));
|
| - assertEquals(43, target.noconf);
|
| - assertTrue(Reflect.deleteProperty(target, "getter"));
|
| - assertTrue(Reflect.deleteProperty(target, "setter"));
|
| - assertTrue(Reflect.deleteProperty(target, "foo"));
|
| - assertTrue(Reflect.deleteProperty(target, 666));
|
| -
|
| - let proto = target.__proto__;
|
| - target.__proto__ = { get foo() {return this.bla} };
|
| - assertEquals(true, Reflect.deleteProperty(target, "foo"));
|
| - target.__proto__ = proto;
|
| - }
|
| -})();
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.getPrototypeOf
|
| -
|
| -
|
| -(function testReflectGetPrototypeOfArity() {
|
| - assertEquals(1, Reflect.getPrototypeOf.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectGetPrototypeOnNonObject() {
|
| - assertThrows(function() { Reflect.getPrototypeOf(); }, TypeError);
|
| - assertThrows(function() { Reflect.getPrototypeOf(42); }, TypeError);
|
| - assertThrows(function() { Reflect.getPrototypeOf(null); }, TypeError);
|
| -})();
|
| -
|
| -
|
| -// See reflect-get-prototype-of.js for further tests.
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.setPrototypeOf
|
| -
|
| -
|
| -(function testReflectSetPrototypeOfArity() {
|
| - assertEquals(2, Reflect.setPrototypeOf.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectSetPrototypeOfOnNonObject() {
|
| - assertThrows(function() { Reflect.setPrototypeOf(undefined, {}); },
|
| - TypeError);
|
| - assertThrows(function() { Reflect.setPrototypeOf(42, {}); }, TypeError);
|
| - assertThrows(function() { Reflect.setPrototypeOf(null, {}); }, TypeError);
|
| -
|
| - assertThrows(function() { Reflect.setPrototypeOf({}, undefined); },
|
| - TypeError);
|
| - assertThrows(function() { Reflect.setPrototypeOf({}, 42); }, TypeError);
|
| - assertTrue(Reflect.setPrototypeOf({}, null));
|
| -})();
|
| -
|
| -
|
| -// See reflect-set-prototype-of.js for further tests.
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.isExtensible
|
| -
|
| -
|
| -(function testReflectIsExtensibleArity() {
|
| - assertEquals(1, Reflect.isExtensible.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectIsExtensibleOnNonObject() {
|
| - assertThrows(function() { Reflect.isExtensible(); }, TypeError);
|
| - assertThrows(function() { Reflect.isExtensible(42); }, TypeError);
|
| - assertThrows(function() { Reflect.isExtensible(null); }, TypeError);
|
| -})();
|
| -
|
| -
|
| -(function testReflectIsExtensibleOnObject() {
|
| - // This should be the last test on [objects] as it modifies them irreversibly.
|
| - for (let target of objects) {
|
| - prepare(target);
|
| - if (target instanceof Int32Array) continue; // issue v8:4460
|
| - assertTrue(Reflect.isExtensible(target));
|
| - Object.preventExtensions(target);
|
| - assertFalse(Reflect.isExtensible(target));
|
| - }
|
| -})();
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.getOwnPropertyDescriptor
|
| -
|
| -
|
| -(function testReflectGetOwnPropertyDescriptorArity() {
|
| - assertEquals(2, Reflect.getOwnPropertyDescriptor.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectGetOwnPropertyDescriptorOnNonObject() {
|
| - assertThrows(function() { Reflect.getOwnPropertyDescriptor(); }, TypeError);
|
| - assertThrows(function() { Reflect.getOwnPropertyDescriptor(42); },
|
| - TypeError);
|
| - assertThrows(function() { Reflect.getOwnPropertyDescriptor(null); },
|
| - TypeError);
|
| -})();
|
| -
|
| -
|
| -(function testReflectGetOwnPropertyDescriptorKeyConversion() {
|
| - var target = {bla: 42};
|
| - var a = { [Symbol.toPrimitive]: function() { return "bla" } };
|
| - var b = { [Symbol.toPrimitive]: function() { throw "gaga" } };
|
| - assertEquals(42, Reflect.getOwnPropertyDescriptor(target, a).value);
|
| - assertThrowsEquals(() => Reflect.getOwnPropertyDescriptor(target, b), "gaga");
|
| -})();
|
| -
|
| -
|
| -// See reflect-get-own-property-descriptor.js for further tests.
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.ownKeys
|
| -
|
| -
|
| -(function testReflectOwnKeysArity() {
|
| - assertEquals(1, Reflect.ownKeys.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectOwnKeysOnNonObject() {
|
| - assertThrows(function() { Reflect.ownKeys(); }, TypeError);
|
| - assertThrows(function() { Reflect.ownKeys(42); }, TypeError);
|
| - assertThrows(function() { Reflect.ownKeys(null); }, TypeError);
|
| -})();
|
| -
|
| -
|
| -(function testReflectOwnKeysOnObject(){
|
| - assertEquals(["z", "y", "x"], Reflect.ownKeys({z: 3, y: 2, x: 1}));
|
| - assertEquals(["length"], Reflect.ownKeys([]));
|
| -
|
| - var s1 = Symbol("foo");
|
| - var s2 = Symbol("bar");
|
| - var obj = { [s1]: 0, "bla": 0, 42: 0, "0": 0,
|
| - [s2]: 0, "-1": 0, "88": 0, "aaa": 0 };
|
| - assertEquals(["0", "42", "88", "bla", "-1", "aaa", s1, s2],
|
| - Reflect.ownKeys(obj));
|
| -})();
|
| -
|
| -
|
| -// See reflect-own-keys.js for further tests.
|
| -
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// Reflect.preventExtensions
|
| -
|
| -
|
| -(function testReflectPreventExtensionsArity() {
|
| - assertEquals(1, Reflect.preventExtensions.length);
|
| -})();
|
| -
|
| -
|
| -(function testReflectPreventExtensionsOnNonObject() {
|
| - assertThrows(function() { Reflect.preventExtensions(); }, TypeError);
|
| - assertThrows(function() { Reflect.preventExtensions(42); }, TypeError);
|
| - assertThrows(function() { Reflect.preventExtensions(null); }, TypeError);
|
| -})();
|
| -
|
| -
|
| -// See reflect-prevent-extensions.js for further tests.
|
| -
|
| -// TODO(neis): Need proxies to test the situation where
|
| -// [[preventExtensions]] returns false.
|
|
|