| Index: test/mjsunit/harmony/computed-property-names.js
|
| diff --git a/test/mjsunit/harmony/computed-property-names.js b/test/mjsunit/harmony/computed-property-names.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a942eb3bf4a1982bc9bb699b13b8b2c7ca2c97d6
|
| --- /dev/null
|
| +++ b/test/mjsunit/harmony/computed-property-names.js
|
| @@ -0,0 +1,116 @@
|
| +// Copyright 2014 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-computed-property-names --allow-natives-syntax
|
| +
|
| +
|
| +(function TestBasicsString() {
|
| + var object = {
|
| + a: 'A',
|
| + ['b']: 'B',
|
| + c: 'C',
|
| + ['d']: 'D',
|
| + };
|
| + assertEquals('A', object.a);
|
| + assertEquals('B', object.b);
|
| + assertEquals('C', object.c);
|
| + assertEquals('D', object.d);
|
| + assertArrayEquals(['a', 'b', 'c', 'd'], Object.keys(object));
|
| +})();
|
| +
|
| +
|
| +(function TestBasicsNumber() {
|
| + var object = {
|
| + a: 'A',
|
| + [1]: 'B',
|
| + c: 'C',
|
| + [2]: 'D',
|
| + };
|
| + assertEquals('A', object.a);
|
| + assertEquals('B', object[1]);
|
| + assertEquals('C', object.c);
|
| + assertEquals('D', object[2]);
|
| + // Array indexes first.
|
| + assertArrayEquals(['1', '2', 'a', 'c'], Object.keys(object));
|
| +})();
|
| +
|
| +
|
| +(function TestBasicsSymbol() {
|
| + var sym = Symbol();
|
| + var sym2 = Symbol();
|
| + var object = {
|
| + a: 'A',
|
| + [sym]: 'B',
|
| + c: 'C',
|
| + [sym2]: 'D',
|
| + };
|
| + assertEquals('A', object.a);
|
| + assertEquals('B', object[sym]);
|
| + assertEquals('C', object.c);
|
| + assertEquals('D', object[sym2]);
|
| + assertArrayEquals(['a', 'c'], Object.keys(object));
|
| + assertArrayEquals([sym, sym2], Object.getOwnPropertySymbols(object));
|
| +})();
|
| +
|
| +
|
| +(function TestToNameSideEffects() {
|
| + var counter = 0;
|
| + var key1 = {
|
| + toString: function() {
|
| + assertEquals(0, counter++);
|
| + return 'b';
|
| + }
|
| + };
|
| + var key2 = {
|
| + toString: function() {
|
| + assertEquals(1, counter++);
|
| + return 'd';
|
| + }
|
| + };
|
| + var object = {
|
| + a: 'A',
|
| + [key1]: 'B',
|
| + c: 'C',
|
| + [key2]: 'D',
|
| + };
|
| + assertEquals(2, counter);
|
| + assertEquals('A', object.a);
|
| + assertEquals('B', object.b);
|
| + assertEquals('C', object.c);
|
| + assertEquals('D', object.d);
|
| + assertArrayEquals(['a', 'b', 'c', 'd'], Object.keys(object));
|
| +})();
|
| +
|
| +
|
| +(function TestToNameSideEffects2() {
|
| + var counter = 0;
|
| + var key1 = {
|
| + valueOf: function() {
|
| + assertEquals(0, counter++);
|
| + return 1;
|
| + },
|
| + toString: null
|
| + };
|
| + var key2 = {
|
| + valueOf: function() {
|
| + assertEquals(1, counter++);
|
| + return 2;
|
| + },
|
| + toString: null
|
| + };
|
| +
|
| + var object = {
|
| + a: 'A',
|
| + [key1]: 'B',
|
| + c: 'C',
|
| + [key2]: 'D',
|
| + };
|
| + assertEquals(2, counter);
|
| + assertEquals('A', object.a);
|
| + assertEquals('B', object[1]);
|
| + assertEquals('C', object.c);
|
| + assertEquals('D', object[2]);
|
| + // Array indexes first.
|
| + assertArrayEquals(['1', '2', 'a', 'c'], Object.keys(object));
|
| +})();
|
|
|