mirror of
https://github.com/nodejs/node.git
synced 2025-05-21 12:25:12 +00:00

PR-URL: https://github.com/nodejs/node/pull/54077 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
// Copyright 2023 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.
|
|
|
|
// Flags: --js-regexp-modifiers
|
|
|
|
function test_invalid(re) {
|
|
assertEarlyError(`/${re}/`);
|
|
assertThrowsAtRuntime(`new RegExp('${re}')`, SyntaxError);
|
|
}
|
|
|
|
test_invalid('(?-:.)');
|
|
test_invalid('(?--:.)');
|
|
test_invalid('(?mm:.)');
|
|
test_invalid('(?ii:.)');
|
|
test_invalid('(?ss:.)');
|
|
test_invalid('(?-mm:.)');
|
|
test_invalid('(?-ii:.)');
|
|
test_invalid('(?-ss:.)');
|
|
test_invalid('(?g-:.)');
|
|
test_invalid('(?-u:.)');
|
|
test_invalid('(?m-m:.)');
|
|
test_invalid('(?i-i:.)');
|
|
test_invalid('(?s-s:.)');
|
|
test_invalid('(?msi-ims:.)');
|
|
test_invalid('(?i--m:.)');
|
|
test_invalid('(?i<)');
|
|
test_invalid('(?i=)');
|
|
test_invalid('(?i!)');
|
|
test_invalid('(?m<)');
|
|
test_invalid('(?m=)');
|
|
test_invalid('(?m!)');
|
|
test_invalid('(?s<)');
|
|
test_invalid('(?s=)');
|
|
test_invalid('(?s!)');
|
|
test_invalid('(?-<)');
|
|
test_invalid('(?-=)');
|
|
test_invalid('(?-!)');
|
|
|
|
function test(re, expectedMatch, expectedNoMatch = []) {
|
|
for (const match of expectedMatch) {
|
|
assertTrue(re.test(match), `${re}.test(${match})`);
|
|
}
|
|
for (const match of expectedNoMatch) {
|
|
assertFalse(re.test(match), `${re}.test(${match})`);
|
|
}
|
|
}
|
|
|
|
test(/(?i:ba)r/, ['bar', 'Bar', 'BAr'], ['BAR', 'BaR']);
|
|
test(/(?-i:ba)r/i, ['bar', 'baR'], ['Bar', 'BAR']);
|
|
test(/F(?i:oo(?-i:b)a)r/, ['Foobar', 'FoObAr'], ['FooBar', 'FoobaR']);
|
|
test(/F(?i:oo(?i:b)a)r/, ['Foobar', 'FoObAr', 'FOOBAr'], ['FoobaR']);
|
|
test(/^[a-z](?-i:[a-z])$/i, ['ab', 'Ab'], ['aB']);
|
|
test(/^(?i:[a-z])[a-z]$/, ['ab', 'Ab'], ['aB']);
|
|
test(
|
|
/Foo(?i:B[\q{ĀĂĄ|AaA}--\q{āăą}])r/v, ['FooBaaar', 'FoobAAAr'],
|
|
['FooBĀĂĄr', 'FooBaaaR']);
|
|
|
|
test(/(?m:^foo$)/, ['foo', '\nfoo', 'foo\n', '\nfoo\n'], ['xfoo', 'foox']);
|
|
|
|
test(
|
|
/(?s:^.$)/, ['a', 'A', '0', '\n', '\r', '\u2028', '\u2029', 'π'],
|
|
['\u{10300}']);
|
|
|
|
test(
|
|
/(?ms-i:^f.o$)/i, ['foo', '\nf\ro', 'f\no\n', '\nfπo\n'],
|
|
['Foo', '\nf\nO', 'foO\n', '\nFOO\n']);
|
|
test(
|
|
/(?m:^f(?si:.o)$)/, ['foo', '\nfoO', 'f\no\n', '\nf\rO\n'],
|
|
['Foo', 'F\no\n']);
|
|
test(/(?i:.oo)/, ['Foo', 'FOO', 'fOo', 'foO']);
|