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)); |
+})(); |