tor-browser

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

yield-spread-obj.js (2074B)


      1 // This file was procedurally generated from the following sources:
      2 // - src/generators/yield-spread-obj.case
      3 // - src/generators/default/class-expr-static-private-method.template
      4 /*---
      5 description: Use yield value in a object spread position (Static generator private method as a ClassExpression element)
      6 esid: prod-GeneratorPrivateMethod
      7 features: [object-spread, generators, class-static-methods-private]
      8 flags: [generated]
      9 info: |
     10    ClassElement :
     11      static 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 var C = class {
     33    static *#gen() {
     34        callCount += 1;
     35        yield {
     36            ...yield,
     37            y: 1,
     38            ...yield yield,
     39          };
     40    }
     41    static get gen() { return this.#gen; }
     42 }
     43 
     44 // Test the private fields do not appear as properties before set to value
     45 assert(
     46  !Object.prototype.hasOwnProperty.call(C.prototype, "#gen"),
     47  "Private field '#gen' does not appear as an own property on C prototype"
     48 );
     49 assert(
     50  !Object.prototype.hasOwnProperty.call(C, "#gen"),
     51  "Private field '#gen' does not appear as an own property on C constructor"
     52 );
     53 
     54 var iter = C.gen();
     55 
     56 iter.next();
     57 iter.next({ x: 42 });
     58 iter.next({ x: 'lol' });
     59 var item = iter.next({ y: 39 });
     60 
     61 assert.sameValue(item.value.x, 42);
     62 assert.sameValue(item.value.y, 39);
     63 assert.sameValue(Object.keys(item.value).length, 2);
     64 assert.sameValue(item.done, false);
     65 
     66 assert.sameValue(callCount, 1);
     67 
     68 // Test the private fields do not appear as properties before set to value
     69 assert(
     70  !Object.prototype.hasOwnProperty.call(C.prototype, "#gen"),
     71  "Private field '#gen' does not appear as an own property on C prototype"
     72 );
     73 assert(
     74  !Object.prototype.hasOwnProperty.call(C, "#gen"),
     75  "Private field '#gen' does not appear as an own property on C constructor"
     76 );
     77 
     78 reportCompare(0, 0);