// This file was procedurally generated from the following sources:
// - src/computed-property-names/computed-property-name-from-condition-expression-true.case
// - src/computed-property-names/evaluation/class-expression-accessors.template
/*---
description: Computed property name from condition expression (ComputedPropertyName in ClassExpression)
esid: prod-ComputedPropertyName
features: [computed-property-names]
flags: [generated]
info: |
    ClassExpression:
      classBindingIdentifier opt ClassTail

    ClassTail:
      ClassHeritage opt { ClassBody opt }

    ClassBody:
      ClassElementList

    ClassElementList:
      ClassElement

    ClassElement:
      MethodDefinition

    MethodDefinition:
      PropertyName ...
      get PropertyName ...
      set PropertyName ...

    PropertyName:
      ComputedPropertyName

    ComputedPropertyName:
      [ AssignmentExpression ]
---*/


let C = class {
  get [true ? 1 : 2]() {
    return 2;
  }

  set [true ? 1 : 2](v) {
    return 2;
  }

  static get [true ? 1 : 2]() {
    return 2;
  }

  static set [true ? 1 : 2](v) {
    return 2;
  }
};

let c = new C();

assert.sameValue(
  c[true ? 1 : 2],
  2
);
assert.sameValue(
  c[true ? 1 : 2] = 2,
  2
);

assert.sameValue(
  C[true ? 1 : 2],
  2
);
assert.sameValue(
  C[true ? 1 : 2] = 2,
  2
);
assert.sameValue(
  c[String(true ? 1 : 2)],
  2
);
assert.sameValue(
  c[String(true ? 1 : 2)] = 2,
  2
);

assert.sameValue(
  C[String(true ? 1 : 2)],
  2
);
assert.sameValue(
  C[String(true ? 1 : 2)] = 2,
  2
);
