1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Flags: --harmony-computed-property-names
14 (function TestBasicsString() {
21 assertEquals('A', object.a);
22 assertEquals('B', object.b);
23 assertEquals('C', object.c);
24 assertEquals('D', object.d);
25 assertArrayEquals(['a', 'b', 'c', 'd'], Object.keys(object));
29 (function TestBasicsNumber() {
36 assertEquals('A', object.a);
37 assertEquals('B', object[1]);
38 assertEquals('C', object.c);
39 assertEquals('D', object[2]);
40 // Array indexes first.
41 assertArrayEquals(['1', '2', 'a', 'c'], Object.keys(object));
45 (function TestBasicsSymbol() {
54 assertEquals('A', object.a);
55 assertEquals('B', object[sym1]);
56 assertEquals('C', object.c);
57 assertEquals('D', object[sym2]);
58 assertArrayEquals(['a', 'c'], Object.keys(object));
59 assertArrayEquals([sym1, sym2], Object.getOwnPropertySymbols(object));
63 (function TestToNameSideEffects() {
66 toString: function() {
67 assertEquals(0, counter++);
72 toString: function() {
73 assertEquals(1, counter++);
83 assertEquals(2, counter);
84 assertEquals('A', object.a);
85 assertEquals('B', object.b);
86 assertEquals('C', object.c);
87 assertEquals('D', object.d);
88 assertArrayEquals(['a', 'b', 'c', 'd'], Object.keys(object));
92 (function TestToNameSideEffectsNumbers() {
96 assertEquals(0, counter++);
102 valueOf: function() {
103 assertEquals(1, counter++);
115 assertEquals(2, counter);
116 assertEquals('A', object.a);
117 assertEquals('B', object[1]);
118 assertEquals('C', object.c);
119 assertEquals('D', object[2]);
120 // Array indexes first.
121 assertArrayEquals(['1', '2', 'a', 'c'], Object.keys(object));
125 (function TestDoubleName() {
131 // TODO(arv): https://code.google.com/p/v8/issues/detail?id=3815
136 assertEquals('A', object['1.2']);
137 assertEquals('B', object['1e+55']);
138 assertEquals('C', object['0.000001']);
139 assertEquals('D', object[0]);
140 // TODO(arv): https://code.google.com/p/v8/issues/detail?id=3815
141 // assertEquals('E', object[Infinity]);
142 // assertEquals('F', object[-Infinity]);
143 assertEquals('G', object[NaN]);
147 (function TestGetter() {
153 assertEquals('A', object.a);
163 assertEquals('B', object.b);
176 assertEquals('C', object.c);
186 assertEquals('D', object.d);
190 (function TestSetter() {
198 assertEquals(1, calls);
210 assertEquals(1, calls);
225 assertEquals(1, calls);
237 assertEquals(1, calls);
241 (function TestDuplicateKeys() {
243 // ES5 does not allow duplicate keys.
244 // ES6 does but we haven't changed our code yet.
250 assertEquals(2, object.a);
254 (function TestProto() {
259 assertEquals(proto, Object.getPrototypeOf(object));
264 assertEquals(proto, Object.getPrototypeOf(object));
269 assertEquals(Object.prototype, Object.getPrototypeOf(object));
270 assertEquals(proto, object.__proto__);
271 assertTrue(object.hasOwnProperty('__proto__'));
277 assertEquals('X', object.x);
278 assertEquals(proto, Object.getPrototypeOf(object));
282 (function TestExceptionInName() {
283 function MyError() {};
284 function throwMyError() {
287 assertThrows(function() {
292 assertThrows(function() {
294 get [throwMyError()]() { return 42; }
297 assertThrows(function() {
299 set [throwMyError()](_) { }