Skip to content

Commit

Permalink
test: Add private generator method tests (tc39#1343)
Browse files Browse the repository at this point in the history
  • Loading branch information
jbhoosreddy committed Aug 30, 2018
1 parent 835c85c commit dd3d13a
Show file tree
Hide file tree
Showing 5 changed files with 197 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/generators/default/class-decl-method.template
Original file line number Diff line number Diff line change
Expand Up @@ -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 method as a ClassDeclaration element
esid: prod-GeneratorMethod
info: |
ClassElement :
Expand Down
50 changes: 50 additions & 0 deletions src/generators/default/class-decl-private-method.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// 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
features: [class-methods-private]
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");
48 changes: 48 additions & 0 deletions src/generators/default/class-decl-static-private-method.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// 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
features: [class-methods-private]
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");
50 changes: 50 additions & 0 deletions src/generators/default/class-expr-private-method.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// 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
features: [class-methods-private]
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");
48 changes: 48 additions & 0 deletions src/generators/default/class-expr-static-private-method.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// 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-static-
name: Static generator private method as a ClassExpression element
features: [class-methods-private]
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");

0 comments on commit dd3d13a

Please sign in to comment.