diff options
Diffstat (limited to 'js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js')
-rw-r--r-- | js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js new file mode 100644 index 0000000000..066d67da3e --- /dev/null +++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js @@ -0,0 +1,67 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +es6id: 21.2.5.9 +description: Behavior when some lastIndex writes should be skipped. +info: | + [...] + 4. Let previousLastIndex be ? Get(rx, "lastIndex"). + 5. If SameValue(previousLastIndex, 0) is false, then + a. Perform ? Set(rx, "lastIndex", 0, true). + [...] + 7. Let currentLastIndex be ? Get(rx, "lastIndex"). + 8. If SameValue(currentLastIndex, previousLastIndex) is false, then + a. Perform ? Set(rx, "lastIndex", previousLastIndex, true). + [...] +features: [Symbol.search] +---*/ + +var lastIndexValue; +var lastIndexValueAfterExec; +var lastIndexReads; +var lastIndexWrites; +var execCallCount; +var result; + +var fakeRe = { + get lastIndex() { + lastIndexReads++; + return lastIndexValue; + }, + set lastIndex(_) { + lastIndexWrites++; + lastIndexValue = _; + }, + exec: function() { + execCallCount++; + lastIndexValue = lastIndexValueAfterExec; + return null; + } +}; + +function reset(value, valueAfterExec) { + lastIndexValue = value; + lastIndexValueAfterExec = valueAfterExec; + lastIndexReads = 0; + lastIndexWrites = 0; + execCallCount = 0; +} + +reset(0, 0); +result = RegExp.prototype[Symbol.search].call(fakeRe); +assert.sameValue(result, -1); +assert.sameValue(lastIndexValue, 0); +assert.sameValue(lastIndexReads, 2); +assert.sameValue(lastIndexWrites, 0); +assert.sameValue(execCallCount, 1); + +reset(420, 420); +result = RegExp.prototype[Symbol.search].call(fakeRe); +assert.sameValue(result, -1); +assert.sameValue(lastIndexValue, 420); +assert.sameValue(lastIndexReads, 2); +assert.sameValue(lastIndexWrites, 1); +assert.sameValue(execCallCount, 1); + +reportCompare(0, 0); |