diff --git a/src/class-fields/initializer-eval-arguments/cls-decl-private-fields-eval.template b/src/class-fields/initializer-eval-arguments/cls-decl-private-fields-eval.template new file mode 100644 index 0000000000..27551d328b --- /dev/null +++ b/src/class-fields/initializer-eval-arguments/cls-decl-private-fields-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-private-direct- +name: direct eval +features: [class, class-fields-private] +---*/ + +var executed = false; +class C { + #x = eval('executed = true; /*{ initializer }*/;'); +} + +assert.throws(/*{ earlyerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-arguments/cls-decl-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-arguments/cls-decl-private-fields-indirect-eval.template new file mode 100644 index 0000000000..6a77ba9f22 --- /dev/null +++ b/src/class-fields/initializer-eval-arguments/cls-decl-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-private-indirect- +name: indirect eval +features: [class, class-fields-private] +---*/ + +var executed = false; +class C { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(/*{ executionerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, true); diff --git a/src/class-fields/initializer-eval-arguments/cls-expr-private-fields-eval.template b/src/class-fields/initializer-eval-arguments/cls-expr-private-fields-eval.template new file mode 100644 index 0000000000..656a7c81a0 --- /dev/null +++ b/src/class-fields/initializer-eval-arguments/cls-expr-private-fields-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-private-direct- +name: direct eval +features: [class, class-fields-private] +---*/ + +var executed = false; +var C = class { + #x = eval('executed = true; /*{ initializer }*/;'); +} + +assert.throws(/*{ earlyerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-arguments/cls-expr-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-arguments/cls-expr-private-fields-indirect-eval.template new file mode 100644 index 0000000000..4127bd1a86 --- /dev/null +++ b/src/class-fields/initializer-eval-arguments/cls-expr-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-private-indirect- +name: indirect eval +features: [class, class-fields-private] +---*/ + +var executed = false; +var C = class { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(/*{ executionerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, true); diff --git a/src/class-fields/initializer-eval-newtarget/cls-decl-private-fields-eval.template b/src/class-fields/initializer-eval-newtarget/cls-decl-private-fields-eval.template new file mode 100644 index 0000000000..14cdf6b266 --- /dev/null +++ b/src/class-fields/initializer-eval-newtarget/cls-decl-private-fields-eval.template @@ -0,0 +1,19 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-private-direct- +name: direct eval +features: [class, class-fields-private] +---*/ + +var executed = false; +class C { + #x = eval('executed = true; /*{ initializer }*/;'); +} + +var c = new C(); + +assert.sameValue(executed, true); +assert.sameValue(c.x, undefined); diff --git a/src/class-fields/initializer-eval-newtarget/cls-decl-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-newtarget/cls-decl-private-fields-indirect-eval.template new file mode 100644 index 0000000000..bb7eb64337 --- /dev/null +++ b/src/class-fields/initializer-eval-newtarget/cls-decl-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-private-indirect- +name: indirect eval +features: [class, class-fields-private] +---*/ + +var executed = false; +class C { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-newtarget/cls-expr-private-fields-eval.template b/src/class-fields/initializer-eval-newtarget/cls-expr-private-fields-eval.template new file mode 100644 index 0000000000..3efe9eb6ee --- /dev/null +++ b/src/class-fields/initializer-eval-newtarget/cls-expr-private-fields-eval.template @@ -0,0 +1,19 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-private-direct- +name: direct eval +features: [class, class-fields-private] +---*/ + +var executed = false; +var C = class { + #x = eval('executed = true; /*{ initializer }*/;'); +} + +var c = new C(); + +assert.sameValue(executed, true); +assert.sameValue(c.x, undefined); diff --git a/src/class-fields/initializer-eval-newtarget/cls-expr-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-newtarget/cls-expr-private-fields-indirect-eval.template new file mode 100644 index 0000000000..032852f7b3 --- /dev/null +++ b/src/class-fields/initializer-eval-newtarget/cls-expr-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-private-indirect- +name: indirect eval +features: [class, class-fields-private] +---*/ + +var executed = false; +var C = class { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super-call/cls-decl-private-fields-eval.template b/src/class-fields/initializer-eval-super-call/cls-decl-private-fields-eval.template new file mode 100644 index 0000000000..2b52bf407e --- /dev/null +++ b/src/class-fields/initializer-eval-super-call/cls-decl-private-fields-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-derived-cls-direct- +name: direct eval +---*/ + +var executed = false; +class A {} +class C extends A { + #x = eval('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super-call/cls-decl-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-super-call/cls-decl-private-fields-indirect-eval.template new file mode 100644 index 0000000000..20c2d86156 --- /dev/null +++ b/src/class-fields/initializer-eval-super-call/cls-decl-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-derived-cls-indirect- +name: indirect eval +---*/ + +var executed = false; +class A {} +class C extends A { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super-call/cls-expr-private-fields-eval.template b/src/class-fields/initializer-eval-super-call/cls-expr-private-fields-eval.template new file mode 100644 index 0000000000..d1953958ec --- /dev/null +++ b/src/class-fields/initializer-eval-super-call/cls-expr-private-fields-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-derived-cls-direct- +name: direct eval +---*/ + +var executed = false; +var A = class {} +var C = class extends A { + #x = eval('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super-call/cls-expr-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-super-call/cls-expr-private-fields-indirect-eval.template new file mode 100644 index 0000000000..fef18bb5f1 --- /dev/null +++ b/src/class-fields/initializer-eval-super-call/cls-expr-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-derived-cls-indirect- +name: indirect eval +---*/ + +var executed = false; +var A = class {} +var C = class extends A { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super-property/cls-decl-private-fields-eval.template b/src/class-fields/initializer-eval-super-property/cls-decl-private-fields-eval.template new file mode 100644 index 0000000000..250b36d4c1 --- /dev/null +++ b/src/class-fields/initializer-eval-super-property/cls-decl-private-fields-eval.template @@ -0,0 +1,18 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-derived-cls-direct- +name: direct eval +---*/ + +var executed = false; +class A {} +class C extends A { + #x = eval('executed = true; /*{ initializer }*/;'); +} + +new C(); + +assert.sameValue(executed, true); diff --git a/src/class-fields/initializer-eval-super-property/cls-decl-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-super-property/cls-decl-private-fields-indirect-eval.template new file mode 100644 index 0000000000..20c2d86156 --- /dev/null +++ b/src/class-fields/initializer-eval-super-property/cls-decl-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-derived-cls-indirect- +name: indirect eval +---*/ + +var executed = false; +class A {} +class C extends A { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super-property/cls-expr-private-fields-eval.template b/src/class-fields/initializer-eval-super-property/cls-expr-private-fields-eval.template new file mode 100644 index 0000000000..b11847616d --- /dev/null +++ b/src/class-fields/initializer-eval-super-property/cls-expr-private-fields-eval.template @@ -0,0 +1,18 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-derived-cls-direct- +name: direct eval +---*/ + +var executed = false; +var A = class {} +var C = class extends A { + #x = eval('executed = true; /*{ initializer }*/;'); +}; + +new C(); + +assert.sameValue(executed, true); diff --git a/src/class-fields/initializer-eval-super-property/cls-expr-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-super-property/cls-expr-private-fields-indirect-eval.template new file mode 100644 index 0000000000..9a0aec624f --- /dev/null +++ b/src/class-fields/initializer-eval-super-property/cls-expr-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-derived-cls-indirect- +name: indirect eval +---*/ + +var executed = false; +var A = class {} +var C = class extends A { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +}; + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super/cls-decl-private-fields-eval.template b/src/class-fields/initializer-eval-super/cls-decl-private-fields-eval.template new file mode 100644 index 0000000000..f536ad4266 --- /dev/null +++ b/src/class-fields/initializer-eval-super/cls-decl-private-fields-eval.template @@ -0,0 +1,21 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-private-derived-cls-direct- +name: direct eval +features: [class, class-fields-private] +---*/ + +var executed = false; +class A = {} +class C extends A { + #x = eval('executed = true; /*{ initializer }*/;'; +} + +assert.throws(/*{ earlyerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super/cls-decl-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-super/cls-decl-private-fields-indirect-eval.template new file mode 100644 index 0000000000..1b4adf525c --- /dev/null +++ b/src/class-fields/initializer-eval-super/cls-decl-private-fields-indirect-eval.template @@ -0,0 +1,22 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-private-derived-cls-indirect- +name: indirect eval +features: [class, class-fields-private] +---*/ + +class A = {} + +var executed = false; +class C extends A { + #x = (0, eval)('executed = true; /*{ initializer }*/;'; +} + +assert.throws(/*{ executionerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, true); diff --git a/src/class-fields/initializer-eval-super/cls-expr-private-fields-eval.template b/src/class-fields/initializer-eval-super/cls-expr-private-fields-eval.template new file mode 100644 index 0000000000..c55f04ad2e --- /dev/null +++ b/src/class-fields/initializer-eval-super/cls-expr-private-fields-eval.template @@ -0,0 +1,21 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-private-derived-cls-direct- +name: direct eval +features: [class, class-fields-private] +---*/ + +var executed = false; +var A = class {} +var C = class extends A { + #x = eval('executed = true; /*{ initializer }*/;'; +}; + +assert.throws(/*{ earlyerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super/cls-expr-private-fields-indirect-eval.template b/src/class-fields/initializer-eval-super/cls-expr-private-fields-indirect-eval.template new file mode 100644 index 0000000000..5f22b7ac6f --- /dev/null +++ b/src/class-fields/initializer-eval-super/cls-expr-private-fields-indirect-eval.template @@ -0,0 +1,21 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-private-derived-cls-indirect- +name: indirect eval +features: [class, class-fields-private] +---*/ + +var executed = false; +var A = class {} +var C = class extends A { + #x = (0, eval)('executed = true; /*{ initializer }*/;'; +}; + +assert.throws(/*{ executionerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, true); diff --git a/src/class-fields/initializer-eval/cls-decl-private-fields-eval.template b/src/class-fields/initializer-eval/cls-decl-private-fields-eval.template new file mode 100644 index 0000000000..27551d328b --- /dev/null +++ b/src/class-fields/initializer-eval/cls-decl-private-fields-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-private-direct- +name: direct eval +features: [class, class-fields-private] +---*/ + +var executed = false; +class C { + #x = eval('executed = true; /*{ initializer }*/;'); +} + +assert.throws(/*{ earlyerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval/cls-decl-private-fields-indirect-eval.template b/src/class-fields/initializer-eval/cls-decl-private-fields-indirect-eval.template new file mode 100644 index 0000000000..6a77ba9f22 --- /dev/null +++ b/src/class-fields/initializer-eval/cls-decl-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-private-indirect- +name: indirect eval +features: [class, class-fields-private] +---*/ + +var executed = false; +class C { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(/*{ executionerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, true); diff --git a/src/class-fields/initializer-eval/cls-expr-private-fields-eval.template b/src/class-fields/initializer-eval/cls-expr-private-fields-eval.template new file mode 100644 index 0000000000..656a7c81a0 --- /dev/null +++ b/src/class-fields/initializer-eval/cls-expr-private-fields-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-private-direct- +name: direct eval +features: [class, class-fields-private] +---*/ + +var executed = false; +var C = class { + #x = eval('executed = true; /*{ initializer }*/;'); +} + +assert.throws(/*{ earlyerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval/cls-expr-private-fields-indirect-eval.template b/src/class-fields/initializer-eval/cls-expr-private-fields-indirect-eval.template new file mode 100644 index 0000000000..ade5a57491 --- /dev/null +++ b/src/class-fields/initializer-eval/cls-expr-private-fields-indirect-eval.template @@ -0,0 +1,20 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-private-indirect- +name: indirect eval +features: [class, class-fields-private] +---*/ + +var executed = false; +var C = class { + #x = (0, eval)('executed = true; /*{ initializer }*/;'); +}; + +assert.throws(/*{ executionerror }*/, function() { + new C(); +}); + +assert.sameValue(executed, true); diff --git a/src/class-fields/static-private-names.case b/src/class-fields/static-private-fields.case similarity index 100% rename from src/class-fields/static-private-names.case rename to src/class-fields/static-private-fields.case diff --git a/src/class-fields/static-private-methods.case b/src/class-fields/static-private-methods.case new file mode 100644 index 0000000000..9675c9d8af --- /dev/null +++ b/src/class-fields/static-private-methods.case @@ -0,0 +1,59 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: literal private names +info: | + ClassElement: + ... + static FieldDefinition ; + + FieldDefinition: + ClassElementName Initializer_opt + + ClassElementName: + PrivateName + + PrivateName: + # IdentifierName + +template: default +features: [class-static-methods-private] +---*/ + +//- fields +static #xVal; static #yVal +//- privateinspectionfunctions + static #x(value) { + this.#xVal = value; + return this.#xVal; + } + static #y(value) { + this.#y = value; + return this.#yVal; + } + static x() { + return this.#x(42); + } + static y() { + return this.#y(43); + } + +//- assertions + +// Test the private methods do not appear as properties before set to value +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#xVal"), false, "test 1"); +assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 2"); +assert.sameValue(Object.hasOwnProperty.call(c, "#xVal"), false, "test 3"); + +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#yVal"), false, "test 4"); +assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 5"); +assert.sameValue(Object.hasOwnProperty.call(c, "#yVal"), false, "test 6"); + +// Test if private fields can be sucessfully accessed and set to value +assert.sameValue(C.x(), 42, "test 7"); +assert.sameValue(C.y(), 43, "test 8"); + +// Test the private fields do not appear as properties before after set to value +assert.sameValue(Object.hasOwnProperty.call(C, "#xVal"), false, "test 9"); +assert.sameValue(Object.hasOwnProperty.call(C, "#yVal"), false, "test 10");