From 3efcde4ba70d07f553c34a66aff439d5be6febe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bargull?= <andre.bargull@gmail.com> Date: Wed, 30 Jan 2019 13:34:32 -0800 Subject: [PATCH] Add tests for setting class-name in ClassDefinitionEvaluation (#2057) Spec PR: tc39/ecma262#1372 --- .../class/static/method-number.js | 4 +-- .../class/static/method-string.js | 4 +-- .../class/static/method-symbol.js | 4 +-- ...class-name-static-initializer-anonymous.js | 26 ++++++++++++++++++ .../class-name-static-initializer-decl.js | 26 ++++++++++++++++++ ...-name-static-initializer-default-export.js | 27 +++++++++++++++++++ .../class-name-static-initializer-expr.js | 26 ++++++++++++++++++ 7 files changed, 111 insertions(+), 6 deletions(-) create mode 100644 test/language/expressions/class/elements/class-name-static-initializer-anonymous.js create mode 100644 test/language/expressions/class/elements/class-name-static-initializer-decl.js create mode 100644 test/language/expressions/class/elements/class-name-static-initializer-default-export.js create mode 100644 test/language/expressions/class/elements/class-name-static-initializer-expr.js diff --git a/test/language/computed-property-names/class/static/method-number.js b/test/language/computed-property-names/class/static/method-number.js index 1c553a1930..c00f3e0202 100644 --- a/test/language/computed-property-names/class/static/method-number.js +++ b/test/language/computed-property-names/class/static/method-number.js @@ -21,6 +21,6 @@ assert( "`compareArray(Object.keys(C), [])` returns `true`" ); assert( - compareArray(Object.getOwnPropertyNames(C), ['1', '2', 'length', 'prototype', 'a', 'c', 'name']), - "`compareArray(Object.getOwnPropertyNames(C), ['1', '2', 'length', 'prototype', 'a', 'c', 'name'])` returns `true`" + compareArray(Object.getOwnPropertyNames(C), ['1', '2', 'length', 'prototype', 'name', 'a', 'c']), + "`compareArray(Object.getOwnPropertyNames(C), ['1', '2', 'length', 'prototype', 'name', 'a', 'c'])` returns `true`" ); diff --git a/test/language/computed-property-names/class/static/method-string.js b/test/language/computed-property-names/class/static/method-string.js index 2b5f09b83f..8f383805b0 100644 --- a/test/language/computed-property-names/class/static/method-string.js +++ b/test/language/computed-property-names/class/static/method-string.js @@ -21,6 +21,6 @@ assert( "`compareArray(Object.keys(C), [])` returns `true`" ); assert( - compareArray(Object.getOwnPropertyNames(C), ['length', 'prototype', 'a', 'b', 'c', 'd', 'name']), - "`compareArray(Object.getOwnPropertyNames(C), ['length', 'prototype', 'a', 'b', 'c', 'd', 'name'])` returns `true`" + compareArray(Object.getOwnPropertyNames(C), ['length', 'prototype', 'name', 'a', 'b', 'c', 'd']), + "`compareArray(Object.getOwnPropertyNames(C), ['length', 'prototype', 'name', 'a', 'b', 'c', 'd'])` returns `true`" ); diff --git a/test/language/computed-property-names/class/static/method-symbol.js b/test/language/computed-property-names/class/static/method-symbol.js index 7d6506dcaf..3eb710b780 100644 --- a/test/language/computed-property-names/class/static/method-symbol.js +++ b/test/language/computed-property-names/class/static/method-symbol.js @@ -24,8 +24,8 @@ assert( "`compareArray(Object.keys(C), [])` returns `true`" ); assert( - compareArray(Object.getOwnPropertyNames(C), ['length', 'prototype', 'a', 'c', 'name']), - "`compareArray(Object.getOwnPropertyNames(C), ['length', 'prototype', 'a', 'c', 'name'])` returns `true`" + compareArray(Object.getOwnPropertyNames(C), ['length', 'prototype', 'name', 'a', 'c']), + "`compareArray(Object.getOwnPropertyNames(C), ['length', 'prototype', 'name', 'a', 'c'])` returns `true`" ); assert( compareArray(Object.getOwnPropertySymbols(C), [sym1, sym2]), diff --git a/test/language/expressions/class/elements/class-name-static-initializer-anonymous.js b/test/language/expressions/class/elements/class-name-static-initializer-anonymous.js new file mode 100644 index 0000000000..daca9b6ab2 --- /dev/null +++ b/test/language/expressions/class/elements/class-name-static-initializer-anonymous.js @@ -0,0 +1,26 @@ +// Copyright 2019 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-runtime-semantics-classdefinitionevaluation +description: > + The inferred class-name is present when executing static field initializers of anonymous class expressions. +info: | + 14.6.13 Runtime Semantics: ClassDefinitionEvaluation + + [...] + 17. Perform MakeClassConstructor(F). + 18. If className is not undefined, then + a. Perform SetFunctionName(F, className). + [...] + +features: [class-static-fields-public] +---*/ + +var className; + +var C = class { + static f = (className = this.name); +} + +assert.sameValue(className, "C"); diff --git a/test/language/expressions/class/elements/class-name-static-initializer-decl.js b/test/language/expressions/class/elements/class-name-static-initializer-decl.js new file mode 100644 index 0000000000..6f9ec9e077 --- /dev/null +++ b/test/language/expressions/class/elements/class-name-static-initializer-decl.js @@ -0,0 +1,26 @@ +// Copyright 2019 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-runtime-semantics-classdefinitionevaluation +description: > + The class-name is present when executing static field initializers of class declarations. +info: | + 14.6.13 Runtime Semantics: ClassDefinitionEvaluation + + [...] + 17. Perform MakeClassConstructor(F). + 18. If className is not undefined, then + a. Perform SetFunctionName(F, className). + [...] + +features: [class-static-fields-public] +---*/ + +var className; + +class C { + static f = (className = this.name); +} + +assert.sameValue(className, "C"); diff --git a/test/language/expressions/class/elements/class-name-static-initializer-default-export.js b/test/language/expressions/class/elements/class-name-static-initializer-default-export.js new file mode 100644 index 0000000000..5ce104f4b1 --- /dev/null +++ b/test/language/expressions/class/elements/class-name-static-initializer-default-export.js @@ -0,0 +1,27 @@ +// Copyright 2019 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-runtime-semantics-classdefinitionevaluation +description: > + The class-name is present when executing static field initializers of default-exported classes. +info: | + 14.6.13 Runtime Semantics: ClassDefinitionEvaluation + + [...] + 17. Perform MakeClassConstructor(F). + 18. If className is not undefined, then + a. Perform SetFunctionName(F, className). + [...] + +flags: [module] +features: [class-static-fields-public] +---*/ + +var className; + +export default class { + static f = (className = this.name); +} + +assert.sameValue(className, "default"); diff --git a/test/language/expressions/class/elements/class-name-static-initializer-expr.js b/test/language/expressions/class/elements/class-name-static-initializer-expr.js new file mode 100644 index 0000000000..1ff5f8d38a --- /dev/null +++ b/test/language/expressions/class/elements/class-name-static-initializer-expr.js @@ -0,0 +1,26 @@ +// Copyright 2019 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-runtime-semantics-classdefinitionevaluation +description: > + The class-name is present when executing static field initializers of named class expressions. +info: | + 14.6.13 Runtime Semantics: ClassDefinitionEvaluation + + [...] + 17. Perform MakeClassConstructor(F). + 18. If className is not undefined, then + a. Perform SetFunctionName(F, className). + [...] + +features: [class-static-fields-public] +---*/ + +var className; + +var expr = class C { + static f = (className = this.name); +} + +assert.sameValue(className, "C"); -- GitLab