// Copyright 2018 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. (function TestReceiverNonString() { const iter = 'a'.matchAll(/./); assertThrows( () => iter.next.call(0), TypeError ); })(); (function TestAncestry() { const iterProto = Object.getPrototypeOf('a'.matchAll(/./)); const arrProto = Object.getPrototypeOf([][Symbol.iterator]()); assertSame(Object.getPrototypeOf(iterProto), Object.getPrototypeOf(arrProto)); })(); function TestNoMatch(string, regex_or_string) { const next_result = string.matchAll(regex_or_string).next(); assertSame(undefined, next_result.value); assertTrue(next_result.done); } TestNoMatch('a', /b/); TestNoMatch('a', /b/g); TestNoMatch('a', 'b'); (function NonGlobalRegex() { const iter = 'ab'.matchAll(/./); let next_result = iter.next(); assertEquals(['a'], next_result.value); assertFalse(next_result.done); next_result = iter.next(); assertEquals(undefined, next_result.value); assertTrue(next_result.done); })(); function TestGlobalRegex(regex_or_string) { const iter = 'ab'.matchAll(/./g); let next_result = iter.next(); assertEquals(['a'], next_result.value); assertFalse(next_result.done); next_result = iter.next(); assertEquals(['b'], next_result.value); assertFalse(next_result.done); next_result = iter.next(); assertSame(undefined, next_result.value); assertTrue(next_result.done); } TestGlobalRegex(/./g); TestGlobalRegex('.'); function TestEmptyGlobalRegExp(regex_or_string) { const iter = 'd'.matchAll(regex_or_string); let next_result = iter.next(); assertEquals([''], next_result.value); assertFalse(next_result.done); next_result = iter.next(); assertEquals([''], next_result.value); assertFalse(next_result.done); next_result = iter.next(); assertSame(undefined, next_result.value); assertTrue(next_result.done); } TestEmptyGlobalRegExp(undefined); TestEmptyGlobalRegExp(/(?:)/g); TestEmptyGlobalRegExp(''); (function TestGlobalRegExpLastIndex() { const regex = /./g; const string = 'abc'; regex.exec(string); assertSame(1, regex.lastIndex); const iter = string.matchAll(regex); // Verify an internal RegExp is created and mutations to the provided RegExp // are not abservered. regex.exec(string); assertSame(2, regex.lastIndex); let next_result = iter.next(); assertEquals(['b'], next_result.value); assertFalse(next_result.done); assertSame(2, regex.lastIndex); })();