// Copyright 2018 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-segment-iterator-prototype description: Verifies the behavior for the iterators. features: [Intl.Segmenter] ---*/ const segmenter = new Intl.Segmenter(); const text = "Hello World, Test 123! Foo Bar. How are you?"; const iter = segmenter.segment(text); assert.sameValue("function", typeof iter.following); const tests = [ ["3", 2], [true, 0], [1.4, 0], [{ valueOf() { return 5; } }, 4], [text.length - 1, text.length - 2], [text.length, text.length - 1], ]; for (const [input, index] of tests) { assert.sameValue(iter.preceding(input), false); assert.sameValue(iter.index, index, String(input)); } assert.throws(RangeError, () => iter.preceding("ABC")); assert.throws(RangeError, () => iter.preceding(null)); assert.throws(RangeError, () => iter.preceding(-3)); // 1.5.3.3 %SegmentIteratorPrototype%.preceding( [ from ] ) // 3.b If ... from = 0, throw a RangeError exception. assert.throws(RangeError, () => iter.preceding(0)); // 1.5.3.3 %SegmentIteratorPrototype%.preceding( [ from ] ) // 3.b If from > iterator.[[SegmentIteratorString]] ... , throw a RangeError exception. assert.throws(RangeError, () => iter.preceding(text.length + 1));