diff --git a/test/built-ins/Function/private-identifiers-not-empty.js b/test/built-ins/Function/private-identifiers-not-empty.js new file mode 100644 index 0000000000..1e7f9117b9 --- /dev/null +++ b/test/built-ins/Function/private-identifiers-not-empty.js @@ -0,0 +1,20 @@ +// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-createdynamicfunction +description: CreateDynamicFunction throws SyntaxError if there is some invalid private identifier on its body +info: | + CreateDynamicFunction(constructor, newTarget, kind, args) + ... + 29. Let privateIdentifiers be an empty List. + 30. If AllPrivateIdentifiersValid of body with the argument privateIdentifiers is false, throw a SyntaxError exception. + 31. If AllPrivateIdentifiersValid of parameters with the argument privateIdentifiers is false, throw a SyntaxError exception. + ... +features: [class-fields-private] +---*/ + +assert.throws(SyntaxError, function() { + let o = {}; + new Function("o.#f"); +}, 'It should be a SyntaxError if AllPrivateIdentifiersValid returns false to dynamic function body'); + diff --git a/test/built-ins/eval/private-identifiers-not-empty.js b/test/built-ins/eval/private-identifiers-not-empty.js new file mode 100644 index 0000000000..a7fd3966ff --- /dev/null +++ b/test/built-ins/eval/private-identifiers-not-empty.js @@ -0,0 +1,24 @@ +// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-evaldeclarationinstantiation +description: EvalDeclarationInstantiation throws SyntaxError if there is some invalid private identifier on its body +info: | + EvalDeclarationInstantiation(body, varEnv, lexEnv, privateEnv, strict) + ... + 6. Let privateIdentifiers be an empty List. + 7. Let privateEnv be privateEnv. + 8. Repeat while privateEnv is not null, + a. For each binding named N in privateEnv, + i. If privateIdentifiers does not contain N, append N to privateIdentifiers. + b. Let privateEnv be privateEnv's outer environment reference. + 9. If AllPrivateIdentifiersValid of body with the argument privateIdentifiers is false, throw a SyntaxError exception. + ... +features: [class-fields-private] +---*/ + +assert.throws(SyntaxError, function() { + let o = {}; + eval("o.#f"); +}, 'It should be a SyntaxError if AllPrivateIdentifiersValid returns false to eval body'); + diff --git a/test/language/module-code/private-identifiers-not-empty.js b/test/language/module-code/private-identifiers-not-empty.js new file mode 100644 index 0000000000..68e8e7cf2e --- /dev/null +++ b/test/language/module-code/private-identifiers-not-empty.js @@ -0,0 +1,18 @@ +// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-static-semantics-early-errors +description: > + ModuleBody : ModuleItemList + It is a Syntax Error if AllPrivateIdentifiersValid of ModuleItemList with an empty List as an argument is false. +flags: [module] +features: [class-static-fields-private] +negative: + phase: parse + type: SyntaxError +---*/ + +$DONOTEVALUATE(); + +var x = {}; +x.#f = 'Test262';