diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /js/src/tests/test262/language/computed-property-names/class | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/language/computed-property-names/class')
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 |