// Copyright 2017 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
description: Properties of the groups object are created with CreateDataProperty
includes: [compareArray.js, propertyHelper.js]
esid: sec-regexpbuiltinexec
features: [regexp-named-groups]
info: |
  Runtime Semantics: RegExpBuiltinExec ( R, S )
    25. For each integer i such that i > 0 and i ≤ n
      f. If the ith capture of R was defined with a GroupName,
        i. Let s be the StringValue of the corresponding RegExpIdentifierName.
        ii. Perform ! CreateDataProperty(groups, s, capturedValue).
---*/

// Properties created on result.groups in textual order.
assert(compareArray(["fst", "snd"],
             Object.getOwnPropertyNames(
                 /(?<fst>.)|(?<snd>.)/u.exec("abcd").groups)));

// Properties are created with Define, not Set
let counter = 0;
Object.defineProperty(Object.prototype, 'x', {set() { counter++; }});
let match = /(?<x>.)/.exec('a');
let groups = match.groups;
assert.sameValue(counter, 0);

// Properties are writable, enumerable and configurable
// (from CreateDataProperty)
verifyWritable(groups, "x");
verifyEnumerable(groups, "x");
verifyConfigurable(groups, "x");
