// Copyright (C) 2018 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
desc: Valid Static AsyncGeneratorMethod PrivateName
info: |

  ClassElement :
    MethodDefinition
    static MethodDefinition
    FieldDefinition ;
    static FieldDefinition ;
    ;

  MethodDefinition :
    AsyncGeneratorMethod

  AsyncGeneratorMethod :
    async [no LineTerminator here] * ClassElementName ( UniqueFormalParameters){ AsyncGeneratorBody }

  ClassElementName :
    PropertyName
    PrivateName

  PrivateName ::
    # IdentifierName

  IdentifierName ::
    IdentifierStart
    IdentifierName IdentifierPart

  IdentifierStart ::
    UnicodeIDStart
    $
    _
    \ UnicodeEscapeSequence

  IdentifierPart::
    UnicodeIDContinue
    $
    \ UnicodeEscapeSequence
    <ZWNJ> <ZWJ>

  UnicodeIDStart::
    any Unicode code point with the Unicode property "ID_Start"

  UnicodeIDContinue::
    any Unicode code point with the Unicode property "ID_Continue"


  NOTE 3
  The sets of code points with Unicode properties "ID_Start" and
  "ID_Continue" include, respectively, the code points with Unicode
  properties "Other_ID_Start" and "Other_ID_Continue".

template: productions
flags: [async]
features: [class-static-methods-private]
---*/

//- fields
static async * #$(value) {
  yield await value;
}
static async * #_(value) {
  yield await value;
}
static async * #\u{6F}(value) {
  yield await value;
}
static async * #\u2118(value) {
  yield await value;
}
static async * #ZW_\u200C_NJ(value) {
  yield await value;
}
static async * #ZW_\u200D_J(value) {
  yield await value;
}
//- privateinspectionfunctions
static async * $(value) {
  yield * await this.#$(value);
}
static async * _(value) {
  yield * await this.#_(value);
}
static async * \u{6F}(value) {
  yield * await this.#\u{6F}(value);
}
static async * \u2118(value) {
  yield * await this.#\u2118(value);
}
static async * ZW_\u200C_NJ(value) {
  yield * await this.#ZW_\u200C_NJ(value);
}
static async * ZW_\u200D_J(value) {
  yield * await this.#ZW_\u200D_J(value);
}

//- assertions
Promise.all([
  C.$(1).next(),
  C._(1).next(),
  C.\u{6F}(1).next(),
  C.\u2118(1).next(),
  C.ZW_\u200C_NJ(1).next(),
  C.ZW_\u200D_J(1).next(),
]).then(results => {

  assert.sameValue(results[0].value, 1);
  assert.sameValue(results[1].value, 1);
  assert.sameValue(results[2].value, 1);
  assert.sameValue(results[3].value, 1);
  assert.sameValue(results[4].value, 1);
  assert.sameValue(results[5].value, 1);

}, $DONE).then($DONE, $DONE);