diff options
author | Michaël Zasso <targos@protonmail.com> | 2016-05-27 16:37:42 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2016-06-29 09:04:28 +0200 |
commit | 2cc29517966de7257a2f1b34c58c77225a21e05d (patch) | |
tree | 210bd177df2f06eec16e1e22edafdbcbffe66f8a /deps/v8/test/mjsunit/es6/reflect.js | |
parent | bbf3838c70aaec1dd296fa75ae334fd1c7866df3 (diff) | |
download | node-new-2cc29517966de7257a2f1b34c58c77225a21e05d.tar.gz |
deps: update V8 to 5.1.281.69
Pick up the latest branch-head for V8 5.1. This branch brings in
improved language support and performance improvements. For full
details: http://v8project.blogspot.com/2016/04/v8-release-51.html
* Picks up the latest branch head for 5.1 [1]
* Edit v8 gitignore to allow trace_event copy
* Update V8 DEP trace_event as per deps/v8/DEPS [2]
[1] https://chromium.googlesource.com/v8/v8.git/+/dc81244
[2] https://chromium.googlesource.com/chromium/src/base/trace_event/common/+/c8c8665
PR-URL: https://github.com/nodejs/node/pull/7016
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'deps/v8/test/mjsunit/es6/reflect.js')
-rw-r--r-- | deps/v8/test/mjsunit/es6/reflect.js | 570 |
1 files changed, 570 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/es6/reflect.js b/deps/v8/test/mjsunit/es6/reflect.js new file mode 100644 index 0000000000..ee272b0fc7 --- /dev/null +++ b/deps/v8/test/mjsunit/es6/reflect.js @@ -0,0 +1,570 @@ +// 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. + +// 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. |