summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/computed-property-names/class
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/language/computed-property-names/class')
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/accessor/browser.js0
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/accessor/getter-duplicates.js49
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/accessor/getter.js15
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/accessor/setter-duplicates.js57
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/accessor/setter.js17
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/accessor/shell.js0
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/browser.js0
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/browser.js0
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-generator.js12
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-getter.js12
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-setter.js12
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-1.js13
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-2.js13
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-3.js13
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/constructor.js19
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/generator.js25
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/number.js32
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/shell.js0
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/string.js30
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/method/symbol.js37
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/shell.js0
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/browser.js0
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/generator-constructor.js13
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/generator-prototype.js15
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/getter-constructor.js13
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/getter-prototype.js15
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/method-constructor.js13
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/method-number-order.js70
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/method-number.js74
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/method-prototype.js16
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/method-string-order.js70
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/method-string.js74
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/method-symbol-order.js81
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/method-symbol.js81
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/setter-constructor.js13
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/setter-prototype.js16
-rw-r--r--js/src/tests/test262/language/computed-property-names/class/static/shell.js0
37 files changed, 920 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/computed-property-names/class/accessor/browser.js b/js/src/tests/test262/language/computed-property-names/class/accessor/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/accessor/browser.js
diff --git a/js/src/tests/test262/language/computed-property-names/class/accessor/getter-duplicates.js b/js/src/tests/test262/language/computed-property-names/class/accessor/getter-duplicates.js
new file mode 100644
index 0000000000..9cc193b0e8
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/accessor/getter-duplicates.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ In a class, duplicate computed property getter names produce only a single property of
+ that name, whose value is the value of the last property of that name.
+---*/
+class C {
+ get ['a']() {
+ return 'A';
+ }
+}
+assert.sameValue(new C().a, 'A', "The value of `new C().a` is `'A'`");
+
+class C2 {
+ get b() {
+ throw new Test262Error("The first `b` getter definition in `C2` is unreachable");
+ }
+ get ['b']() {
+ return 'B';
+ }
+}
+assert.sameValue(new C2().b, 'B', "The value of `new C2().b` is `'B'`");
+
+class C3 {
+ get c() {
+ throw new Test262Error("The first `c` getter definition in `C3` is unreachable");
+ }
+ get ['c']() {
+ throw new Test262Error("The second `c` getter definition in `C3` is unreachable");
+ }
+ get ['c']() {
+ return 'C';
+ }
+}
+assert.sameValue(new C3().c, 'C', "The value of `new C3().c` is `'C'`");
+
+class C4 {
+ get ['d']() {
+ throw new Test262Error("The first `d` getter definition in `C4` is unreachable");
+ }
+ get d() {
+ return 'D';
+ }
+}
+assert.sameValue(new C4().d, 'D', "The value of `new C4().d` is `'D'`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/accessor/getter.js b/js/src/tests/test262/language/computed-property-names/class/accessor/getter.js
new file mode 100644
index 0000000000..a00fba0aa3
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/accessor/getter.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ Computed property names for getters
+---*/
+class C {
+ get ['a']() {
+ return 'A';
+ }
+}
+assert.sameValue(new C().a, 'A', "The value of `new C().a` is `'A'`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/accessor/setter-duplicates.js b/js/src/tests/test262/language/computed-property-names/class/accessor/setter-duplicates.js
new file mode 100644
index 0000000000..f42801874e
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/accessor/setter-duplicates.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ In a class, duplicate computed property setter names produce only a single property of
+ that name, whose value is the value of the last property of that name.
+---*/
+var calls = 0;
+class C {
+ set ['a'](_) {
+ calls++;
+ }
+}
+new C().a = 'A';
+assert.sameValue(calls, 1, "The value of `calls` is `1`, after executing `new C().a = 'A';`");
+
+calls = 0;
+class C2 {
+ set b(_) {
+ throw new Test262Error("The first `b` setter definition in `C2` is unreachable");
+ }
+ set ['b'](_) {
+ calls++;
+ }
+}
+new C2().b = 'B';
+assert.sameValue(calls, 1, "The value of `calls` is `1`, after executing `new C2().b = 'B';`");
+
+calls = 0;
+class C3 {
+ set c(_) {
+ throw new Test262Error("The first `c` setter definition in `C3` is unreachable");
+ }
+ set ['c'](_) {
+ throw new Test262Error("The second `c` setter definition in `C3` is unreachable");
+ }
+ set ['c'](_) {
+ calls++
+ }
+}
+new C3().c = 'C';
+assert.sameValue(calls, 1, "The value of `calls` is `1`, after executing `new C3().c = 'C';`");
+
+calls = 0;
+class C4 {
+ set ['d'](_) {
+ throw new Test262Error("The first `d` setter definition in `C4` is unreachable");
+ }
+ set d(_) {
+ calls++
+ }
+}
+new C4().d = 'D';
+assert.sameValue(calls, 1, "The value of `calls` is `1`, after executing `new C4().d = 'D';`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/accessor/setter.js b/js/src/tests/test262/language/computed-property-names/class/accessor/setter.js
new file mode 100644
index 0000000000..0d1c0cc42b
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/accessor/setter.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ Computed property names for setters
+---*/
+var calls = 0;
+class C {
+ set ['a'](_) {
+ calls++;
+ }
+}
+new C().a = 'A';
+assert.sameValue(calls, 1, "The value of `calls` is `1`, after executing `new C().a = 'A';`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/accessor/shell.js b/js/src/tests/test262/language/computed-property-names/class/accessor/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/accessor/shell.js
diff --git a/js/src/tests/test262/language/computed-property-names/class/browser.js b/js/src/tests/test262/language/computed-property-names/class/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/browser.js
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/browser.js b/js/src/tests/test262/language/computed-property-names/class/method/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/browser.js
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-generator.js b/js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-generator.js
new file mode 100644
index 0000000000..61e2a36607
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-generator.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 14.5.3
+description: >
+ computed property generator method names can be called "constructor"
+---*/
+class C4 {
+ *['constructor']() {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-getter.js b/js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-getter.js
new file mode 100644
index 0000000000..aab8a295a8
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-getter.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 14.5.3
+description: >
+ computed property getter names can be called "constructor"
+---*/
+class C4 {
+ get ['constructor']() {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-setter.js b/js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-setter.js
new file mode 100644
index 0000000000..a44fd56306
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/constructor-can-be-setter.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 14.5.3
+description: >
+ computed property setter names can be called "constructor"
+---*/
+class C4 {
+ set ['constructor'](_) {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-1.js b/js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-1.js
new file mode 100644
index 0000000000..7e35a35658
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-1.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ computed property names can be "constructor"
+---*/
+class C {
+ constructor() {}
+ ['constructor']() {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-2.js b/js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-2.js
new file mode 100644
index 0000000000..9974c81deb
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-2.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ computed property names can be "constructor"
+---*/
+class C {
+ ['constructor']() {}
+ constructor() {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-3.js b/js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-3.js
new file mode 100644
index 0000000000..48db7a2bdc
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/constructor-duplicate-3.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ computed property names can be "constructor"
+---*/
+class C {
+ ['constructor']() {}
+ ['constructor']() {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/constructor.js b/js/src/tests/test262/language/computed-property-names/class/method/constructor.js
new file mode 100644
index 0000000000..7b45364ff3
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/constructor.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ computed property names can be "constructor"
+---*/
+class C {
+ ['constructor']() {
+ return 1;
+ }
+}
+assert(
+ C !== C.prototype.constructor,
+ "The result of `C !== C.prototype.constructor` is `true`"
+);
+assert.sameValue(new C().constructor(), 1, "`new C().constructor()` returns `1`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/generator.js b/js/src/tests/test262/language/computed-property-names/class/method/generator.js
new file mode 100644
index 0000000000..cfd471bc8c
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/generator.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ computed property names can be used as the name of a generator method in a class
+includes: [compareArray.js]
+---*/
+class C {
+ *['a']() {
+ yield 1;
+ yield 2;
+ }
+}
+assert.sameValue(
+ Object.keys(C.prototype).length,
+ 0,
+ "The value of `Object.keys(C.prototype).length` is `0`"
+);
+assert.compareArray(
+ Object.getOwnPropertyNames(C.prototype),
+ ['constructor', 'a']
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/number.js b/js/src/tests/test262/language/computed-property-names/class/method/number.js
new file mode 100644
index 0000000000..e9ee5e12bc
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/number.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ computed property class method names can be a number
+includes: [compareArray.js]
+---*/
+
+function ID(x) {
+ return x;
+}
+
+class C {
+ a() { return 'A'; }
+ [1]() { return 'B'; }
+ c() { return 'C'; }
+ [ID(2)]() { return 'D'; }
+}
+assert.sameValue(new C().a(), 'A', "`new C().a()` returns `'A'`, from `a() { return 'A'; }`");
+assert.sameValue(new C()[1](), 'B', "`new C()[1]()` returns `'B'`, from `[1]() { return 'B'; }`");
+assert.sameValue(new C().c(), 'C', "`new C().c()` returns `'C'`, from `c() { return 'C'; }`");
+assert.sameValue(new C()[2](), 'D', "`new C()[2]()` returns `'D'`, from `[ID(2)]() { return 'D'; }`");
+
+assert.sameValue(Object.keys(C.prototype).length, 0, "No enum keys from C.prototype");
+
+assert.compareArray(
+ Object.getOwnPropertyNames(C.prototype),
+ ['1', '2', 'constructor', 'a', 'c']
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/shell.js b/js/src/tests/test262/language/computed-property-names/class/method/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/shell.js
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/string.js b/js/src/tests/test262/language/computed-property-names/class/method/string.js
new file mode 100644
index 0000000000..c152bc6c03
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/string.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ computed property class method names can be a string
+includes: [compareArray.js]
+---*/
+
+function ID(x) {
+ return x;
+}
+
+class C {
+ a() { return 'A'}
+ ['b']() { return 'B'; }
+ c() { return 'C'; }
+ [ID('d')]() { return 'D'; }
+}
+assert.sameValue(new C().a(), 'A', "`new C().a()` returns `'A'`. Defined as `a() { return 'A'}`");
+assert.sameValue(new C().b(), 'B', "`new C().b()` returns `'B'`. Defined as `['b']() { return 'B'; }`");
+assert.sameValue(new C().c(), 'C', "`new C().c()` returns `'C'`. Defined as `c() { return 'C'; }`");
+assert.sameValue(new C().d(), 'D', "`new C().d()` returns `'D'`. Defined as `[ID('d')]() { return 'D'; }`");
+assert.sameValue(Object.keys(C.prototype).length, 0, "No enum keys from C.prototype");
+assert.compareArray(
+ Object.getOwnPropertyNames(C.prototype),
+ ['constructor', 'a', 'b', 'c', 'd']
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/method/symbol.js b/js/src/tests/test262/language/computed-property-names/class/method/symbol.js
new file mode 100644
index 0000000000..07bac0c9cd
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/method/symbol.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ computed property class method names can be a symbol
+includes: [compareArray.js]
+features: [Symbol]
+---*/
+
+function ID(x) {
+ return x;
+}
+
+var sym1 = Symbol();
+var sym2 = Symbol();
+class C {
+ a() { return 'A'; }
+ [sym1]() { return 'B'; }
+ c() { return 'C'; }
+ [ID(sym2)]() { return 'D'; }
+}
+assert.sameValue(new C().a(), 'A', "`new C().a()` returns `'A'`. Defined as `a() { return 'A'; }`");
+assert.sameValue(new C()[sym1](), 'B', "`new C()[sym1]()` returns `'B'`. Defined as `[sym1]() { return 'B'; }`");
+assert.sameValue(new C().c(), 'C', "`new C().c()` returns `'C'`. Defined as `c() { return 'C'; }`");
+assert.sameValue(new C()[sym2](), 'D', "`new C()[sym2]()` returns `'D'`. Defined as `[ID(sym2)]() { return 'D'; }`");
+assert.sameValue(Object.keys(C.prototype).length, 0, "No enum keys from C.prototype");
+assert.compareArray(
+ Object.getOwnPropertyNames(C.prototype),
+ ['constructor', 'a', 'c']
+);
+assert.compareArray(
+ Object.getOwnPropertySymbols(C.prototype),
+ [sym1, sym2]
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/shell.js b/js/src/tests/test262/language/computed-property-names/class/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/shell.js
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/browser.js b/js/src/tests/test262/language/computed-property-names/class/static/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/browser.js
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/generator-constructor.js b/js/src/tests/test262/language/computed-property-names/class/static/generator-constructor.js
new file mode 100644
index 0000000000..ce81441d1a
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/generator-constructor.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ In a class, computed property names for static
+ generators can be named "constructor"
+---*/
+class C {
+ static *['constructor']() {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/generator-prototype.js b/js/src/tests/test262/language/computed-property-names/class/static/generator-prototype.js
new file mode 100644
index 0000000000..7c3924caba
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/generator-prototype.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 14.5.14
+description: >
+ In a class, computed property names for static
+ generators that are named "prototype" throw a TypeError
+---*/
+assert.throws(TypeError, function() {
+ class C {
+ static *['prototype']() {}
+ }
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/getter-constructor.js b/js/src/tests/test262/language/computed-property-names/class/static/getter-constructor.js
new file mode 100644
index 0000000000..7a12e11a55
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/getter-constructor.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ In a class, computed property names for static
+ getters can be named "constructor"
+---*/
+class C {
+ static get ['constructor']() {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/getter-prototype.js b/js/src/tests/test262/language/computed-property-names/class/static/getter-prototype.js
new file mode 100644
index 0000000000..6f149b09dc
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/getter-prototype.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 14.5.14
+description: >
+ In a class, computed property names for static
+ getters that are named "prototype" throw a TypeError
+---*/
+assert.throws(TypeError, function() {
+ class C {
+ static get ['prototype']() {}
+ }
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/method-constructor.js b/js/src/tests/test262/language/computed-property-names/class/static/method-constructor.js
new file mode 100644
index 0000000000..4250ccd8e5
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/method-constructor.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ In a class, computed property names for static
+ methods can be named "constructor"
+---*/
+class C {
+ static ['constructor']() {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/method-number-order.js b/js/src/tests/test262/language/computed-property-names/class/static/method-number-order.js
new file mode 100644
index 0000000000..88bf48b833
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/method-number-order.js
@@ -0,0 +1,70 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-runtime-semantics-classdefinitionevaluation
+description: >
+ In a class, static computed property method names can be a number
+info: |
+ Set order: "length", "name", "prototype", static methods
+
+ Runtime Semantics: ClassDefinitionEvaluation
+
+ ...
+ 11. Let constructorInfo be ! DefineMethod of constructor with arguments proto and constructorParent.
+ 12. Let F be constructorInfo.[[Closure]].
+ 13. Perform SetFunctionName(F, className).
+ 14. Perform MakeConstructor(F, false, proto).
+ ...
+ 19. Else, let methods be NonConstructorMethodDefinitions of ClassBody.
+ 20. For each ClassElement m in order from methods, do
+ a. If IsStatic of m is false, then
+ ...
+ b. Else,
+ i. Let status be PropertyDefinitionEvaluation of m with arguments F and false.
+ ...
+
+ ---
+
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, string).
+
+ Runtime Semantics: GetOwnPropertyKeys ( O, type )
+
+ 1. Let obj be ? ToObject(O).
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+ 3. Let nameList be a new empty List.
+ 4. For each element nextKey of keys in List order, do
+ a. If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ i. Append nextKey as the last element of nameList.
+ 5. Return CreateArrayFromList(nameList).
+
+ [[OwnPropertyKeys]] ( )
+
+ 1. Return ! OrdinaryOwnPropertyKeys(O).
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ 1. Let keys be a new empty List.
+ 2. For each own property key P of O such that P is an array index, in ascending numeric index order, do
+ a. Add P as the last element of keys.
+ 3. For each own property key P of O such that Type(P) is String and P is not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+includes: [compareArray.js]
+---*/
+
+class C {
+ static a() { return 'A'; }
+ static [1]() { return 'B'; }
+ static c() { return 'C'; }
+ static [2]() { return 'D'; }
+}
+assert.compareArray(
+ Object.getOwnPropertyNames(C),
+ ['1', '2', 'length', 'name', 'prototype', 'a', 'c']
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/method-number.js b/js/src/tests/test262/language/computed-property-names/class/static/method-number.js
new file mode 100644
index 0000000000..22e5fc593f
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/method-number.js
@@ -0,0 +1,74 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-runtime-semantics-classdefinitionevaluation
+description: >
+ In a class, static computed property method names can be a number
+info: |
+ Set order: "length", "name", "prototype", static methods
+
+ Runtime Semantics: ClassDefinitionEvaluation
+
+ ...
+ 11. Let constructorInfo be ! DefineMethod of constructor with arguments proto and constructorParent.
+ 12. Let F be constructorInfo.[[Closure]].
+ 13. Perform SetFunctionName(F, className).
+ 14. Perform MakeConstructor(F, false, proto).
+ ...
+ 19. Else, let methods be NonConstructorMethodDefinitions of ClassBody.
+ 20. For each ClassElement m in order from methods, do
+ a. If IsStatic of m is false, then
+ ...
+ b. Else,
+ i. Let status be PropertyDefinitionEvaluation of m with arguments F and false.
+ ...
+
+ ---
+
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, string).
+
+ Runtime Semantics: GetOwnPropertyKeys ( O, type )
+
+ 1. Let obj be ? ToObject(O).
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+ 3. Let nameList be a new empty List.
+ 4. For each element nextKey of keys in List order, do
+ a. If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ i. Append nextKey as the last element of nameList.
+ 5. Return CreateArrayFromList(nameList).
+
+ [[OwnPropertyKeys]] ( )
+
+ 1. Return ! OrdinaryOwnPropertyKeys(O).
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ 1. Let keys be a new empty List.
+ 2. For each own property key P of O such that P is an array index, in ascending numeric index order, do
+ a. Add P as the last element of keys.
+ 3. For each own property key P of O such that Type(P) is String and P is not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+includes: [compareArray.js]
+---*/
+
+class C {
+ static a() { return 'A'; }
+ static [1]() { return 'B'; }
+ static c() { return 'C'; }
+ static [2]() { return 'D'; }
+}
+assert.sameValue(C.a(), 'A', "`C.a()` returns `'A'`. Defined as `static a() { return 'A'; }`");
+assert.sameValue(C[1](), 'B', "`C[1]()` returns `'B'`. Defined as `static [1]() { return 'B'; }`");
+assert.sameValue(C.c(), 'C', "`C.c()` returns `'C'`. Defined as `static c() { return 'C'; }`");
+assert.sameValue(C[2](), 'D', "`C[2]()` returns `'D'`. Defined as `static [2]() { return 'D'; }`");
+assert.compareArray(
+ Object.keys(C),
+ []
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/method-prototype.js b/js/src/tests/test262/language/computed-property-names/class/static/method-prototype.js
new file mode 100644
index 0000000000..517d81ee4b
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/method-prototype.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 14.5.14
+description: >
+ In a class, computed property names for static
+ methods that are named "prototype" throw a TypeError
+---*/
+
+assert.throws(TypeError, function() {
+ class C {
+ static ['prototype']() {}
+ }
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/method-string-order.js b/js/src/tests/test262/language/computed-property-names/class/static/method-string-order.js
new file mode 100644
index 0000000000..7ac43319ab
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/method-string-order.js
@@ -0,0 +1,70 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-runtime-semantics-classdefinitionevaluation
+description: >
+ In a class, static computed property method names can be a string
+info: |
+ Set order: "length", "name", "prototype", static methods
+
+ Runtime Semantics: ClassDefinitionEvaluation
+
+ ...
+ 11. Let constructorInfo be ! DefineMethod of constructor with arguments proto and constructorParent.
+ 12. Let F be constructorInfo.[[Closure]].
+ 13. Perform SetFunctionName(F, className).
+ 14. Perform MakeConstructor(F, false, proto).
+ ...
+ 19. Else, let methods be NonConstructorMethodDefinitions of ClassBody.
+ 20. For each ClassElement m in order from methods, do
+ a. If IsStatic of m is false, then
+ ...
+ b. Else,
+ i. Let status be PropertyDefinitionEvaluation of m with arguments F and false.
+ ...
+
+ ---
+
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, string).
+
+ Runtime Semantics: GetOwnPropertyKeys ( O, type )
+
+ 1. Let obj be ? ToObject(O).
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+ 3. Let nameList be a new empty List.
+ 4. For each element nextKey of keys in List order, do
+ a. If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ i. Append nextKey as the last element of nameList.
+ 5. Return CreateArrayFromList(nameList).
+
+ [[OwnPropertyKeys]] ( )
+
+ 1. Return ! OrdinaryOwnPropertyKeys(O).
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ 1. Let keys be a new empty List.
+ 2. For each own property key P of O such that P is an array index, in ascending numeric index order, do
+ a. Add P as the last element of keys.
+ 3. For each own property key P of O such that Type(P) is String and P is not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+includes: [compareArray.js]
+---*/
+
+class C {
+ static a() { return 'A'}
+ static ['b']() { return 'B'; }
+ static c() { return 'C'; }
+ static ['d']() { return 'D'; }
+}
+assert.compareArray(
+ Object.getOwnPropertyNames(C),
+ ['length', 'name', 'prototype', 'a', 'b', 'c', 'd']
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/method-string.js b/js/src/tests/test262/language/computed-property-names/class/static/method-string.js
new file mode 100644
index 0000000000..0c0fdf8718
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/method-string.js
@@ -0,0 +1,74 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-runtime-semantics-classdefinitionevaluation
+description: >
+ In a class, static computed property method names can be a string
+info: |
+ Set order: "length", "name", "prototype", static methods
+
+ Runtime Semantics: ClassDefinitionEvaluation
+
+ ...
+ 11. Let constructorInfo be ! DefineMethod of constructor with arguments proto and constructorParent.
+ 12. Let F be constructorInfo.[[Closure]].
+ 13. Perform SetFunctionName(F, className).
+ 14. Perform MakeConstructor(F, false, proto).
+ ...
+ 19. Else, let methods be NonConstructorMethodDefinitions of ClassBody.
+ 20. For each ClassElement m in order from methods, do
+ a. If IsStatic of m is false, then
+ ...
+ b. Else,
+ i. Let status be PropertyDefinitionEvaluation of m with arguments F and false.
+ ...
+
+ ---
+
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, string).
+
+ Runtime Semantics: GetOwnPropertyKeys ( O, type )
+
+ 1. Let obj be ? ToObject(O).
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+ 3. Let nameList be a new empty List.
+ 4. For each element nextKey of keys in List order, do
+ a. If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ i. Append nextKey as the last element of nameList.
+ 5. Return CreateArrayFromList(nameList).
+
+ [[OwnPropertyKeys]] ( )
+
+ 1. Return ! OrdinaryOwnPropertyKeys(O).
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ 1. Let keys be a new empty List.
+ 2. For each own property key P of O such that P is an array index, in ascending numeric index order, do
+ a. Add P as the last element of keys.
+ 3. For each own property key P of O such that Type(P) is String and P is not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+includes: [compareArray.js]
+---*/
+
+class C {
+ static a() { return 'A'}
+ static ['b']() { return 'B'; }
+ static c() { return 'C'; }
+ static ['d']() { return 'D'; }
+}
+assert.sameValue(C.a(), 'A', "`C.a()` returns `'A'`. Defined as `static a() { return 'A'}`");
+assert.sameValue(C.b(), 'B', "`C.b()` returns `'B'`. Defined as `static ['b']() { return 'B'; }`");
+assert.sameValue(C.c(), 'C', "`C.c()` returns `'C'`. Defined as `static c() { return 'C'; }`");
+assert.sameValue(C.d(), 'D', "`C.d()` returns `'D'`. Defined as `static ['d']() { return 'D'; }`");
+assert.compareArray(
+ Object.keys(C),
+ []
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/method-symbol-order.js b/js/src/tests/test262/language/computed-property-names/class/static/method-symbol-order.js
new file mode 100644
index 0000000000..639013ed38
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/method-symbol-order.js
@@ -0,0 +1,81 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-runtime-semantics-classdefinitionevaluation
+description: >
+ In a class, static computed property method names can be a symbol
+info: |
+ Set order: "length", "name", "prototype", static methods
+
+ Runtime Semantics: ClassDefinitionEvaluation
+
+ ...
+ 11. Let constructorInfo be ! DefineMethod of constructor with arguments proto and constructorParent.
+ 12. Let F be constructorInfo.[[Closure]].
+ 13. Perform SetFunctionName(F, className).
+ 14. Perform MakeConstructor(F, false, proto).
+ ...
+ 19. Else, let methods be NonConstructorMethodDefinitions of ClassBody.
+ 20. For each ClassElement m in order from methods, do
+ a. If IsStatic of m is false, then
+ ...
+ b. Else,
+ i. Let status be PropertyDefinitionEvaluation of m with arguments F and false.
+ ...
+
+ ---
+
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, string).
+
+ Object.getOwnPropertySymbols ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, symbol).
+
+ Runtime Semantics: GetOwnPropertyKeys ( O, type )
+
+ 1. Let obj be ? ToObject(O).
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+ 3. Let nameList be a new empty List.
+ 4. For each element nextKey of keys in List order, do
+ a. If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ i. Append nextKey as the last element of nameList.
+ 5. Return CreateArrayFromList(nameList).
+
+ [[OwnPropertyKeys]] ( )
+
+ 1. Return ! OrdinaryOwnPropertyKeys(O).
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ 1. Let keys be a new empty List.
+ 2. For each own property key P of O such that P is an array index, in ascending numeric index order, do
+ a. Add P as the last element of keys.
+ 3. For each own property key P of O such that Type(P) is String and P is not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+includes: [compareArray.js]
+features: [Symbol]
+---*/
+
+var sym1 = Symbol();
+var sym2 = Symbol();
+class C {
+ static a() { return 'A'; }
+ static [sym1]() { return 'B'; }
+ static c() { return 'C'; }
+ static [sym2]() { return 'D'; }
+}
+assert.compareArray(
+ Object.getOwnPropertyNames(C),
+ ['length', 'name', 'prototype', 'a', 'c']
+);
+assert.compareArray(
+ Object.getOwnPropertySymbols(C),
+ [sym1, sym2]
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/method-symbol.js b/js/src/tests/test262/language/computed-property-names/class/static/method-symbol.js
new file mode 100644
index 0000000000..5811db0a36
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/method-symbol.js
@@ -0,0 +1,81 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-runtime-semantics-classdefinitionevaluation
+description: >
+ In a class, static computed property method names can be a symbol
+info: |
+ Set order: "length", "name", "prototype", static methods
+
+ Runtime Semantics: ClassDefinitionEvaluation
+
+ ...
+ 11. Let constructorInfo be ! DefineMethod of constructor with arguments proto and constructorParent.
+ 12. Let F be constructorInfo.[[Closure]].
+ 13. Perform SetFunctionName(F, className).
+ 14. Perform MakeConstructor(F, false, proto).
+ ...
+ 19. Else, let methods be NonConstructorMethodDefinitions of ClassBody.
+ 20. For each ClassElement m in order from methods, do
+ a. If IsStatic of m is false, then
+ ...
+ b. Else,
+ i. Let status be PropertyDefinitionEvaluation of m with arguments F and false.
+ ...
+
+ ---
+
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, string).
+
+ Object.getOwnPropertySymbols ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, symbol).
+
+ Runtime Semantics: GetOwnPropertyKeys ( O, type )
+
+ 1. Let obj be ? ToObject(O).
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+ 3. Let nameList be a new empty List.
+ 4. For each element nextKey of keys in List order, do
+ a. If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ i. Append nextKey as the last element of nameList.
+ 5. Return CreateArrayFromList(nameList).
+
+ [[OwnPropertyKeys]] ( )
+
+ 1. Return ! OrdinaryOwnPropertyKeys(O).
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ 1. Let keys be a new empty List.
+ 2. For each own property key P of O such that P is an array index, in ascending numeric index order, do
+ a. Add P as the last element of keys.
+ 3. For each own property key P of O such that Type(P) is String and P is not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+includes: [compareArray.js]
+features: [Symbol]
+---*/
+
+var sym1 = Symbol();
+var sym2 = Symbol();
+class C {
+ static a() { return 'A'; }
+ static [sym1]() { return 'B'; }
+ static c() { return 'C'; }
+ static [sym2]() { return 'D'; }
+}
+assert.sameValue(C.a(), 'A', "`C.a()` returns `'A'`. Defined as `static a() { return 'A'; }`");
+assert.sameValue(C[sym1](), 'B', "`C[sym1]()` returns `'B'`. Defined as `static [sym1]() { return 'B'; }`");
+assert.sameValue(C.c(), 'C', "`C.c()` returns `'C'`. Defined as `static c() { return 'C'; }`");
+assert.sameValue(C[sym2](), 'D', "`C[sym2]()` returns `'D'`. Defined as `static [sym2]() { return 'D'; }`");
+assert.compareArray(
+ Object.keys(C),
+ []
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/setter-constructor.js b/js/src/tests/test262/language/computed-property-names/class/static/setter-constructor.js
new file mode 100644
index 0000000000..fbbb825b14
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/setter-constructor.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 12.2.5
+description: >
+ In a class, computed property names for static
+ setters can be named "constructor"
+---*/
+class C {
+ static set ['constructor'](x) {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/setter-prototype.js b/js/src/tests/test262/language/computed-property-names/class/static/setter-prototype.js
new file mode 100644
index 0000000000..c18bd5a253
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/setter-prototype.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 14.5.14
+description: >
+ In a class, computed property names for static
+ setters that are named "prototype" throw a TypeError
+---*/
+
+assert.throws(TypeError, function() {
+ class C {
+ static set ['prototype'](x) {}
+ }
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/computed-property-names/class/static/shell.js b/js/src/tests/test262/language/computed-property-names/class/static/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/computed-property-names/class/static/shell.js