| Index: test/mjsunit/harmony/object-values.js
|
| diff --git a/test/mjsunit/harmony/object-values.js b/test/mjsunit/harmony/object-values.js
|
| deleted file mode 100644
|
| index 141070db9c6a130b3c2fbc0c27c10aa2ab115b7a..0000000000000000000000000000000000000000
|
| --- a/test/mjsunit/harmony/object-values.js
|
| +++ /dev/null
|
| @@ -1,292 +0,0 @@
|
| -// Copyright 2016 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-object-values-entries
|
| -// Flags: --allow-natives-syntax
|
| -
|
| -function TestMeta() {
|
| - assertEquals(1, Object.values.length);
|
| - assertEquals(Function.prototype, Object.getPrototypeOf(Object.values));
|
| - assertEquals("values", Object.values.name);
|
| -
|
| - var descriptor = Object.getOwnPropertyDescriptor(Object, "values");
|
| - assertTrue(descriptor.writable);
|
| - assertFalse(descriptor.enumerable);
|
| - assertTrue(descriptor.configurable);
|
| -
|
| - assertThrows(() => new Object.values({}), TypeError);
|
| -}
|
| -TestMeta();
|
| -
|
| -
|
| -function TestBasic() {
|
| - var x = 16;
|
| - var O = {
|
| - d: 1,
|
| - c: 3,
|
| - [Symbol.iterator]: void 0,
|
| - 0: 123,
|
| - 1000: 456,
|
| - [x * x]: "ducks",
|
| - [`0x${(x * x).toString(16)}`]: "quack"
|
| - };
|
| - O.a = 2;
|
| - O.b = 4;
|
| - Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN });
|
| - assertEquals([123, "ducks", 456, 1, 3, "quack", 2, 4], Object.values(O));
|
| - assertEquals(Object.values(O), Object.keys(O).map(key => O[key]));
|
| -
|
| - assertTrue(Array.isArray(Object.values({})));
|
| - assertEquals(0, Object.values({}).length);
|
| -}
|
| -TestBasic();
|
| -
|
| -
|
| -function TestToObject() {
|
| - assertThrows(function() { Object.values(); }, TypeError);
|
| - assertThrows(function() { Object.values(null); }, TypeError);
|
| - assertThrows(function() { Object.values(void 0); }, TypeError);
|
| -}
|
| -TestToObject();
|
| -
|
| -
|
| -function TestOrder() {
|
| - var O = {
|
| - a: 1,
|
| - [Symbol.iterator]: null
|
| - };
|
| - O[456] = 123;
|
| - Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN });
|
| - var priv = %CreatePrivateSymbol("Secret");
|
| - O[priv] = 56;
|
| -
|
| - var log = [];
|
| - var P = new Proxy(O, {
|
| - ownKeys(target) {
|
| - log.push("[[OwnPropertyKeys]]");
|
| - return Reflect.ownKeys(target);
|
| - },
|
| - get(target, name) {
|
| - log.push(`[[Get]](${JSON.stringify(name)})`);
|
| - return Reflect.get(target, name);
|
| - },
|
| - getOwnPropertyDescriptor(target, name) {
|
| - log.push(`[[GetOwnProperty]](${JSON.stringify(name)})`);
|
| - return Reflect.getOwnPropertyDescriptor(target, name);
|
| - },
|
| - set(target, name, value) {
|
| - assertUnreachable();
|
| - }
|
| - });
|
| -
|
| - assertEquals([123, 1], Object.values(P));
|
| - assertEquals([
|
| - "[[OwnPropertyKeys]]",
|
| - "[[GetOwnProperty]](\"456\")",
|
| - "[[Get]](\"456\")",
|
| - "[[GetOwnProperty]](\"a\")",
|
| - "[[Get]](\"a\")",
|
| - "[[GetOwnProperty]](\"HIDDEN\")"
|
| - ], log);
|
| -}
|
| -TestOrder();
|
| -
|
| -
|
| -function TestOrderWithDuplicates() {
|
| - var O = {
|
| - a: 1,
|
| - [Symbol.iterator]: null
|
| - };
|
| - O[456] = 123;
|
| - Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN });
|
| - O[priv] = 56;
|
| - var priv = %CreatePrivateSymbol("private");
|
| -
|
| - var log = [];
|
| - var P = new Proxy(O, {
|
| - ownKeys(target) {
|
| - log.push("[[OwnPropertyKeys]]");
|
| - return [ "a", Symbol.iterator, "a", "456", "HIDDEN", "HIDDEN", "456" ];
|
| - },
|
| - get(target, name) {
|
| - log.push(`[[Get]](${JSON.stringify(name)})`);
|
| - return Reflect.get(target, name);
|
| - },
|
| - getOwnPropertyDescriptor(target, name) {
|
| - log.push(`[[GetOwnProperty]](${JSON.stringify(name)})`);
|
| - return Reflect.getOwnPropertyDescriptor(target, name);
|
| - },
|
| - set(target, name, value) {
|
| - assertUnreachable();
|
| - }
|
| - });
|
| -
|
| - assertEquals([1, 1, 123, 123], Object.values(P));
|
| - assertEquals([
|
| - "[[OwnPropertyKeys]]",
|
| - "[[GetOwnProperty]](\"a\")",
|
| - "[[Get]](\"a\")",
|
| - "[[GetOwnProperty]](\"a\")",
|
| - "[[Get]](\"a\")",
|
| - "[[GetOwnProperty]](\"456\")",
|
| - "[[Get]](\"456\")",
|
| - "[[GetOwnProperty]](\"HIDDEN\")",
|
| - "[[GetOwnProperty]](\"HIDDEN\")",
|
| - "[[GetOwnProperty]](\"456\")",
|
| - "[[Get]](\"456\")",
|
| - ], log);
|
| -}
|
| -TestOrderWithDuplicates();
|
| -
|
| -
|
| -function TestPropertyFilter() {
|
| - var object = { prop3: 30 };
|
| - object[2] = 40;
|
| - object["prop4"] = 50;
|
| - Object.defineProperty(object, "prop5", { value: 60, enumerable: true });
|
| - Object.defineProperty(object, "prop6", { value: 70, enumerable: false });
|
| - Object.defineProperty(object, "prop7", {
|
| - enumerable: true, get() { return 80; }});
|
| - var sym = Symbol("prop8");
|
| - object[sym] = 90;
|
| -
|
| - values = Object.values(object);
|
| - assertEquals(5, values.length);
|
| - assertEquals([40,30,50,60,80], values);
|
| -}
|
| -TestPropertyFilter();
|
| -
|
| -
|
| -function TestWithProxy() {
|
| - var obj1 = {prop1:10};
|
| - var proxy1 = new Proxy(obj1, { });
|
| - assertEquals([10], Object.values(proxy1));
|
| -
|
| - var obj2 = {};
|
| - Object.defineProperty(obj2, "prop2", { value: 20, enumerable: true });
|
| - Object.defineProperty(obj2, "prop3", {
|
| - get() { return 30; }, enumerable: true });
|
| - var proxy2 = new Proxy(obj2, {
|
| - getOwnPropertyDescriptor(target, name) {
|
| - return Reflect.getOwnPropertyDescriptor(target, name);
|
| - }
|
| - });
|
| - assertEquals([20, 30], Object.values(proxy2));
|
| -
|
| - var obj3 = {};
|
| - var count = 0;
|
| - var proxy3 = new Proxy(obj3, {
|
| - get(target, property, receiver) {
|
| - return count++ * 5;
|
| - },
|
| - getOwnPropertyDescriptor(target, property) {
|
| - return { configurable: true, enumerable: true };
|
| - },
|
| - ownKeys(target) {
|
| - return [ "prop0", "prop1", Symbol("prop2"), Symbol("prop5") ];
|
| - }
|
| - });
|
| - assertEquals([0, 5], Object.values(proxy3));
|
| -}
|
| -TestWithProxy();
|
| -
|
| -
|
| -function TestMutateDuringEnumeration() {
|
| - var aDeletesB = {
|
| - get a() {
|
| - delete this.b;
|
| - return 1;
|
| - },
|
| - b: 2
|
| - };
|
| - assertEquals([1], Object.values(aDeletesB));
|
| -
|
| - var aRemovesB = {
|
| - get a() {
|
| - Object.defineProperty(this, "b", { enumerable: false });
|
| - return 1;
|
| - },
|
| - b: 2
|
| - };
|
| - assertEquals([1], Object.values(aRemovesB));
|
| -
|
| - var aAddsB = { get a() { this.b = 2; return 1; } };
|
| - assertEquals([1], Object.values(aAddsB));
|
| -
|
| - var aMakesBEnumerable = {};
|
| - Object.defineProperty(aMakesBEnumerable, "a", {
|
| - get() {
|
| - Object.defineProperty(this, "b", { enumerable: true });
|
| - return 1;
|
| - },
|
| - enumerable: true
|
| - });
|
| - Object.defineProperty(aMakesBEnumerable, "b", {
|
| - value: 2, configurable:true, enumerable: false });
|
| - assertEquals([1, 2], Object.values(aMakesBEnumerable));
|
| -}
|
| -TestMutateDuringEnumeration();
|
| -
|
| -
|
| -(function TestElementKinds() {
|
| - var O1 = { name: "1" }, O2 = { name: "2" }, O3 = { name: "3" };
|
| - var PI = 3.141592653589793;
|
| - var E = 2.718281828459045;
|
| - function fastSloppyArguments(a, b, c) {
|
| - delete arguments[0];
|
| - arguments[0] = a;
|
| - return arguments;
|
| - }
|
| -
|
| - function slowSloppyArguments(a, b, c) {
|
| - delete arguments[0];
|
| - arguments[0] = a;
|
| - Object.defineProperties(arguments, {
|
| - 0: {
|
| - enumerable: true,
|
| - value: a
|
| - },
|
| - 9999: {
|
| - enumerable: false,
|
| - value: "Y"
|
| - }
|
| - });
|
| - arguments[10000] = "X";
|
| - return arguments;
|
| - }
|
| -
|
| - var element_kinds = {
|
| - FAST_SMI_ELEMENTS: [ [1, 2, 3], [1, 2, 3] ],
|
| - FAST_HOLEY_SMI_ELEMENTS: [ [, , 3], [ 3 ] ],
|
| - FAST_ELEMENTS: [ [O1, O2, O3], [O1, O2, O3] ],
|
| - FAST_HOLEY_ELEMENTS: [ [, , O3], [O3] ],
|
| - FAST_DOUBLE_ELEMENTS: [ [E, NaN, PI], [E, NaN, PI] ],
|
| - FAST_HOLEY_DOUBLE_ELEMENTS: [ [, , NaN], [NaN] ],
|
| -
|
| - DICTIONARY_ELEMENTS: [ Object.defineProperties({ 10000: "world" }, {
|
| - 100: { enumerable: true, value: "hello" },
|
| - 99: { enumerable: false, value: "nope" }
|
| - }), [ "hello", "world" ] ],
|
| - FAST_SLOPPY_ARGUMENTS_ELEMENTS: [
|
| - fastSloppyArguments("a", "b", "c"), ["a", "b", "c"] ],
|
| - SLOW_SLOPPY_ARGUMENTS_ELEMENTS: [
|
| - slowSloppyArguments("a", "b", "c"), [ "a", "b", "c", "X"]],
|
| -
|
| - FAST_STRING_WRAPPER_ELEMENTS: [ new String("str"), ["s", "t", "r"] ],
|
| - SLOW_STRING_WRAPPER_ELEMENTS: [
|
| - Object.defineProperties(new String("str"), {
|
| - 10000: { enumerable: false, value: "X" },
|
| - 9999: { enumerable: true, value: "Y" }
|
| - }), ["s", "t", "r", "Y"] ],
|
| - };
|
| -
|
| - for (let [kind, [object, expected]] of Object.entries(element_kinds)) {
|
| - let result1 = Object.values(object);
|
| - assertEquals(expected, result1, `fast Object.values() with ${kind}`);
|
| -
|
| - let proxy = new Proxy(object, {});
|
| - let result2 = Object.values(proxy);
|
| - assertEquals(result1, result2, `slow Object.values() with ${kind}`);
|
| - }
|
| -})();
|
|
|