// Copyright (C) 2017 Leo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
desc: The initializer value is defined during the class instatiation
info: |
  Runtime Semantics: ClassDefinitionEvaluation

  27. For each ClassElement e in order from elements
    ...
    d. Append to fieldRecords the elements of fields.
  ...
  33. Let result be InitializeStaticFields(F).
  ...

  [[Construct]] ( argumentsList, newTarget)

  8. If kind is "base", then
    a. Perform OrdinaryCallBindThis(F, calleeContext, thisArgument).
    b. Let result be InitializeInstanceFields(thisArgument, F).
    ...
  ...
  11. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
  ...
template: default
features: [class-fields-public, computed-property-names]
includes: [propertyHelper.js]
---*/

//- setup
var x = 1;
//- elements
[x++] = x++;
[x++] = x++;
//- assertions
var c1 = new C();
var c2 = new C();

verifyProperty(c1, "1", {
  value: 3,
  enumerable: true,
  configurable: true,
  writable: true,
});

verifyProperty(c1, "2", {
  value: 4,
  enumerable: true,
  configurable: true,
  writable: true,
});

verifyProperty(c2, "1", {
  value: 5,
  enumerable: true,
  configurable: true,
  writable: true,
});

verifyProperty(c2, "2", {
  value: 6,
  enumerable: true,
  configurable: true,
  writable: true,
});
