tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

yield-spread-obj.js (2320B)


      1 // This file was procedurally generated from the following sources:
      2 // - src/generators/yield-spread-obj.case
      3 // - src/generators/default/class-decl-private-method.template
      4 /*---
      5 description: Use yield value in a object spread position (Generator private method as a ClassDeclaration element)
      6 esid: prod-GeneratorPrivateMethod
      7 features: [object-spread, generators, class-methods-private]
      8 flags: [generated]
      9 info: |
     10    ClassElement :
     11      PrivateMethodDefinition
     12 
     13    MethodDefinition :
     14      GeneratorMethod
     15 
     16    14.4 Generator Function Definitions
     17 
     18    GeneratorMethod :
     19      * PropertyName ( UniqueFormalParameters ) { GeneratorBody }
     20 
     21 
     22    Spread Properties
     23 
     24    PropertyDefinition[Yield]:
     25      (...)
     26      ...AssignmentExpression[In, ?Yield]
     27 
     28 ---*/
     29 
     30 var callCount = 0;
     31 
     32 class C {
     33    *#gen() {
     34        callCount += 1;
     35        yield {
     36            ...yield,
     37            y: 1,
     38            ...yield yield,
     39          };
     40    }
     41    get gen() { return this.#gen; }
     42 }
     43 
     44 const c = new C();
     45 
     46 // Test the private fields do not appear as properties before set to value
     47 assert(
     48  !Object.prototype.hasOwnProperty.call(C.prototype, "#gen"),
     49  "Private field '#gen' does not appear as an own property on C prototype"
     50 );
     51 assert(
     52  !Object.prototype.hasOwnProperty.call(C, "#gen"),
     53  "Private field '#gen' does not appear as an own property on C constructor"
     54 );
     55 assert(
     56  !Object.prototype.hasOwnProperty.call(c, "#gen"),
     57  "Private field '#gen' does not appear as an own property on C instance"
     58 );
     59 
     60 var iter = c.gen();
     61 
     62 iter.next();
     63 iter.next({ x: 42 });
     64 iter.next({ x: 'lol' });
     65 var item = iter.next({ y: 39 });
     66 
     67 assert.sameValue(item.value.x, 42);
     68 assert.sameValue(item.value.y, 39);
     69 assert.sameValue(Object.keys(item.value).length, 2);
     70 assert.sameValue(item.done, false);
     71 
     72 assert.sameValue(callCount, 1);
     73 
     74 // Test the private fields do not appear as properties after set to value
     75 assert(
     76  !Object.prototype.hasOwnProperty.call(C.prototype, "#gen"),
     77  "Private field '#gen' does not appear as an own property on C prototype"
     78 );
     79 assert(
     80  !Object.prototype.hasOwnProperty.call(C, "#gen"),
     81  "Private field '#gen' does not appear as an own property on C constructor"
     82 );
     83 assert(
     84  !Object.prototype.hasOwnProperty.call(c, "#gen"),
     85  "Private field '#gen' does not appear as an own property on C instance"
     86 );
     87 
     88 reportCompare(0, 0);