Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Side by Side Diff: test/mjsunit/harmony/object-values.js

Issue 1637753004: [es7] refactor and fix Object.values() / Object.entries() (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: keepin it fresh Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« src/objects.cc ('K') | « test/mjsunit/harmony/object-entries.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --harmony-object-values-entries --harmony-proxies --harmony-reflect 5 // Flags: --harmony-object-values-entries --harmony-proxies --harmony-reflect
6 // Flags: --allow-natives-syntax
6 7
7 function TestMeta() { 8 function TestMeta() {
8 assertEquals(1, Object.values.length); 9 assertEquals(1, Object.values.length);
9 assertEquals(Function.prototype, Object.getPrototypeOf(Object.values)); 10 assertEquals(Function.prototype, Object.getPrototypeOf(Object.values));
11 assertEquals("values", Object.values.name);
12
13 var descriptor = Object.getOwnPropertyDescriptor(Object, "values");
14 assertTrue(descriptor.writable);
15 assertFalse(descriptor.enumerable);
16 assertTrue(descriptor.configurable);
17
18 assertThrows(() => new Object.values({}), TypeError);
10 } 19 }
11 TestMeta(); 20 TestMeta();
12 21
13 22
14 function TestBasic() { 23 function TestBasic() {
15 var x = 16; 24 var x = 16;
16 var O = { 25 var O = {
17 d: 1, 26 d: 1,
18 c: 3, 27 c: 3,
19 [Symbol.iterator]: void 0, 28 [Symbol.iterator]: void 0,
20 0: 123, 29 0: 123,
21 1000: 456, 30 1000: 456,
22 [x * x]: "ducks", 31 [x * x]: "ducks",
23 [`0x${(x * x).toString(16)}`]: "quack" 32 [`0x${(x * x).toString(16)}`]: "quack"
24 }; 33 };
25 O.a = 2; 34 O.a = 2;
26 O.b = 4; 35 O.b = 4;
27 Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN }); 36 Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN });
28 assertEquals([123, "ducks", 456, 1, 3, "quack", 2, 4], Object.values(O)); 37 assertEquals([123, "ducks", 456, 1, 3, "quack", 2, 4], Object.values(O));
29 assertEquals(Object.values(O), Object.keys(O).map(key => O[key])); 38 assertEquals(Object.values(O), Object.keys(O).map(key => O[key]));
39
40 assertTrue(Array.isArray(Object.values({})));
41 assertEquals(0, Object.values({}).length);
30 } 42 }
31 TestBasic(); 43 TestBasic();
32 44
33 45
46 function TestToObject() {
47 assertThrows(function() { Object.values(); }, TypeError);
48 assertThrows(function() { Object.values(null); }, TypeError);
49 assertThrows(function() { Object.values(void 0); }, TypeError);
50 }
51 TestToObject();
52
53
34 function TestOrder() { 54 function TestOrder() {
35 var O = { 55 var O = {
36 a: 1, 56 a: 1,
37 [Symbol.iterator]: null 57 [Symbol.iterator]: null
38 }; 58 };
39 O[456] = 123; 59 O[456] = 123;
40 Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN }); 60 Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN });
61 var priv = %CreatePrivateSymbol("Secret");
62 O[priv] = 56;
41 63
42 var log = []; 64 var log = [];
43 var P = new Proxy(O, { 65 var P = new Proxy(O, {
44 ownKeys(target) { 66 ownKeys(target) {
45 log.push("[[OwnPropertyKeys]]"); 67 log.push("[[OwnPropertyKeys]]");
46 return Reflect.ownKeys(target); 68 return Reflect.ownKeys(target);
47 }, 69 },
48 get(target, name) { 70 get(target, name) {
49 log.push(`[[Get]](${JSON.stringify(name)})`); 71 log.push(`[[Get]](${JSON.stringify(name)})`);
50 return Reflect.get(target, name); 72 return Reflect.get(target, name);
51 }, 73 },
74 getOwnPropertyDescriptor(target, name) {
75 log.push(`[[GetOwnProperty]](${JSON.stringify(name)})`);
76 return Reflect.getOwnPropertyDescriptor(target, name);
77 },
52 set(target, name, value) { 78 set(target, name, value) {
53 assertUnreachable(); 79 assertUnreachable();
54 } 80 }
55 }); 81 });
56 82
57 assertEquals([123, 1], Object.values(P)); 83 assertEquals([123, 1], Object.values(P));
58 assertEquals([ 84 assertEquals([
59 "[[OwnPropertyKeys]]", 85 "[[OwnPropertyKeys]]",
86 "[[GetOwnProperty]](\"456\")",
60 "[[Get]](\"456\")", 87 "[[Get]](\"456\")",
61 "[[Get]](\"a\")" 88 "[[GetOwnProperty]](\"a\")",
89 "[[Get]](\"a\")",
90 "[[GetOwnProperty]](\"HIDDEN\")"
62 ], log); 91 ], log);
63 } 92 }
64 TestOrder(); 93 TestOrder();
94
95
96 function TestPropertyFilter() {
97 var object = { prop3: 30 };
98 object[2] = 40;
99 object["prop4"] = 50;
100 Object.defineProperty(object, "prop5", { value: 60, enumerable: true });
101 Object.defineProperty(object, "prop6", { value: 70, enumerable: false });
102 Object.defineProperty(object, "prop7", {
103 enumerable: true, get() { return 80; }});
104 var sym = Symbol("prop8");
105 object[sym] = 90;
106
107 values = Object.values(object);
108 assertEquals(5, values.length);
109 assertEquals([40,30,50,60,80], values);
110 }
111 TestPropertyFilter();
112
113
114 function TestWithProxy() {
115 var obj1 = {prop1:10};
116 var proxy1 = new Proxy(obj1, { });
117 assertEquals([10], Object.values(proxy1));
118
119 var obj2 = {};
120 Object.defineProperty(obj2, "prop2", { value: 20, enumerable: true });
121 Object.defineProperty(obj2, "prop3", {
122 get() { return 30; }, enumerable: true });
123 var proxy2 = new Proxy(obj2, {
124 getOwnPropertyDescriptor(target, name) {
125 return Reflect.getOwnPropertyDescriptor(target, name);
126 }
127 });
128 assertEquals([20, 30], Object.values(proxy2));
129
130 var obj3 = {};
131 var count = 0;
132 var proxy3 = new Proxy(obj3, {
133 get(target, property, receiver) {
134 return count++ * 5;
135 },
136 getOwnPropertyDescriptor(target, property) {
137 return { configurable: true, enumerable: true };
138 },
139 ownKeys(target) {
140 return [ "prop0", "prop1", Symbol("prop2"), Symbol("prop5") ];
141 }
142 });
143 assertEquals([0, 5], Object.values(proxy3));
144 }
145 TestWithProxy();
146
147
148 function TestMutateDuringEnumeration() {
149 var aDeletesB = {
150 get a() {
151 delete this.b;
152 return 1;
153 },
154 b: 2
155 };
156 assertEquals([1], Object.values(aDeletesB));
157
158 var aRemovesB = {
159 get a() {
160 Object.defineProperty(this, "b", { enumerable: false });
161 return 1;
162 },
163 b: 2
164 };
165 assertEquals([1], Object.values(aRemovesB));
166
167 var aAddsB = { get a() { this.b = 2; return 1; } };
168 assertEquals([1], Object.values(aAddsB));
169
170 var aMakesBEnumerable = {};
171 Object.defineProperty(aMakesBEnumerable, "a", {
172 get() {
173 Object.defineProperty(this, "b", { enumerable: true });
174 return 1;
175 },
176 enumerable: true
177 });
178 Object.defineProperty(aMakesBEnumerable, "b", {
179 value: 2, configurable:true, enumerable: false });
180 assertEquals([1, 2], Object.values(aMakesBEnumerable));
181 }
182 TestMutateDuringEnumeration();
OLDNEW
« src/objects.cc ('K') | « test/mjsunit/harmony/object-entries.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698