Add tests for \p{…} with properties of strings

This functionality is part of the RegExp `v` flag proposal: https://github.com/tc39/proposal-regexp-set-notation
This commit is contained in:
Mathias Bynens 2021-12-27 12:04:14 +01:00 committed by Rick Waldron
parent 7bfda9f10b
commit 489a9f8d52
34 changed files with 12787 additions and 10 deletions

View File

@ -264,6 +264,10 @@ array-find-from-last
# https://github.com/tc39/proposal-intl-duration-format # https://github.com/tc39/proposal-intl-duration-format
Intl.DurationFormat Intl.DurationFormat
# RegExp set notation + properties of strings
# https://github.com/tc39/proposal-regexp-set-notation
regexp-v-flag
## Standard language features ## Standard language features
# #
# Language features that have been included in a published version of the # Language features that have been included in a published version of the

View File

@ -3,7 +3,7 @@
/*--- /*---
description: | description: |
Collection of functions used to assert the correctness of RegExp objects. Collection of functions used to assert the correctness of RegExp objects.
defines: [buildString, testPropertyEscapes, matchValidator] defines: [buildString, testPropertyEscapes, testPropertyOfStrings, matchValidator]
---*/ ---*/
function buildString(args) { function buildString(args) {
@ -31,23 +31,65 @@ function buildString(args) {
return result; return result;
} }
function testPropertyEscapes(regex, string, expression) { function printCodePoint(codePoint) {
if (!regex.test(string)) { const hex = codePoint
.toString(16)
.toUpperCase()
.padStart(6, "0");
return `U+${hex}`;
}
function printStringCodePoints(string) {
const buf = [];
for (const symbol of string) {
const formatted = printCodePoint(symbol.codePointAt(0));
buf.push(formatted);
}
return buf.join(' ');
}
function testPropertyEscapes(regExp, string, expression) {
if (!regExp.test(string)) {
for (const symbol of string) { for (const symbol of string) {
const hex = symbol printCodePoint(symbol.codePointAt(0));
.codePointAt(0)
.toString(16)
.toUpperCase()
.padStart(6, "0");
assert( assert(
regex.test(symbol), regExp.test(symbol),
`\`${ expression }\` should match U+${ hex } (\`${ symbol }\`)` `\`${ expression }\` should match U+${ hex } (\`${ symbol }\`)`
); );
} }
} }
} }
// Returns a function that will validate RegExp match result function testPropertyOfStrings(args) {
// Use member expressions rather than destructuring `args` for improved
// compatibility with engines that only implement assignment patterns
// partially or not at all.
const regExp = args.regExp;
const expression = args.expression;
const matchStrings = args.matchStrings;
const nonMatchStrings = args.nonMatchStrings;
const allStrings = matchStrings.join('');
if (!regExp.test(allStrings)) {
for (const string of matchStrings) {
assert(
regExp.test(string),
`\`${ expression }\` should match ${ string } (U+${ printStringCodePoints(string) })`
);
}
}
const allNonMatchStrings = nonMatchStrings.join('');
if (regExp.test(allNonMatchStrings)) {
for (const string of nonMatchStrings) {
assert(
!regExp.test(string),
`\`${ expression }\` should not match ${ string } (U+${ printStringCodePoints(string) })`
);
}
}
}
// Returns a function that validates a RegExp match result.
// //
// Example: // Example:
// //

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `Basic_Emoji` (property of strings) with `[^\p{…}]` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/[^\p{Basic_Emoji}]/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `Basic_Emoji` (property of strings) with `\P{…}` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\P{Basic_Emoji}/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `Basic_Emoji` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-patterns-static-semantics-early-errors
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\p{Basic_Emoji}/u;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `Emoji_Keycap_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/[^\p{Emoji_Keycap_Sequence}]/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `Emoji_Keycap_Sequence` (property of strings) with `\P{…}` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\P{Emoji_Keycap_Sequence}/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `Emoji_Keycap_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-patterns-static-semantics-early-errors
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\p{Emoji_Keycap_Sequence}/u;

View File

@ -0,0 +1,50 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `Emoji_Keycap_Sequence` (property of strings)
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-static-semantics-unicodematchproperty-p
features: [regexp-unicode-property-escapes, regexp-v-flag]
includes: [regExpUtils.js]
---*/
testPropertyOfStrings({
regExp: /^\p{Emoji_Keycap_Sequence}+$/v,
expression: "\\p{Emoji_Keycap_Sequence}",
matchStrings: [
"#\uFE0F\u20E3",
"*\uFE0F\u20E3",
"0\uFE0F\u20E3",
"1\uFE0F\u20E3",
"2\uFE0F\u20E3",
"3\uFE0F\u20E3",
"4\uFE0F\u20E3",
"5\uFE0F\u20E3",
"6\uFE0F\u20E3",
"7\uFE0F\u20E3",
"8\uFE0F\u20E3",
"9\uFE0F\u20E3"
],
nonMatchStrings: [
"\uFE0F\u20E3",
"#\uFE0F",
"#\u20E3",
"\uFE0F\u20E3",
"*\uFE0F",
"*\u20E3",
"\uFE0F\u20E3",
"0\uFE0F",
"0\u20E3",
"\uFE0F\u20E3",
"1\uFE0F",
"1\u20E3",
"\uFE0F\u20E3",
"2\uFE0F",
"2\u20E3"
],
});

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `Emoji_Test` (property of strings) with `[^\p{…}]` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/[^\p{Emoji_Test}]/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `Emoji_Test` (property of strings) with `\P{…}` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\P{Emoji_Test}/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `Emoji_Test` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-patterns-static-semantics-early-errors
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\p{Emoji_Test}/u;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji` (property of strings) with `[^\p{…}]` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/[^\p{RGI_Emoji}]/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji` (property of strings) with `\P{…}` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\P{RGI_Emoji}/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `RGI_Emoji` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-patterns-static-semantics-early-errors
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\p{RGI_Emoji}/u;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji_Flag_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/[^\p{RGI_Emoji_Flag_Sequence}]/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji_Flag_Sequence` (property of strings) with `\P{…}` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\P{RGI_Emoji_Flag_Sequence}/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `RGI_Emoji_Flag_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-patterns-static-semantics-early-errors
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\p{RGI_Emoji_Flag_Sequence}/u;

View File

@ -0,0 +1,291 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `RGI_Emoji_Flag_Sequence` (property of strings)
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-static-semantics-unicodematchproperty-p
features: [regexp-unicode-property-escapes, regexp-v-flag]
includes: [regExpUtils.js]
---*/
testPropertyOfStrings({
regExp: /^\p{RGI_Emoji_Flag_Sequence}+$/v,
expression: "\\p{RGI_Emoji_Flag_Sequence}",
matchStrings: [
"\u{1F1E6}\u{1F1E8}",
"\u{1F1E6}\u{1F1E9}",
"\u{1F1E6}\u{1F1EA}",
"\u{1F1E6}\u{1F1EB}",
"\u{1F1E6}\u{1F1EC}",
"\u{1F1E6}\u{1F1EE}",
"\u{1F1E6}\u{1F1F1}",
"\u{1F1E6}\u{1F1F2}",
"\u{1F1E6}\u{1F1F4}",
"\u{1F1E6}\u{1F1F6}",
"\u{1F1E6}\u{1F1F7}",
"\u{1F1E6}\u{1F1F8}",
"\u{1F1E6}\u{1F1F9}",
"\u{1F1E6}\u{1F1FA}",
"\u{1F1E6}\u{1F1FC}",
"\u{1F1E6}\u{1F1FD}",
"\u{1F1E6}\u{1F1FF}",
"\u{1F1E7}\u{1F1E6}",
"\u{1F1E7}\u{1F1E7}",
"\u{1F1E7}\u{1F1E9}",
"\u{1F1E7}\u{1F1EA}",
"\u{1F1E7}\u{1F1EB}",
"\u{1F1E7}\u{1F1EC}",
"\u{1F1E7}\u{1F1ED}",
"\u{1F1E7}\u{1F1EE}",
"\u{1F1E7}\u{1F1EF}",
"\u{1F1E7}\u{1F1F1}",
"\u{1F1E7}\u{1F1F2}",
"\u{1F1E7}\u{1F1F3}",
"\u{1F1E7}\u{1F1F4}",
"\u{1F1E7}\u{1F1F6}",
"\u{1F1E7}\u{1F1F7}",
"\u{1F1E7}\u{1F1F8}",
"\u{1F1E7}\u{1F1F9}",
"\u{1F1E7}\u{1F1FB}",
"\u{1F1E7}\u{1F1FC}",
"\u{1F1E7}\u{1F1FE}",
"\u{1F1E7}\u{1F1FF}",
"\u{1F1E8}\u{1F1E6}",
"\u{1F1E8}\u{1F1E8}",
"\u{1F1E8}\u{1F1E9}",
"\u{1F1E8}\u{1F1EB}",
"\u{1F1E8}\u{1F1EC}",
"\u{1F1E8}\u{1F1ED}",
"\u{1F1E8}\u{1F1EE}",
"\u{1F1E8}\u{1F1F0}",
"\u{1F1E8}\u{1F1F1}",
"\u{1F1E8}\u{1F1F2}",
"\u{1F1E8}\u{1F1F3}",
"\u{1F1E8}\u{1F1F4}",
"\u{1F1E8}\u{1F1F5}",
"\u{1F1E8}\u{1F1F7}",
"\u{1F1E8}\u{1F1FA}",
"\u{1F1E8}\u{1F1FB}",
"\u{1F1E8}\u{1F1FC}",
"\u{1F1E8}\u{1F1FD}",
"\u{1F1E8}\u{1F1FE}",
"\u{1F1E8}\u{1F1FF}",
"\u{1F1E9}\u{1F1EA}",
"\u{1F1E9}\u{1F1EC}",
"\u{1F1E9}\u{1F1EF}",
"\u{1F1E9}\u{1F1F0}",
"\u{1F1E9}\u{1F1F2}",
"\u{1F1E9}\u{1F1F4}",
"\u{1F1E9}\u{1F1FF}",
"\u{1F1EA}\u{1F1E6}",
"\u{1F1EA}\u{1F1E8}",
"\u{1F1EA}\u{1F1EA}",
"\u{1F1EA}\u{1F1EC}",
"\u{1F1EA}\u{1F1ED}",
"\u{1F1EA}\u{1F1F7}",
"\u{1F1EA}\u{1F1F8}",
"\u{1F1EA}\u{1F1F9}",
"\u{1F1EA}\u{1F1FA}",
"\u{1F1EB}\u{1F1EE}",
"\u{1F1EB}\u{1F1EF}",
"\u{1F1EB}\u{1F1F0}",
"\u{1F1EB}\u{1F1F2}",
"\u{1F1EB}\u{1F1F4}",
"\u{1F1EB}\u{1F1F7}",
"\u{1F1EC}\u{1F1E6}",
"\u{1F1EC}\u{1F1E7}",
"\u{1F1EC}\u{1F1E9}",
"\u{1F1EC}\u{1F1EA}",
"\u{1F1EC}\u{1F1EB}",
"\u{1F1EC}\u{1F1EC}",
"\u{1F1EC}\u{1F1ED}",
"\u{1F1EC}\u{1F1EE}",
"\u{1F1EC}\u{1F1F1}",
"\u{1F1EC}\u{1F1F2}",
"\u{1F1EC}\u{1F1F3}",
"\u{1F1EC}\u{1F1F5}",
"\u{1F1EC}\u{1F1F6}",
"\u{1F1EC}\u{1F1F7}",
"\u{1F1EC}\u{1F1F8}",
"\u{1F1EC}\u{1F1F9}",
"\u{1F1EC}\u{1F1FA}",
"\u{1F1EC}\u{1F1FC}",
"\u{1F1EC}\u{1F1FE}",
"\u{1F1ED}\u{1F1F0}",
"\u{1F1ED}\u{1F1F2}",
"\u{1F1ED}\u{1F1F3}",
"\u{1F1ED}\u{1F1F7}",
"\u{1F1ED}\u{1F1F9}",
"\u{1F1ED}\u{1F1FA}",
"\u{1F1EE}\u{1F1E8}",
"\u{1F1EE}\u{1F1E9}",
"\u{1F1EE}\u{1F1EA}",
"\u{1F1EE}\u{1F1F1}",
"\u{1F1EE}\u{1F1F2}",
"\u{1F1EE}\u{1F1F3}",
"\u{1F1EE}\u{1F1F4}",
"\u{1F1EE}\u{1F1F6}",
"\u{1F1EE}\u{1F1F7}",
"\u{1F1EE}\u{1F1F8}",
"\u{1F1EE}\u{1F1F9}",
"\u{1F1EF}\u{1F1EA}",
"\u{1F1EF}\u{1F1F2}",
"\u{1F1EF}\u{1F1F4}",
"\u{1F1EF}\u{1F1F5}",
"\u{1F1F0}\u{1F1EA}",
"\u{1F1F0}\u{1F1EC}",
"\u{1F1F0}\u{1F1ED}",
"\u{1F1F0}\u{1F1EE}",
"\u{1F1F0}\u{1F1F2}",
"\u{1F1F0}\u{1F1F3}",
"\u{1F1F0}\u{1F1F5}",
"\u{1F1F0}\u{1F1F7}",
"\u{1F1F0}\u{1F1FC}",
"\u{1F1F0}\u{1F1FE}",
"\u{1F1F0}\u{1F1FF}",
"\u{1F1F1}\u{1F1E6}",
"\u{1F1F1}\u{1F1E7}",
"\u{1F1F1}\u{1F1E8}",
"\u{1F1F1}\u{1F1EE}",
"\u{1F1F1}\u{1F1F0}",
"\u{1F1F1}\u{1F1F7}",
"\u{1F1F1}\u{1F1F8}",
"\u{1F1F1}\u{1F1F9}",
"\u{1F1F1}\u{1F1FA}",
"\u{1F1F1}\u{1F1FB}",
"\u{1F1F1}\u{1F1FE}",
"\u{1F1F2}\u{1F1E6}",
"\u{1F1F2}\u{1F1E8}",
"\u{1F1F2}\u{1F1E9}",
"\u{1F1F2}\u{1F1EA}",
"\u{1F1F2}\u{1F1EB}",
"\u{1F1F2}\u{1F1EC}",
"\u{1F1F2}\u{1F1ED}",
"\u{1F1F2}\u{1F1F0}",
"\u{1F1F2}\u{1F1F1}",
"\u{1F1F2}\u{1F1F2}",
"\u{1F1F2}\u{1F1F3}",
"\u{1F1F2}\u{1F1F4}",
"\u{1F1F2}\u{1F1F5}",
"\u{1F1F2}\u{1F1F6}",
"\u{1F1F2}\u{1F1F7}",
"\u{1F1F2}\u{1F1F8}",
"\u{1F1F2}\u{1F1F9}",
"\u{1F1F2}\u{1F1FA}",
"\u{1F1F2}\u{1F1FB}",
"\u{1F1F2}\u{1F1FC}",
"\u{1F1F2}\u{1F1FD}",
"\u{1F1F2}\u{1F1FE}",
"\u{1F1F2}\u{1F1FF}",
"\u{1F1F3}\u{1F1E6}",
"\u{1F1F3}\u{1F1E8}",
"\u{1F1F3}\u{1F1EA}",
"\u{1F1F3}\u{1F1EB}",
"\u{1F1F3}\u{1F1EC}",
"\u{1F1F3}\u{1F1EE}",
"\u{1F1F3}\u{1F1F1}",
"\u{1F1F3}\u{1F1F4}",
"\u{1F1F3}\u{1F1F5}",
"\u{1F1F3}\u{1F1F7}",
"\u{1F1F3}\u{1F1FA}",
"\u{1F1F3}\u{1F1FF}",
"\u{1F1F4}\u{1F1F2}",
"\u{1F1F5}\u{1F1E6}",
"\u{1F1F5}\u{1F1EA}",
"\u{1F1F5}\u{1F1EB}",
"\u{1F1F5}\u{1F1EC}",
"\u{1F1F5}\u{1F1ED}",
"\u{1F1F5}\u{1F1F0}",
"\u{1F1F5}\u{1F1F1}",
"\u{1F1F5}\u{1F1F2}",
"\u{1F1F5}\u{1F1F3}",
"\u{1F1F5}\u{1F1F7}",
"\u{1F1F5}\u{1F1F8}",
"\u{1F1F5}\u{1F1F9}",
"\u{1F1F5}\u{1F1FC}",
"\u{1F1F5}\u{1F1FE}",
"\u{1F1F6}\u{1F1E6}",
"\u{1F1F7}\u{1F1EA}",
"\u{1F1F7}\u{1F1F4}",
"\u{1F1F7}\u{1F1F8}",
"\u{1F1F7}\u{1F1FA}",
"\u{1F1F7}\u{1F1FC}",
"\u{1F1F8}\u{1F1E6}",
"\u{1F1F8}\u{1F1E7}",
"\u{1F1F8}\u{1F1E8}",
"\u{1F1F8}\u{1F1E9}",
"\u{1F1F8}\u{1F1EA}",
"\u{1F1F8}\u{1F1EC}",
"\u{1F1F8}\u{1F1ED}",
"\u{1F1F8}\u{1F1EE}",
"\u{1F1F8}\u{1F1EF}",
"\u{1F1F8}\u{1F1F0}",
"\u{1F1F8}\u{1F1F1}",
"\u{1F1F8}\u{1F1F2}",
"\u{1F1F8}\u{1F1F3}",
"\u{1F1F8}\u{1F1F4}",
"\u{1F1F8}\u{1F1F7}",
"\u{1F1F8}\u{1F1F8}",
"\u{1F1F8}\u{1F1F9}",
"\u{1F1F8}\u{1F1FB}",
"\u{1F1F8}\u{1F1FD}",
"\u{1F1F8}\u{1F1FE}",
"\u{1F1F8}\u{1F1FF}",
"\u{1F1F9}\u{1F1E6}",
"\u{1F1F9}\u{1F1E8}",
"\u{1F1F9}\u{1F1E9}",
"\u{1F1F9}\u{1F1EB}",
"\u{1F1F9}\u{1F1EC}",
"\u{1F1F9}\u{1F1ED}",
"\u{1F1F9}\u{1F1EF}",
"\u{1F1F9}\u{1F1F0}",
"\u{1F1F9}\u{1F1F1}",
"\u{1F1F9}\u{1F1F2}",
"\u{1F1F9}\u{1F1F3}",
"\u{1F1F9}\u{1F1F4}",
"\u{1F1F9}\u{1F1F7}",
"\u{1F1F9}\u{1F1F9}",
"\u{1F1F9}\u{1F1FB}",
"\u{1F1F9}\u{1F1FC}",
"\u{1F1F9}\u{1F1FF}",
"\u{1F1FA}\u{1F1E6}",
"\u{1F1FA}\u{1F1EC}",
"\u{1F1FA}\u{1F1F2}",
"\u{1F1FA}\u{1F1F3}",
"\u{1F1FA}\u{1F1F8}",
"\u{1F1FA}\u{1F1FE}",
"\u{1F1FA}\u{1F1FF}",
"\u{1F1FB}\u{1F1E6}",
"\u{1F1FB}\u{1F1E8}",
"\u{1F1FB}\u{1F1EA}",
"\u{1F1FB}\u{1F1EC}",
"\u{1F1FB}\u{1F1EE}",
"\u{1F1FB}\u{1F1F3}",
"\u{1F1FB}\u{1F1FA}",
"\u{1F1FC}\u{1F1EB}",
"\u{1F1FC}\u{1F1F8}",
"\u{1F1FD}\u{1F1F0}",
"\u{1F1FE}\u{1F1EA}",
"\u{1F1FE}\u{1F1F9}",
"\u{1F1FF}\u{1F1E6}",
"\u{1F1FF}\u{1F1F2}",
"\u{1F1FF}\u{1F1FC}"
],
nonMatchStrings: [
"\u{1F1E8}",
"\u{1F1E6}",
"\u{1F1E9}",
"\u{1F1E6}",
"\u{1F1EA}",
"\u{1F1E6}",
"\u{1F1EB}",
"\u{1F1E6}",
"\u{1F1EC}",
"\u{1F1E6}"
],
});

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji_Modifier_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/[^\p{RGI_Emoji_Modifier_Sequence}]/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji_Modifier_Sequence` (property of strings) with `\P{…}` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\P{RGI_Emoji_Modifier_Sequence}/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `RGI_Emoji_Modifier_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-patterns-static-semantics-early-errors
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\p{RGI_Emoji_Modifier_Sequence}/u;

View File

@ -0,0 +1,678 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `RGI_Emoji_Modifier_Sequence` (property of strings)
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-static-semantics-unicodematchproperty-p
features: [regexp-unicode-property-escapes, regexp-v-flag]
includes: [regExpUtils.js]
---*/
testPropertyOfStrings({
regExp: /^\p{RGI_Emoji_Modifier_Sequence}+$/v,
expression: "\\p{RGI_Emoji_Modifier_Sequence}",
matchStrings: [
"\u261D\u{1F3FB}",
"\u261D\u{1F3FC}",
"\u261D\u{1F3FD}",
"\u261D\u{1F3FE}",
"\u261D\u{1F3FF}",
"\u26F9\u{1F3FB}",
"\u26F9\u{1F3FC}",
"\u26F9\u{1F3FD}",
"\u26F9\u{1F3FE}",
"\u26F9\u{1F3FF}",
"\u270A\u{1F3FB}",
"\u270A\u{1F3FC}",
"\u270A\u{1F3FD}",
"\u270A\u{1F3FE}",
"\u270A\u{1F3FF}",
"\u270B\u{1F3FB}",
"\u270B\u{1F3FC}",
"\u270B\u{1F3FD}",
"\u270B\u{1F3FE}",
"\u270B\u{1F3FF}",
"\u270C\u{1F3FB}",
"\u270C\u{1F3FC}",
"\u270C\u{1F3FD}",
"\u270C\u{1F3FE}",
"\u270C\u{1F3FF}",
"\u270D\u{1F3FB}",
"\u270D\u{1F3FC}",
"\u270D\u{1F3FD}",
"\u270D\u{1F3FE}",
"\u270D\u{1F3FF}",
"\u{1F385}\u{1F3FB}",
"\u{1F385}\u{1F3FC}",
"\u{1F385}\u{1F3FD}",
"\u{1F385}\u{1F3FE}",
"\u{1F385}\u{1F3FF}",
"\u{1F3C2}\u{1F3FB}",
"\u{1F3C2}\u{1F3FC}",
"\u{1F3C2}\u{1F3FD}",
"\u{1F3C2}\u{1F3FE}",
"\u{1F3C2}\u{1F3FF}",
"\u{1F3C3}\u{1F3FB}",
"\u{1F3C3}\u{1F3FC}",
"\u{1F3C3}\u{1F3FD}",
"\u{1F3C3}\u{1F3FE}",
"\u{1F3C3}\u{1F3FF}",
"\u{1F3C4}\u{1F3FB}",
"\u{1F3C4}\u{1F3FC}",
"\u{1F3C4}\u{1F3FD}",
"\u{1F3C4}\u{1F3FE}",
"\u{1F3C4}\u{1F3FF}",
"\u{1F3C7}\u{1F3FB}",
"\u{1F3C7}\u{1F3FC}",
"\u{1F3C7}\u{1F3FD}",
"\u{1F3C7}\u{1F3FE}",
"\u{1F3C7}\u{1F3FF}",
"\u{1F3CA}\u{1F3FB}",
"\u{1F3CA}\u{1F3FC}",
"\u{1F3CA}\u{1F3FD}",
"\u{1F3CA}\u{1F3FE}",
"\u{1F3CA}\u{1F3FF}",
"\u{1F3CB}\u{1F3FB}",
"\u{1F3CB}\u{1F3FC}",
"\u{1F3CB}\u{1F3FD}",
"\u{1F3CB}\u{1F3FE}",
"\u{1F3CB}\u{1F3FF}",
"\u{1F3CC}\u{1F3FB}",
"\u{1F3CC}\u{1F3FC}",
"\u{1F3CC}\u{1F3FD}",
"\u{1F3CC}\u{1F3FE}",
"\u{1F3CC}\u{1F3FF}",
"\u{1F442}\u{1F3FB}",
"\u{1F442}\u{1F3FC}",
"\u{1F442}\u{1F3FD}",
"\u{1F442}\u{1F3FE}",
"\u{1F442}\u{1F3FF}",
"\u{1F443}\u{1F3FB}",
"\u{1F443}\u{1F3FC}",
"\u{1F443}\u{1F3FD}",
"\u{1F443}\u{1F3FE}",
"\u{1F443}\u{1F3FF}",
"\u{1F446}\u{1F3FB}",
"\u{1F446}\u{1F3FC}",
"\u{1F446}\u{1F3FD}",
"\u{1F446}\u{1F3FE}",
"\u{1F446}\u{1F3FF}",
"\u{1F447}\u{1F3FB}",
"\u{1F447}\u{1F3FC}",
"\u{1F447}\u{1F3FD}",
"\u{1F447}\u{1F3FE}",
"\u{1F447}\u{1F3FF}",
"\u{1F448}\u{1F3FB}",
"\u{1F448}\u{1F3FC}",
"\u{1F448}\u{1F3FD}",
"\u{1F448}\u{1F3FE}",
"\u{1F448}\u{1F3FF}",
"\u{1F449}\u{1F3FB}",
"\u{1F449}\u{1F3FC}",
"\u{1F449}\u{1F3FD}",
"\u{1F449}\u{1F3FE}",
"\u{1F449}\u{1F3FF}",
"\u{1F44A}\u{1F3FB}",
"\u{1F44A}\u{1F3FC}",
"\u{1F44A}\u{1F3FD}",
"\u{1F44A}\u{1F3FE}",
"\u{1F44A}\u{1F3FF}",
"\u{1F44B}\u{1F3FB}",
"\u{1F44B}\u{1F3FC}",
"\u{1F44B}\u{1F3FD}",
"\u{1F44B}\u{1F3FE}",
"\u{1F44B}\u{1F3FF}",
"\u{1F44C}\u{1F3FB}",
"\u{1F44C}\u{1F3FC}",
"\u{1F44C}\u{1F3FD}",
"\u{1F44C}\u{1F3FE}",
"\u{1F44C}\u{1F3FF}",
"\u{1F44D}\u{1F3FB}",
"\u{1F44D}\u{1F3FC}",
"\u{1F44D}\u{1F3FD}",
"\u{1F44D}\u{1F3FE}",
"\u{1F44D}\u{1F3FF}",
"\u{1F44E}\u{1F3FB}",
"\u{1F44E}\u{1F3FC}",
"\u{1F44E}\u{1F3FD}",
"\u{1F44E}\u{1F3FE}",
"\u{1F44E}\u{1F3FF}",
"\u{1F44F}\u{1F3FB}",
"\u{1F44F}\u{1F3FC}",
"\u{1F44F}\u{1F3FD}",
"\u{1F44F}\u{1F3FE}",
"\u{1F44F}\u{1F3FF}",
"\u{1F450}\u{1F3FB}",
"\u{1F450}\u{1F3FC}",
"\u{1F450}\u{1F3FD}",
"\u{1F450}\u{1F3FE}",
"\u{1F450}\u{1F3FF}",
"\u{1F466}\u{1F3FB}",
"\u{1F466}\u{1F3FC}",
"\u{1F466}\u{1F3FD}",
"\u{1F466}\u{1F3FE}",
"\u{1F466}\u{1F3FF}",
"\u{1F467}\u{1F3FB}",
"\u{1F467}\u{1F3FC}",
"\u{1F467}\u{1F3FD}",
"\u{1F467}\u{1F3FE}",
"\u{1F467}\u{1F3FF}",
"\u{1F468}\u{1F3FB}",
"\u{1F468}\u{1F3FC}",
"\u{1F468}\u{1F3FD}",
"\u{1F468}\u{1F3FE}",
"\u{1F468}\u{1F3FF}",
"\u{1F469}\u{1F3FB}",
"\u{1F469}\u{1F3FC}",
"\u{1F469}\u{1F3FD}",
"\u{1F469}\u{1F3FE}",
"\u{1F469}\u{1F3FF}",
"\u{1F46B}\u{1F3FB}",
"\u{1F46B}\u{1F3FC}",
"\u{1F46B}\u{1F3FD}",
"\u{1F46B}\u{1F3FE}",
"\u{1F46B}\u{1F3FF}",
"\u{1F46C}\u{1F3FB}",
"\u{1F46C}\u{1F3FC}",
"\u{1F46C}\u{1F3FD}",
"\u{1F46C}\u{1F3FE}",
"\u{1F46C}\u{1F3FF}",
"\u{1F46D}\u{1F3FB}",
"\u{1F46D}\u{1F3FC}",
"\u{1F46D}\u{1F3FD}",
"\u{1F46D}\u{1F3FE}",
"\u{1F46D}\u{1F3FF}",
"\u{1F46E}\u{1F3FB}",
"\u{1F46E}\u{1F3FC}",
"\u{1F46E}\u{1F3FD}",
"\u{1F46E}\u{1F3FE}",
"\u{1F46E}\u{1F3FF}",
"\u{1F470}\u{1F3FB}",
"\u{1F470}\u{1F3FC}",
"\u{1F470}\u{1F3FD}",
"\u{1F470}\u{1F3FE}",
"\u{1F470}\u{1F3FF}",
"\u{1F471}\u{1F3FB}",
"\u{1F471}\u{1F3FC}",
"\u{1F471}\u{1F3FD}",
"\u{1F471}\u{1F3FE}",
"\u{1F471}\u{1F3FF}",
"\u{1F472}\u{1F3FB}",
"\u{1F472}\u{1F3FC}",
"\u{1F472}\u{1F3FD}",
"\u{1F472}\u{1F3FE}",
"\u{1F472}\u{1F3FF}",
"\u{1F473}\u{1F3FB}",
"\u{1F473}\u{1F3FC}",
"\u{1F473}\u{1F3FD}",
"\u{1F473}\u{1F3FE}",
"\u{1F473}\u{1F3FF}",
"\u{1F474}\u{1F3FB}",
"\u{1F474}\u{1F3FC}",
"\u{1F474}\u{1F3FD}",
"\u{1F474}\u{1F3FE}",
"\u{1F474}\u{1F3FF}",
"\u{1F475}\u{1F3FB}",
"\u{1F475}\u{1F3FC}",
"\u{1F475}\u{1F3FD}",
"\u{1F475}\u{1F3FE}",
"\u{1F475}\u{1F3FF}",
"\u{1F476}\u{1F3FB}",
"\u{1F476}\u{1F3FC}",
"\u{1F476}\u{1F3FD}",
"\u{1F476}\u{1F3FE}",
"\u{1F476}\u{1F3FF}",
"\u{1F477}\u{1F3FB}",
"\u{1F477}\u{1F3FC}",
"\u{1F477}\u{1F3FD}",
"\u{1F477}\u{1F3FE}",
"\u{1F477}\u{1F3FF}",
"\u{1F478}\u{1F3FB}",
"\u{1F478}\u{1F3FC}",
"\u{1F478}\u{1F3FD}",
"\u{1F478}\u{1F3FE}",
"\u{1F478}\u{1F3FF}",
"\u{1F47C}\u{1F3FB}",
"\u{1F47C}\u{1F3FC}",
"\u{1F47C}\u{1F3FD}",
"\u{1F47C}\u{1F3FE}",
"\u{1F47C}\u{1F3FF}",
"\u{1F481}\u{1F3FB}",
"\u{1F481}\u{1F3FC}",
"\u{1F481}\u{1F3FD}",
"\u{1F481}\u{1F3FE}",
"\u{1F481}\u{1F3FF}",
"\u{1F482}\u{1F3FB}",
"\u{1F482}\u{1F3FC}",
"\u{1F482}\u{1F3FD}",
"\u{1F482}\u{1F3FE}",
"\u{1F482}\u{1F3FF}",
"\u{1F483}\u{1F3FB}",
"\u{1F483}\u{1F3FC}",
"\u{1F483}\u{1F3FD}",
"\u{1F483}\u{1F3FE}",
"\u{1F483}\u{1F3FF}",
"\u{1F485}\u{1F3FB}",
"\u{1F485}\u{1F3FC}",
"\u{1F485}\u{1F3FD}",
"\u{1F485}\u{1F3FE}",
"\u{1F485}\u{1F3FF}",
"\u{1F486}\u{1F3FB}",
"\u{1F486}\u{1F3FC}",
"\u{1F486}\u{1F3FD}",
"\u{1F486}\u{1F3FE}",
"\u{1F486}\u{1F3FF}",
"\u{1F487}\u{1F3FB}",
"\u{1F487}\u{1F3FC}",
"\u{1F487}\u{1F3FD}",
"\u{1F487}\u{1F3FE}",
"\u{1F487}\u{1F3FF}",
"\u{1F48F}\u{1F3FB}",
"\u{1F48F}\u{1F3FC}",
"\u{1F48F}\u{1F3FD}",
"\u{1F48F}\u{1F3FE}",
"\u{1F48F}\u{1F3FF}",
"\u{1F491}\u{1F3FB}",
"\u{1F491}\u{1F3FC}",
"\u{1F491}\u{1F3FD}",
"\u{1F491}\u{1F3FE}",
"\u{1F491}\u{1F3FF}",
"\u{1F4AA}\u{1F3FB}",
"\u{1F4AA}\u{1F3FC}",
"\u{1F4AA}\u{1F3FD}",
"\u{1F4AA}\u{1F3FE}",
"\u{1F4AA}\u{1F3FF}",
"\u{1F574}\u{1F3FB}",
"\u{1F574}\u{1F3FC}",
"\u{1F574}\u{1F3FD}",
"\u{1F574}\u{1F3FE}",
"\u{1F574}\u{1F3FF}",
"\u{1F575}\u{1F3FB}",
"\u{1F575}\u{1F3FC}",
"\u{1F575}\u{1F3FD}",
"\u{1F575}\u{1F3FE}",
"\u{1F575}\u{1F3FF}",
"\u{1F57A}\u{1F3FB}",
"\u{1F57A}\u{1F3FC}",
"\u{1F57A}\u{1F3FD}",
"\u{1F57A}\u{1F3FE}",
"\u{1F57A}\u{1F3FF}",
"\u{1F590}\u{1F3FB}",
"\u{1F590}\u{1F3FC}",
"\u{1F590}\u{1F3FD}",
"\u{1F590}\u{1F3FE}",
"\u{1F590}\u{1F3FF}",
"\u{1F595}\u{1F3FB}",
"\u{1F595}\u{1F3FC}",
"\u{1F595}\u{1F3FD}",
"\u{1F595}\u{1F3FE}",
"\u{1F595}\u{1F3FF}",
"\u{1F596}\u{1F3FB}",
"\u{1F596}\u{1F3FC}",
"\u{1F596}\u{1F3FD}",
"\u{1F596}\u{1F3FE}",
"\u{1F596}\u{1F3FF}",
"\u{1F645}\u{1F3FB}",
"\u{1F645}\u{1F3FC}",
"\u{1F645}\u{1F3FD}",
"\u{1F645}\u{1F3FE}",
"\u{1F645}\u{1F3FF}",
"\u{1F646}\u{1F3FB}",
"\u{1F646}\u{1F3FC}",
"\u{1F646}\u{1F3FD}",
"\u{1F646}\u{1F3FE}",
"\u{1F646}\u{1F3FF}",
"\u{1F647}\u{1F3FB}",
"\u{1F647}\u{1F3FC}",
"\u{1F647}\u{1F3FD}",
"\u{1F647}\u{1F3FE}",
"\u{1F647}\u{1F3FF}",
"\u{1F64B}\u{1F3FB}",
"\u{1F64B}\u{1F3FC}",
"\u{1F64B}\u{1F3FD}",
"\u{1F64B}\u{1F3FE}",
"\u{1F64B}\u{1F3FF}",
"\u{1F64C}\u{1F3FB}",
"\u{1F64C}\u{1F3FC}",
"\u{1F64C}\u{1F3FD}",
"\u{1F64C}\u{1F3FE}",
"\u{1F64C}\u{1F3FF}",
"\u{1F64D}\u{1F3FB}",
"\u{1F64D}\u{1F3FC}",
"\u{1F64D}\u{1F3FD}",
"\u{1F64D}\u{1F3FE}",
"\u{1F64D}\u{1F3FF}",
"\u{1F64E}\u{1F3FB}",
"\u{1F64E}\u{1F3FC}",
"\u{1F64E}\u{1F3FD}",
"\u{1F64E}\u{1F3FE}",
"\u{1F64E}\u{1F3FF}",
"\u{1F64F}\u{1F3FB}",
"\u{1F64F}\u{1F3FC}",
"\u{1F64F}\u{1F3FD}",
"\u{1F64F}\u{1F3FE}",
"\u{1F64F}\u{1F3FF}",
"\u{1F6A3}\u{1F3FB}",
"\u{1F6A3}\u{1F3FC}",
"\u{1F6A3}\u{1F3FD}",
"\u{1F6A3}\u{1F3FE}",
"\u{1F6A3}\u{1F3FF}",
"\u{1F6B4}\u{1F3FB}",
"\u{1F6B4}\u{1F3FC}",
"\u{1F6B4}\u{1F3FD}",
"\u{1F6B4}\u{1F3FE}",
"\u{1F6B4}\u{1F3FF}",
"\u{1F6B5}\u{1F3FB}",
"\u{1F6B5}\u{1F3FC}",
"\u{1F6B5}\u{1F3FD}",
"\u{1F6B5}\u{1F3FE}",
"\u{1F6B5}\u{1F3FF}",
"\u{1F6B6}\u{1F3FB}",
"\u{1F6B6}\u{1F3FC}",
"\u{1F6B6}\u{1F3FD}",
"\u{1F6B6}\u{1F3FE}",
"\u{1F6B6}\u{1F3FF}",
"\u{1F6C0}\u{1F3FB}",
"\u{1F6C0}\u{1F3FC}",
"\u{1F6C0}\u{1F3FD}",
"\u{1F6C0}\u{1F3FE}",
"\u{1F6C0}\u{1F3FF}",
"\u{1F6CC}\u{1F3FB}",
"\u{1F6CC}\u{1F3FC}",
"\u{1F6CC}\u{1F3FD}",
"\u{1F6CC}\u{1F3FE}",
"\u{1F6CC}\u{1F3FF}",
"\u{1F90C}\u{1F3FB}",
"\u{1F90C}\u{1F3FC}",
"\u{1F90C}\u{1F3FD}",
"\u{1F90C}\u{1F3FE}",
"\u{1F90C}\u{1F3FF}",
"\u{1F90F}\u{1F3FB}",
"\u{1F90F}\u{1F3FC}",
"\u{1F90F}\u{1F3FD}",
"\u{1F90F}\u{1F3FE}",
"\u{1F90F}\u{1F3FF}",
"\u{1F918}\u{1F3FB}",
"\u{1F918}\u{1F3FC}",
"\u{1F918}\u{1F3FD}",
"\u{1F918}\u{1F3FE}",
"\u{1F918}\u{1F3FF}",
"\u{1F919}\u{1F3FB}",
"\u{1F919}\u{1F3FC}",
"\u{1F919}\u{1F3FD}",
"\u{1F919}\u{1F3FE}",
"\u{1F919}\u{1F3FF}",
"\u{1F91A}\u{1F3FB}",
"\u{1F91A}\u{1F3FC}",
"\u{1F91A}\u{1F3FD}",
"\u{1F91A}\u{1F3FE}",
"\u{1F91A}\u{1F3FF}",
"\u{1F91B}\u{1F3FB}",
"\u{1F91B}\u{1F3FC}",
"\u{1F91B}\u{1F3FD}",
"\u{1F91B}\u{1F3FE}",
"\u{1F91B}\u{1F3FF}",
"\u{1F91C}\u{1F3FB}",
"\u{1F91C}\u{1F3FC}",
"\u{1F91C}\u{1F3FD}",
"\u{1F91C}\u{1F3FE}",
"\u{1F91C}\u{1F3FF}",
"\u{1F91D}\u{1F3FB}",
"\u{1F91D}\u{1F3FC}",
"\u{1F91D}\u{1F3FD}",
"\u{1F91D}\u{1F3FE}",
"\u{1F91D}\u{1F3FF}",
"\u{1F91E}\u{1F3FB}",
"\u{1F91E}\u{1F3FC}",
"\u{1F91E}\u{1F3FD}",
"\u{1F91E}\u{1F3FE}",
"\u{1F91E}\u{1F3FF}",
"\u{1F91F}\u{1F3FB}",
"\u{1F91F}\u{1F3FC}",
"\u{1F91F}\u{1F3FD}",
"\u{1F91F}\u{1F3FE}",
"\u{1F91F}\u{1F3FF}",
"\u{1F926}\u{1F3FB}",
"\u{1F926}\u{1F3FC}",
"\u{1F926}\u{1F3FD}",
"\u{1F926}\u{1F3FE}",
"\u{1F926}\u{1F3FF}",
"\u{1F930}\u{1F3FB}",
"\u{1F930}\u{1F3FC}",
"\u{1F930}\u{1F3FD}",
"\u{1F930}\u{1F3FE}",
"\u{1F930}\u{1F3FF}",
"\u{1F931}\u{1F3FB}",
"\u{1F931}\u{1F3FC}",
"\u{1F931}\u{1F3FD}",
"\u{1F931}\u{1F3FE}",
"\u{1F931}\u{1F3FF}",
"\u{1F932}\u{1F3FB}",
"\u{1F932}\u{1F3FC}",
"\u{1F932}\u{1F3FD}",
"\u{1F932}\u{1F3FE}",
"\u{1F932}\u{1F3FF}",
"\u{1F933}\u{1F3FB}",
"\u{1F933}\u{1F3FC}",
"\u{1F933}\u{1F3FD}",
"\u{1F933}\u{1F3FE}",
"\u{1F933}\u{1F3FF}",
"\u{1F934}\u{1F3FB}",
"\u{1F934}\u{1F3FC}",
"\u{1F934}\u{1F3FD}",
"\u{1F934}\u{1F3FE}",
"\u{1F934}\u{1F3FF}",
"\u{1F935}\u{1F3FB}",
"\u{1F935}\u{1F3FC}",
"\u{1F935}\u{1F3FD}",
"\u{1F935}\u{1F3FE}",
"\u{1F935}\u{1F3FF}",
"\u{1F936}\u{1F3FB}",
"\u{1F936}\u{1F3FC}",
"\u{1F936}\u{1F3FD}",
"\u{1F936}\u{1F3FE}",
"\u{1F936}\u{1F3FF}",
"\u{1F937}\u{1F3FB}",
"\u{1F937}\u{1F3FC}",
"\u{1F937}\u{1F3FD}",
"\u{1F937}\u{1F3FE}",
"\u{1F937}\u{1F3FF}",
"\u{1F938}\u{1F3FB}",
"\u{1F938}\u{1F3FC}",
"\u{1F938}\u{1F3FD}",
"\u{1F938}\u{1F3FE}",
"\u{1F938}\u{1F3FF}",
"\u{1F939}\u{1F3FB}",
"\u{1F939}\u{1F3FC}",
"\u{1F939}\u{1F3FD}",
"\u{1F939}\u{1F3FE}",
"\u{1F939}\u{1F3FF}",
"\u{1F93D}\u{1F3FB}",
"\u{1F93D}\u{1F3FC}",
"\u{1F93D}\u{1F3FD}",
"\u{1F93D}\u{1F3FE}",
"\u{1F93D}\u{1F3FF}",
"\u{1F93E}\u{1F3FB}",
"\u{1F93E}\u{1F3FC}",
"\u{1F93E}\u{1F3FD}",
"\u{1F93E}\u{1F3FE}",
"\u{1F93E}\u{1F3FF}",
"\u{1F977}\u{1F3FB}",
"\u{1F977}\u{1F3FC}",
"\u{1F977}\u{1F3FD}",
"\u{1F977}\u{1F3FE}",
"\u{1F977}\u{1F3FF}",
"\u{1F9B5}\u{1F3FB}",
"\u{1F9B5}\u{1F3FC}",
"\u{1F9B5}\u{1F3FD}",
"\u{1F9B5}\u{1F3FE}",
"\u{1F9B5}\u{1F3FF}",
"\u{1F9B6}\u{1F3FB}",
"\u{1F9B6}\u{1F3FC}",
"\u{1F9B6}\u{1F3FD}",
"\u{1F9B6}\u{1F3FE}",
"\u{1F9B6}\u{1F3FF}",
"\u{1F9B8}\u{1F3FB}",
"\u{1F9B8}\u{1F3FC}",
"\u{1F9B8}\u{1F3FD}",
"\u{1F9B8}\u{1F3FE}",
"\u{1F9B8}\u{1F3FF}",
"\u{1F9B9}\u{1F3FB}",
"\u{1F9B9}\u{1F3FC}",
"\u{1F9B9}\u{1F3FD}",
"\u{1F9B9}\u{1F3FE}",
"\u{1F9B9}\u{1F3FF}",
"\u{1F9BB}\u{1F3FB}",
"\u{1F9BB}\u{1F3FC}",
"\u{1F9BB}\u{1F3FD}",
"\u{1F9BB}\u{1F3FE}",
"\u{1F9BB}\u{1F3FF}",
"\u{1F9CD}\u{1F3FB}",
"\u{1F9CD}\u{1F3FC}",
"\u{1F9CD}\u{1F3FD}",
"\u{1F9CD}\u{1F3FE}",
"\u{1F9CD}\u{1F3FF}",
"\u{1F9CE}\u{1F3FB}",
"\u{1F9CE}\u{1F3FC}",
"\u{1F9CE}\u{1F3FD}",
"\u{1F9CE}\u{1F3FE}",
"\u{1F9CE}\u{1F3FF}",
"\u{1F9CF}\u{1F3FB}",
"\u{1F9CF}\u{1F3FC}",
"\u{1F9CF}\u{1F3FD}",
"\u{1F9CF}\u{1F3FE}",
"\u{1F9CF}\u{1F3FF}",
"\u{1F9D1}\u{1F3FB}",
"\u{1F9D1}\u{1F3FC}",
"\u{1F9D1}\u{1F3FD}",
"\u{1F9D1}\u{1F3FE}",
"\u{1F9D1}\u{1F3FF}",
"\u{1F9D2}\u{1F3FB}",
"\u{1F9D2}\u{1F3FC}",
"\u{1F9D2}\u{1F3FD}",
"\u{1F9D2}\u{1F3FE}",
"\u{1F9D2}\u{1F3FF}",
"\u{1F9D3}\u{1F3FB}",
"\u{1F9D3}\u{1F3FC}",
"\u{1F9D3}\u{1F3FD}",
"\u{1F9D3}\u{1F3FE}",
"\u{1F9D3}\u{1F3FF}",
"\u{1F9D4}\u{1F3FB}",
"\u{1F9D4}\u{1F3FC}",
"\u{1F9D4}\u{1F3FD}",
"\u{1F9D4}\u{1F3FE}",
"\u{1F9D4}\u{1F3FF}",
"\u{1F9D5}\u{1F3FB}",
"\u{1F9D5}\u{1F3FC}",
"\u{1F9D5}\u{1F3FD}",
"\u{1F9D5}\u{1F3FE}",
"\u{1F9D5}\u{1F3FF}",
"\u{1F9D6}\u{1F3FB}",
"\u{1F9D6}\u{1F3FC}",
"\u{1F9D6}\u{1F3FD}",
"\u{1F9D6}\u{1F3FE}",
"\u{1F9D6}\u{1F3FF}",
"\u{1F9D7}\u{1F3FB}",
"\u{1F9D7}\u{1F3FC}",
"\u{1F9D7}\u{1F3FD}",
"\u{1F9D7}\u{1F3FE}",
"\u{1F9D7}\u{1F3FF}",
"\u{1F9D8}\u{1F3FB}",
"\u{1F9D8}\u{1F3FC}",
"\u{1F9D8}\u{1F3FD}",
"\u{1F9D8}\u{1F3FE}",
"\u{1F9D8}\u{1F3FF}",
"\u{1F9D9}\u{1F3FB}",
"\u{1F9D9}\u{1F3FC}",
"\u{1F9D9}\u{1F3FD}",
"\u{1F9D9}\u{1F3FE}",
"\u{1F9D9}\u{1F3FF}",
"\u{1F9DA}\u{1F3FB}",
"\u{1F9DA}\u{1F3FC}",
"\u{1F9DA}\u{1F3FD}",
"\u{1F9DA}\u{1F3FE}",
"\u{1F9DA}\u{1F3FF}",
"\u{1F9DB}\u{1F3FB}",
"\u{1F9DB}\u{1F3FC}",
"\u{1F9DB}\u{1F3FD}",
"\u{1F9DB}\u{1F3FE}",
"\u{1F9DB}\u{1F3FF}",
"\u{1F9DC}\u{1F3FB}",
"\u{1F9DC}\u{1F3FC}",
"\u{1F9DC}\u{1F3FD}",
"\u{1F9DC}\u{1F3FE}",
"\u{1F9DC}\u{1F3FF}",
"\u{1F9DD}\u{1F3FB}",
"\u{1F9DD}\u{1F3FC}",
"\u{1F9DD}\u{1F3FD}",
"\u{1F9DD}\u{1F3FE}",
"\u{1F9DD}\u{1F3FF}",
"\u{1FAC3}\u{1F3FB}",
"\u{1FAC3}\u{1F3FC}",
"\u{1FAC3}\u{1F3FD}",
"\u{1FAC3}\u{1F3FE}",
"\u{1FAC3}\u{1F3FF}",
"\u{1FAC4}\u{1F3FB}",
"\u{1FAC4}\u{1F3FC}",
"\u{1FAC4}\u{1F3FD}",
"\u{1FAC4}\u{1F3FE}",
"\u{1FAC4}\u{1F3FF}",
"\u{1FAC5}\u{1F3FB}",
"\u{1FAC5}\u{1F3FC}",
"\u{1FAC5}\u{1F3FD}",
"\u{1FAC5}\u{1F3FE}",
"\u{1FAC5}\u{1F3FF}",
"\u{1FAF0}\u{1F3FB}",
"\u{1FAF0}\u{1F3FC}",
"\u{1FAF0}\u{1F3FD}",
"\u{1FAF0}\u{1F3FE}",
"\u{1FAF0}\u{1F3FF}",
"\u{1FAF1}\u{1F3FB}",
"\u{1FAF1}\u{1F3FC}",
"\u{1FAF1}\u{1F3FD}",
"\u{1FAF1}\u{1F3FE}",
"\u{1FAF1}\u{1F3FF}",
"\u{1FAF2}\u{1F3FB}",
"\u{1FAF2}\u{1F3FC}",
"\u{1FAF2}\u{1F3FD}",
"\u{1FAF2}\u{1F3FE}",
"\u{1FAF2}\u{1F3FF}",
"\u{1FAF3}\u{1F3FB}",
"\u{1FAF3}\u{1F3FC}",
"\u{1FAF3}\u{1F3FD}",
"\u{1FAF3}\u{1F3FE}",
"\u{1FAF3}\u{1F3FF}",
"\u{1FAF4}\u{1F3FB}",
"\u{1FAF4}\u{1F3FC}",
"\u{1FAF4}\u{1F3FD}",
"\u{1FAF4}\u{1F3FE}",
"\u{1FAF4}\u{1F3FF}",
"\u{1FAF5}\u{1F3FB}",
"\u{1FAF5}\u{1F3FC}",
"\u{1FAF5}\u{1F3FD}",
"\u{1FAF5}\u{1F3FE}",
"\u{1FAF5}\u{1F3FF}",
"\u{1FAF6}\u{1F3FB}",
"\u{1FAF6}\u{1F3FC}",
"\u{1FAF6}\u{1F3FD}",
"\u{1FAF6}\u{1F3FE}",
"\u{1FAF6}\u{1F3FF}"
],
nonMatchStrings: [
"\u{1F3FB}",
"\u261D",
"\u{1F3FC}",
"\u261D",
"\u{1F3FD}",
"\u261D",
"\u{1F3FE}",
"\u261D",
"\u{1F3FF}",
"\u261D"
],
});

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji_Tag_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/[^\p{RGI_Emoji_Tag_Sequence}]/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji_Tag_Sequence` (property of strings) with `\P{…}` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\P{RGI_Emoji_Tag_Sequence}/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `RGI_Emoji_Tag_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-patterns-static-semantics-early-errors
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\p{RGI_Emoji_Tag_Sequence}/u;

View File

@ -0,0 +1,35 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `RGI_Emoji_Tag_Sequence` (property of strings)
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-static-semantics-unicodematchproperty-p
features: [regexp-unicode-property-escapes, regexp-v-flag]
includes: [regExpUtils.js]
---*/
testPropertyOfStrings({
regExp: /^\p{RGI_Emoji_Tag_Sequence}+$/v,
expression: "\\p{RGI_Emoji_Tag_Sequence}",
matchStrings: [
"\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}",
"\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}",
"\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}"
],
nonMatchStrings: [
"\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}",
"\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}",
"\u{1F3F4}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}",
"\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}",
"\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}",
"\u{1F3F4}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}",
"\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}",
"\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}",
"\u{1F3F4}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}"
],
});

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji_ZWJ_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/[^\p{RGI_Emoji_ZWJ_Sequence}]/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Negating Unicode property escapes for `RGI_Emoji_ZWJ_Sequence` (property of strings) with `\P{…}` throws an early error.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-isvalidregularexpressionliteral
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\P{RGI_Emoji_ZWJ_Sequence}/v;

View File

@ -0,0 +1,20 @@
// Copyright 2021 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Unicode property escapes for `RGI_Emoji_ZWJ_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
info: |
Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
Unicode v14.0.0
esid: sec-patterns-static-semantics-early-errors
features: [regexp-unicode-property-escapes, regexp-v-flag]
negative:
phase: parse
type: SyntaxError
---*/
$DONOTEVALUATE();
/\p{RGI_Emoji_ZWJ_Sequence}/u;