test262/test/built-ins/RegExp/named-groups/string-replace-nocaptures.js
Daniel Ehrenberg e6df79231d Update RegExp named capture tests for spec change (#1270)
The RegExp named groups specification has changed to not throw
errors in certain cases. This patch updates the test262 tests to match
the new specification, and throws in an additional test that verifies
the interaction between named group syntax and other replacement.
The tests pass on a version of V8 which implements the new semantics.

92ceba518c
2017-10-13 14:16:16 -04:00

33 lines
1.2 KiB
JavaScript

// Copyright 2017 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: If there are no named captures, don't replace $<>
esid: sec-getsubstitution
features: [regexp-named-groups]
info: >
Runtime Semantics: GetSubstitution( matched, str, position, captures, namedCaptures, replacement )
Table: Replacement Text Symbol Substitutions
Unicode Characters: $<
Replacement text:
1. If namedCaptures is undefined, the replacement text is the literal string $<.
---*/
// @@replace with a string replacement argument (no named captures).
let source = "(.)(.)|(x)";
for (let flags of ["", "u"]) {
let re = new RegExp(source, flags);
assert.sameValue("$<snd>$<fst>cd", "abcd".replace(re, "$<snd>$<fst>"));
assert.sameValue("bacd", "abcd".replace(re, "$2$1"));
assert.sameValue("cd", "abcd".replace(re, "$3"));
assert.sameValue("$<sndcd", "abcd".replace(re, "$<snd"));
assert.sameValue("$<sndacd", "abcd".replace(re, "$<snd$1"));
assert.sameValue("$<42a>cd", "abcd".replace(re, "$<42$1>"));
assert.sameValue("$<fth>cd", "abcd".replace(re, "$<fth>"));
assert.sameValue("$<a>cd", "abcd".replace(re, "$<$1>"));
}