mirror of https://github.com/tc39/test262.git
Add functional replacement test
This commit is contained in:
parent
a6f3449cd8
commit
6de6484e21
|
@ -0,0 +1,59 @@
|
||||||
|
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-regexp.prototype-@@replace
|
||||||
|
description: >
|
||||||
|
"groups" value is passed as last argument of replacer unless it is undefined.
|
||||||
|
info: |
|
||||||
|
RegExp.prototype [ @@replace ] ( string, replaceValue )
|
||||||
|
|
||||||
|
[...]
|
||||||
|
14. For each result in results, do
|
||||||
|
[...]
|
||||||
|
j. Let namedCaptures be ? Get(result, "groups").
|
||||||
|
k. If functionalReplace is true, then
|
||||||
|
[...]
|
||||||
|
iv. If namedCaptures is not undefined, then
|
||||||
|
1. Append namedCaptures as the last element of replacerArgs.
|
||||||
|
v. Let replValue be ? Call(replaceValue, undefined, replacerArgs).
|
||||||
|
features: [Symbol.replace, regexp-named-groups]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var matchGroups;
|
||||||
|
var re = /./;
|
||||||
|
re.exec = function() {
|
||||||
|
return {
|
||||||
|
length: 1,
|
||||||
|
0: "a",
|
||||||
|
index: 0,
|
||||||
|
groups: matchGroups,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var replacerCalls = 0;
|
||||||
|
var replacerLastArg;
|
||||||
|
var replacer = function() {
|
||||||
|
replacerCalls++;
|
||||||
|
replacerLastArg = arguments[arguments.length - 1];
|
||||||
|
};
|
||||||
|
|
||||||
|
matchGroups = null;
|
||||||
|
re[Symbol.replace]("a", replacer);
|
||||||
|
assert.sameValue(replacerCalls, 1);
|
||||||
|
assert.sameValue(replacerLastArg, matchGroups);
|
||||||
|
|
||||||
|
matchGroups = undefined;
|
||||||
|
re[Symbol.replace]("a", replacer);
|
||||||
|
assert.sameValue(replacerCalls, 2);
|
||||||
|
assert.sameValue(replacerLastArg, "a");
|
||||||
|
|
||||||
|
matchGroups = 10;
|
||||||
|
re[Symbol.replace]("a", replacer);
|
||||||
|
assert.sameValue(replacerCalls, 3);
|
||||||
|
assert.sameValue(replacerLastArg, matchGroups);
|
||||||
|
|
||||||
|
matchGroups = {};
|
||||||
|
re[Symbol.replace]("a", replacer);
|
||||||
|
assert.sameValue(replacerCalls, 4);
|
||||||
|
assert.sameValue(replacerLastArg, matchGroups);
|
Loading…
Reference in New Issue