diff options
Diffstat (limited to 'js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js')
-rw-r--r-- | js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js new file mode 100644 index 0000000000..58e401564c --- /dev/null +++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js @@ -0,0 +1,45 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-regexp.prototype-@@replace +description: > + Integer coercion of "index" property of the value returned by RegExpExec. +info: | + RegExp.prototype [ @@replace ] ( string, replaceValue ) + + [...] + 14. For each result in results, do + [...] + e. Let position be ? ToInteger(? Get(result, "index")). + [...] + k. If functionalReplace is true, then + i. Let replacerArgs be « matched ». + ii. Append in list order the elements of captures to the end of the List replacerArgs. + iii. Append position and S to replacerArgs. + [...] + v. Let replValue be ? Call(replaceValue, undefined, replacerArgs). +features: [Symbol.replace] +---*/ + +var r = /./; +var coercibleIndex = { + length: 1, + 0: '', + index: { + valueOf: function() { + return 2.9; + }, + }, +}; +r.exec = function() { + return coercibleIndex; +}; + +var replacer = function(_matched, position) { + return position; +}; + +assert.sameValue(r[Symbol.replace]('abcd', replacer), 'ab2cd'); + +reportCompare(0, 0); |