Add "0" string coercion test with global RegExp

This commit is contained in:
Alexey Shvayka 2020-02-08 19:11:11 +02:00 committed by Rick Waldron
parent 50d1419b00
commit dbbe2e7cc7
1 changed files with 53 additions and 0 deletions

View File

@ -0,0 +1,53 @@
// 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: >
String coercion of "0" property of the value returned by RegExpExec.
(global RegExp)
info: |
RegExp.prototype [ @@replace ] ( string, replaceValue )
[...]
11. Repeat, while done is false
a. Let result be ? RegExpExec(rx, S).
b. If result is null, set done to true.
c. Else,
i. Append result to the end of results.
ii. If global is false, set done to true.
iii. Else,
1. Let matchStr be ? ToString(? Get(result, "0")).
2. If matchStr is the empty String, then
a. Let thisIndex be ? ToLength(? Get(rx, "lastIndex")).
b. Let nextIndex be AdvanceStringIndex(S, thisIndex, fullUnicode).
c. Perform ? Set(rx, "lastIndex", nextIndex, true).
features: [Symbol.replace]
---*/
var r = /./g;
var coercibleValueWasReturned = false;
var coercibleValue = {
length: 1,
0: {
toString: function() {
return '';
},
valueOf: function() {
throw new Test262Error('This method should not be invoked.');
},
},
index: 0,
};
r.exec = function() {
if (coercibleValueWasReturned) {
return null;
}
coercibleValueWasReturned = true;
return coercibleValue;
};
assert.sameValue(r[Symbol.replace]('', 'foo'), 'foo');
assert.sameValue(r.lastIndex, 1);