From 2b452c2b08f312620029f203ace2766ea3e1de1d Mon Sep 17 00:00:00 2001 From: jbhoosreddy Date: Wed, 29 Aug 2018 21:04:05 -0400 Subject: [PATCH] test: Add private generator method tests (#1343) --- .../default/class-decl-method.template | 2 +- .../class-decl-private-method.template | 49 +++++++++++++++++++ .../class-decl-static-private-method.template | 47 ++++++++++++++++++ .../class-expr-private-method.template | 49 +++++++++++++++++++ .../class-expr-static-private-method.template | 47 ++++++++++++++++++ 5 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 src/generators/default/class-decl-private-method.template create mode 100644 src/generators/default/class-decl-static-private-method.template create mode 100644 src/generators/default/class-expr-private-method.template create mode 100644 src/generators/default/class-expr-static-private-method.template diff --git a/src/generators/default/class-decl-method.template b/src/generators/default/class-decl-method.template index 334145980a0..1d840738457 100644 --- a/src/generators/default/class-decl-method.template +++ b/src/generators/default/class-decl-method.template @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- path: language/statements/class/gen-method- -name: Geenerator method as a ClassDeclaration element +name: Generator private method as a ClassDeclaration element esid: prod-GeneratorMethod info: | ClassElement : diff --git a/src/generators/default/class-decl-private-method.template b/src/generators/default/class-decl-private-method.template new file mode 100644 index 00000000000..6609a8ac6c7 --- /dev/null +++ b/src/generators/default/class-decl-private-method.template @@ -0,0 +1,49 @@ +// Copyright (C) 2018 Jaideep Bhoosreddy. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/statements/class/gen-method- +name: Generator private method as a ClassDeclaration element +esid: prod-GeneratorPrivateMethod +info: | + ClassElement : + PrivateMethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } +features: [generators] +---*/ + +var callCount = 0; + +class C { + *#gen() { + callCount += 1; + /*{ body }*/ + } + gen() { + return this.#gen(); + } +} + +const c = new C(); + +// Test the private fields do not appear as properties before set to value +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#gen"), false, "test 1"); +assert.sameValue(Object.hasOwnProperty.call(C, "#gen"), false, "test 2"); +assert.sameValue(Object.hasOwnProperty.call(c, "#gen"), false, "test 3"); + +var iter = c.gen(); + +/*{ assertions }*/ + +assert.sameValue(callCount, 1); + +// Test the private fields do not appear as properties after set to value +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#gen"), false, "test 1"); +assert.sameValue(Object.hasOwnProperty.call(C, "#gen"), false, "test 2"); +assert.sameValue(Object.hasOwnProperty.call(c, "#gen"), false, "test 3"); diff --git a/src/generators/default/class-decl-static-private-method.template b/src/generators/default/class-decl-static-private-method.template new file mode 100644 index 00000000000..a6488b7e43f --- /dev/null +++ b/src/generators/default/class-decl-static-private-method.template @@ -0,0 +1,47 @@ +// Copyright (C) 2018 Jaideep Bhoosreddy. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/statements/class/gen-private-method-static- +name: Static generator private method as a ClassDeclaration element +esid: prod-GeneratorPrivateMethod +info: | + ClassElement : + static PrivateMethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } +features: [generators] +---*/ + +var callCount = 0; + +class C { + static #*gen() { + callCount += 1; + /*{ body }*/ + } + static gen() { + return C.gen(); + } +} + +var gen = C.gen; + +// Test the private fields do not appear as properties before set to value +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#gen"), false, "test 1"); +assert.sameValue(Object.hasOwnProperty.call(C, "#gen"), false, "test 2"); + +var iter = gen(); + +/*{ assertions }*/ + +assert.sameValue(callCount, 1); + +// Test the private fields do not appear as properties before set to value +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#gen"), false, "test 1"); +assert.sameValue(Object.hasOwnProperty.call(C, "#gen"), false, "test 2"); \ No newline at end of file diff --git a/src/generators/default/class-expr-private-method.template b/src/generators/default/class-expr-private-method.template new file mode 100644 index 00000000000..1c6c3bf0895 --- /dev/null +++ b/src/generators/default/class-expr-private-method.template @@ -0,0 +1,49 @@ +// Copyright (C) 2018 Jaideep Bhoosreddy. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/expressions/class/gen-private-method- +name: Generator private method as a ClassExpression element +esid: prod-GeneratorPrivateMethod +info: | + ClassElement : + PrivateMethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } +features: [generators] +---*/ + +var callCount = 0; + +var C = class { + *gen() { + callCount += 1; + /*{ body }*/ + } + gen() { + return this.#gen(); + } +} + +const c = new C(); + +// Test the private fields do not appear as properties before set to value +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#gen"), false, "test 1"); +assert.sameValue(Object.hasOwnProperty.call(C, "#gen"), false, "test 2"); +assert.sameValue(Object.hasOwnProperty.call(c, "#gen"), false, "test 3"); + +var iter = c.gen(); + +/*{ assertions }*/ + +assert.sameValue(callCount, 1); + +// Test the private fields do not appear as properties after set to value +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#gen"), false, "test 1"); +assert.sameValue(Object.hasOwnProperty.call(C, "#gen"), false, "test 2"); +assert.sameValue(Object.hasOwnProperty.call(c, "#gen"), false, "test 3"); diff --git a/src/generators/default/class-expr-static-private-method.template b/src/generators/default/class-expr-static-private-method.template new file mode 100644 index 00000000000..ed853e0356a --- /dev/null +++ b/src/generators/default/class-expr-static-private-method.template @@ -0,0 +1,47 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/expressions/class/gen-private-method-static- +name: Static generator private method as a ClassExpression element +esid: prod-GeneratorPrivateMethod +info: | + ClassElement : + static PrivateMethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } +features: [generators] +---*/ + +var callCount = 0; + +var C = class { + static *gen() { + callCount += 1; + /*{ body }*/ + } + static gen() { + return C.gen(); + } +} + +var gen = C.gen; + +// Test the private fields do not appear as properties before set to value +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#gen"), false, "test 1"); +assert.sameValue(Object.hasOwnProperty.call(C, "#gen"), false, "test 2"); + +var iter = gen(); + +/*{ assertions }*/ + +assert.sameValue(callCount, 1); + +// Test the private fields do not appear as properties before set to value +assert.sameValue(Object.hasOwnProperty.call(C.prototype, "#gen"), false, "test 1"); +assert.sameValue(Object.hasOwnProperty.call(C, "#gen"), false, "test 2");