summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js')
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js b/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js
new file mode 100644
index 0000000000..3285bf9cf0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js
@@ -0,0 +1,58 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Function argument to String.prototype.replace gets groups as the last argument
+esid: sec-regexp.prototype-@@replace
+features: [regexp-named-groups]
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+ 14. Repeat, for each result in results,
+ j. Let namedCaptures be ? Get(result, "groups").
+ k. If functionalReplace is true, then
+ iv. If namedCaptures is not undefined,
+ 1. Append namedCaptures as the last element of replacerArgs.
+---*/
+
+let source = "(?<fst>.)(?<snd>.)";
+let alternateSource = "(?<fst>.)|(?<snd>.)";
+
+for (let flags of ["g", "gu"]) {
+ let i = 0;
+ let re = new RegExp(source, flags);
+ let result = "abcd".replace(re,
+ (match, fst, snd, offset, str, groups) => {
+ if (i == 0) {
+ assert.sameValue("ab", match);
+ assert.sameValue("a", groups.fst);
+ assert.sameValue("b", groups.snd);
+ assert.sameValue("a", fst);
+ assert.sameValue("b", snd);
+ assert.sameValue(0, offset);
+ assert.sameValue("abcd", str);
+ } else if (i == 1) {
+ assert.sameValue("cd", match);
+ assert.sameValue("c", groups.fst);
+ assert.sameValue("d", groups.snd);
+ assert.sameValue("c", fst);
+ assert.sameValue("d", snd);
+ assert.sameValue(2, offset);
+ assert.sameValue("abcd", str);
+ } else {
+ assertUnreachable();
+ }
+ i++;
+ return `${groups.snd}${groups.fst}`;
+ });
+ assert.sameValue("badc", result);
+ assert.sameValue(i, 2);
+
+ let re2 = new RegExp(alternateSource, flags);
+ assert.sameValue("undefinedundefinedundefinedundefined",
+ "abcd".replace(re2,
+ (match, fst, snd, offset, str, groups) => groups.snd));
+}
+
+
+reportCompare(0, 0);