// Copyright 2019 Ron Buckton. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
description: Properties of the groups object of indices are created with CreateDataProperty
includes: [compareArray.js, propertyHelper.js]
esid: sec-makeindicesarray
features: [regexp-named-groups]
info: |
  MakeIndicesArray ( S, indices, groupNames )
    11. For each integer _i_ such that _i_ >= 0 and _i_ < _n_, do
      e. If _groupNames_ is not *undfined* and _groupNames_[_i_] is not *undefined*, then
        i. Perform ! CreateDataProperty(_groups_, _groupNames_[_i_], _matchIndicesArray_).
---*/


// Properties created on result.groups in textual order.
let groupNames = Object.getOwnPropertyNames(/(?<fst>.)|(?<snd>.)/u.exec("abcd").indices.groups);
assert.compareArray(groupNames, ["fst", "snd"]);

// // Properties are created with Define, not Set
// let counter = 0;
// Object.defineProperty(Object.prototype, 'x', {set() { counter++; }});

let indices = /(?<x>.)/.exec('a').indices;
let groups = indices.groups;
// assert.sameValue(counter, 0);

// Properties are writable, enumerable and configurable
// (from CreateDataProperty)
verifyProperty(groups, 'x', {
    writable: true,
    enumerable: true,
    configurable: true
});
