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

Side by Side Diff: test/mjsunit/harmony/object-entries.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
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.entries.length); 9 assertEquals(1, Object.entries.length);
9 assertEquals(Function.prototype, Object.getPrototypeOf(Object.entries)); 10 assertEquals(Function.prototype, Object.getPrototypeOf(Object.entries));
11 assertEquals("entries", Object.entries.name);
12
13 var descriptor = Object.getOwnPropertyDescriptor(Object, "entries");
14 assertTrue(descriptor.writable);
15 assertFalse(descriptor.enumerable);
16 assertTrue(descriptor.configurable);
17
18 assertThrows(() => new Object.entries({}), 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([ 37 assertEquals([
29 ["0", 123], 38 ["0", 123],
30 ["256", "ducks"], 39 ["256", "ducks"],
31 ["1000", 456], 40 ["1000", 456],
32 ["d", 1], 41 ["d", 1],
33 ["c", 3], 42 ["c", 3],
34 ["0x100", "quack"], 43 ["0x100", "quack"],
35 ["a", 2], 44 ["a", 2],
36 ["b", 4] 45 ["b", 4]
37 ], Object.entries(O)); 46 ], Object.entries(O));
38 assertEquals(Object.entries(O), Object.keys(O).map(key => [key, O[key]])); 47 assertEquals(Object.entries(O), Object.keys(O).map(key => [key, O[key]]));
48
49 assertTrue(Array.isArray(Object.entries({})));
50 assertEquals(0, Object.entries({}).length);
39 } 51 }
40 TestBasic(); 52 TestBasic();
41 53
42 54
55 function TestToObject() {
56 assertThrows(function() { Object.entries(); }, TypeError);
57 assertThrows(function() { Object.entries(null); }, TypeError);
58 assertThrows(function() { Object.entries(void 0); }, TypeError);
59 }
60 TestToObject();
61
62
43 function TestOrder() { 63 function TestOrder() {
44 var O = { 64 var O = {
45 a: 1, 65 a: 1,
46 [Symbol.iterator]: null 66 [Symbol.iterator]: null
47 }; 67 };
48 O[456] = 123; 68 O[456] = 123;
49 Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN }); 69 Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN });
70 var priv = %CreatePrivateSymbol("Secret");
71 O[priv] = 56;
50 72
51 var log = []; 73 var log = [];
52 var P = new Proxy(O, { 74 var P = new Proxy(O, {
53 ownKeys(target) { 75 ownKeys(target) {
54 log.push("[[OwnPropertyKeys]]"); 76 log.push("[[OwnPropertyKeys]]");
55 return Reflect.ownKeys(target); 77 return Reflect.ownKeys(target);
56 }, 78 },
57 get(target, name) { 79 get(target, name) {
58 log.push(`[[Get]](${JSON.stringify(name)})`); 80 log.push(`[[Get]](${JSON.stringify(name)})`);
59 return Reflect.get(target, name); 81 return Reflect.get(target, name);
60 }, 82 },
83 getOwnPropertyDescriptor(target, name) {
84 log.push(`[[GetOwnProperty]](${JSON.stringify(name)})`);
85 return Reflect.getOwnPropertyDescriptor(target, name);
86 },
61 set(target, name, value) { 87 set(target, name, value) {
62 assertUnreachable(); 88 assertUnreachable();
63 } 89 }
64 }); 90 });
65 91
66 assertEquals([["456", 123], ["a", 1]], Object.entries(P)); 92 assertEquals([["456", 123], ["a", 1]], Object.entries(P));
67 assertEquals([ 93 assertEquals([
68 "[[OwnPropertyKeys]]", 94 "[[OwnPropertyKeys]]",
95 "[[GetOwnProperty]](\"456\")",
69 "[[Get]](\"456\")", 96 "[[Get]](\"456\")",
70 "[[Get]](\"a\")" 97 "[[GetOwnProperty]](\"a\")",
98 "[[Get]](\"a\")",
99 "[[GetOwnProperty]](\"HIDDEN\")"
71 ], log); 100 ], log);
72 } 101 }
73 TestOrder(); 102 TestOrder();
103
104
105 function TestPropertyFilter() {
106 var object = { prop3: 30 };
107 object[2] = 40;
108 object["prop4"] = 50;
109 Object.defineProperty(object, "prop5", { value: 60, enumerable: true });
110 Object.defineProperty(object, "prop6", { value: 70, enumerable: false });
111 Object.defineProperty(object, "prop7", {
112 enumerable: true, get() { return 80; }});
113 var sym = Symbol("prop8");
114 object[sym] = 90;
115
116 values = Object.entries(object);
117 assertEquals(5, values.length);
118 assertEquals([
119 [ "2", 40 ],
120 [ "prop3", 30 ],
121 [ "prop4", 50 ],
122 [ "prop5", 60 ],
123 [ "prop7", 80 ]
124 ], values);
125 }
126 TestPropertyFilter();
127
128
129 function TestWithProxy() {
130 var obj1 = {prop1:10};
131 var proxy1 = new Proxy(obj1, { });
132 assertEquals([ [ "prop1", 10 ] ], Object.entries(proxy1));
133
134 var obj2 = {};
135 Object.defineProperty(obj2, "prop2", { value: 20, enumerable: true });
136 Object.defineProperty(obj2, "prop3", {
137 get() { return 30; }, enumerable: true });
138 var proxy2 = new Proxy(obj2, {
139 getOwnPropertyDescriptor(target, name) {
140 return Reflect.getOwnPropertyDescriptor(target, name);
141 }
142 });
143 assertEquals([ [ "prop2", 20 ], [ "prop3", 30 ] ], Object.entries(proxy2));
144
145 var obj3 = {};
146 var count = 0;
147 var proxy3 = new Proxy(obj3, {
148 get(target, property, receiver) {
149 return count++ * 5;
150 },
151 getOwnPropertyDescriptor(target, property) {
152 return { configurable: true, enumerable: true };
153 },
154 ownKeys(target) {
155 return [ "prop0", "prop1", Symbol("prop2"), Symbol("prop5") ];
156 }
157 });
158 assertEquals([ [ "prop0", 0 ], [ "prop1", 5 ] ], Object.entries(proxy3));
159 }
160 TestWithProxy();
161
162
163 function TestMutateDuringEnumeration() {
164 var aDeletesB = {
165 get a() {
166 delete this.b;
167 return 1;
168 },
169 b: 2
170 };
171 assertEquals([ [ "a", 1 ] ], Object.entries(aDeletesB));
172
173 var aRemovesB = {
174 get a() {
175 Object.defineProperty(this, "b", { enumerable: false });
176 return 1;
177 },
178 b: 2
179 };
180 assertEquals([ [ "a", 1 ] ], Object.entries(aRemovesB));
181
182 var aAddsB = { get a() { this.b = 2; return 1; } };
183 assertEquals([ [ "a", 1 ] ], Object.entries(aAddsB));
184
185 var aMakesBEnumerable = {};
186 Object.defineProperty(aMakesBEnumerable, "a", {
187 get() {
188 Object.defineProperty(this, "b", { enumerable: true });
189 return 1;
190 },
191 enumerable: true
192 });
193 Object.defineProperty(aMakesBEnumerable, "b", {
194 value: 2, configurable:true, enumerable: false });
195 assertEquals([ [ "a", 1 ], [ "b", 2 ] ], Object.entries(aMakesBEnumerable));
196 }
197 TestMutateDuringEnumeration();
OLDNEW
« src/objects.cc ('K') | « src/objects-inl.h ('k') | test/mjsunit/harmony/object-values.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698