Add tests for Unicode 17 identifiers and unicodeSets

Issue: https://github.com/tc39/ecma262/issues/3688
This commit is contained in:
Mathias Bynens 2025-09-10 07:37:32 +02:00 committed by Philip Chimento
parent 26058a01fd
commit 27d796286c
9 changed files with 18902 additions and 0 deletions

View File

@ -0,0 +1,184 @@
// Copyright 2025 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
description: >
Test that Unicode property escapes for `RGI_Emoji` (property of strings)
match Emoji 17.0 strings.
info: |
Generated by https://github.com/mathiasbynens/caniunicode
esid: sec-static-semantics-unicodematchproperty-p
features: [regexp-unicode-property-escapes, regexp-v-flag]
includes: [regExpUtils.js]
---*/
testPropertyOfStrings({
regExp: /^\p{RGI_Emoji}+$/v,
expression: "\\p{RGI_Emoji}",
matchStrings: [
"\u{1F468}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FC}",
"\u{1F468}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FD}",
"\u{1F468}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FE}",
"\u{1F468}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FF}",
"\u{1F468}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FC}",
"\u{1F468}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FD}",
"\u{1F468}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FE}",
"\u{1F468}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FF}",
"\u{1F468}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FB}",
"\u{1F468}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FD}",
"\u{1F468}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FE}",
"\u{1F468}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FF}",
"\u{1F468}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FB}",
"\u{1F468}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FD}",
"\u{1F468}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FE}",
"\u{1F468}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FF}",
"\u{1F468}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FB}",
"\u{1F468}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FC}",
"\u{1F468}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FE}",
"\u{1F468}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FF}",
"\u{1F468}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FB}",
"\u{1F468}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FC}",
"\u{1F468}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FE}",
"\u{1F468}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FF}",
"\u{1F468}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FB}",
"\u{1F468}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FC}",
"\u{1F468}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FD}",
"\u{1F468}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FF}",
"\u{1F468}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FB}",
"\u{1F468}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FC}",
"\u{1F468}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FD}",
"\u{1F468}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FF}",
"\u{1F468}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FB}",
"\u{1F468}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FC}",
"\u{1F468}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FD}",
"\u{1F468}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F468}\u{1F3FE}",
"\u{1F468}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FB}",
"\u{1F468}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FC}",
"\u{1F468}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FD}",
"\u{1F468}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F468}\u{1F3FE}",
"\u{1F469}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FC}",
"\u{1F469}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FD}",
"\u{1F469}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FE}",
"\u{1F469}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FF}",
"\u{1F469}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FC}",
"\u{1F469}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FD}",
"\u{1F469}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FE}",
"\u{1F469}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FF}",
"\u{1F469}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FB}",
"\u{1F469}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FD}",
"\u{1F469}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FE}",
"\u{1F469}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FF}",
"\u{1F469}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FB}",
"\u{1F469}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FD}",
"\u{1F469}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FE}",
"\u{1F469}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FF}",
"\u{1F469}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FB}",
"\u{1F469}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FC}",
"\u{1F469}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FE}",
"\u{1F469}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FF}",
"\u{1F469}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FB}",
"\u{1F469}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FC}",
"\u{1F469}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FE}",
"\u{1F469}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FF}",
"\u{1F469}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FB}",
"\u{1F469}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FC}",
"\u{1F469}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FD}",
"\u{1F469}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FF}",
"\u{1F469}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FB}",
"\u{1F469}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FC}",
"\u{1F469}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FD}",
"\u{1F469}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FF}",
"\u{1F469}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FB}",
"\u{1F469}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FC}",
"\u{1F469}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FD}",
"\u{1F469}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F469}\u{1F3FE}",
"\u{1F469}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FB}",
"\u{1F469}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FC}",
"\u{1F469}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FD}",
"\u{1F469}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F469}\u{1F3FE}",
"\u{1F46F}\u{1F3FB}",
"\u{1F46F}\u{1F3FB}\u200D\u2640\uFE0F",
"\u{1F46F}\u{1F3FB}\u200D\u2642\uFE0F",
"\u{1F46F}\u{1F3FC}",
"\u{1F46F}\u{1F3FC}\u200D\u2640\uFE0F",
"\u{1F46F}\u{1F3FC}\u200D\u2642\uFE0F",
"\u{1F46F}\u{1F3FD}",
"\u{1F46F}\u{1F3FD}\u200D\u2640\uFE0F",
"\u{1F46F}\u{1F3FD}\u200D\u2642\uFE0F",
"\u{1F46F}\u{1F3FE}",
"\u{1F46F}\u{1F3FE}\u200D\u2640\uFE0F",
"\u{1F46F}\u{1F3FE}\u200D\u2642\uFE0F",
"\u{1F46F}\u{1F3FF}",
"\u{1F46F}\u{1F3FF}\u200D\u2640\uFE0F",
"\u{1F46F}\u{1F3FF}\u200D\u2642\uFE0F",
"\u{1F6D8}",
"\u{1F93C}\u{1F3FB}",
"\u{1F93C}\u{1F3FB}\u200D\u2640\uFE0F",
"\u{1F93C}\u{1F3FB}\u200D\u2642\uFE0F",
"\u{1F93C}\u{1F3FC}",
"\u{1F93C}\u{1F3FC}\u200D\u2640\uFE0F",
"\u{1F93C}\u{1F3FC}\u200D\u2642\uFE0F",
"\u{1F93C}\u{1F3FD}",
"\u{1F93C}\u{1F3FD}\u200D\u2640\uFE0F",
"\u{1F93C}\u{1F3FD}\u200D\u2642\uFE0F",
"\u{1F93C}\u{1F3FE}",
"\u{1F93C}\u{1F3FE}\u200D\u2640\uFE0F",
"\u{1F93C}\u{1F3FE}\u200D\u2642\uFE0F",
"\u{1F93C}\u{1F3FF}",
"\u{1F93C}\u{1F3FF}\u200D\u2640\uFE0F",
"\u{1F93C}\u{1F3FF}\u200D\u2642\uFE0F",
"\u{1F9D1}\u200D\u{1FA70}",
"\u{1F9D1}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FC}",
"\u{1F9D1}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FD}",
"\u{1F9D1}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FE}",
"\u{1F9D1}\u{1F3FB}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FF}",
"\u{1F9D1}\u{1F3FB}\u200D\u{1FA70}",
"\u{1F9D1}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FC}",
"\u{1F9D1}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FD}",
"\u{1F9D1}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FE}",
"\u{1F9D1}\u{1F3FB}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FF}",
"\u{1F9D1}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FB}",
"\u{1F9D1}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FD}",
"\u{1F9D1}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FE}",
"\u{1F9D1}\u{1F3FC}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FF}",
"\u{1F9D1}\u{1F3FC}\u200D\u{1FA70}",
"\u{1F9D1}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FB}",
"\u{1F9D1}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FD}",
"\u{1F9D1}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FE}",
"\u{1F9D1}\u{1F3FC}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FF}",
"\u{1F9D1}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FB}",
"\u{1F9D1}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FC}",
"\u{1F9D1}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FE}",
"\u{1F9D1}\u{1F3FD}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FF}",
"\u{1F9D1}\u{1F3FD}\u200D\u{1FA70}",
"\u{1F9D1}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FB}",
"\u{1F9D1}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FC}",
"\u{1F9D1}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FE}",
"\u{1F9D1}\u{1F3FD}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FF}",
"\u{1F9D1}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FB}",
"\u{1F9D1}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FC}",
"\u{1F9D1}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FD}",
"\u{1F9D1}\u{1F3FE}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FF}",
"\u{1F9D1}\u{1F3FE}\u200D\u{1FA70}",
"\u{1F9D1}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FB}",
"\u{1F9D1}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FC}",
"\u{1F9D1}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FD}",
"\u{1F9D1}\u{1F3FE}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FF}",
"\u{1F9D1}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FB}",
"\u{1F9D1}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FC}",
"\u{1F9D1}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FD}",
"\u{1F9D1}\u{1F3FF}\u200D\u{1F430}\u200D\u{1F9D1}\u{1F3FE}",
"\u{1F9D1}\u{1F3FF}\u200D\u{1FA70}",
"\u{1F9D1}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FB}",
"\u{1F9D1}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FC}",
"\u{1F9D1}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FD}",
"\u{1F9D1}\u{1F3FF}\u200D\u{1FAEF}\u200D\u{1F9D1}\u{1F3FE}",
"\u{1FA8A}",
"\u{1FA8E}",
"\u{1FAC8}",
"\u{1FACD}",
"\u{1FAEA}",
"\u{1FAEF}"
],
});

View File

@ -0,0 +1,20 @@
// Copyright 2025 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
esid: prod-PrivateIdentifier
description: |
Test that Unicode v17.0.0 ID_Continue characters are accepted as
identifier part characters in escaped form, i.e.
- \uXXXX or \u{XXXX} for BMP symbols
- \u{XXXXXX} for astral symbols
in private class fields.
info: |
Generated by https://github.com/mathiasbynens/caniunicode
features: [class, class-fields-private]
---*/
class _ {
#_\u1ACF\u1AD0\u1AD1\u1AD2\u1AD3\u1AD4\u1AD5\u1AD6\u1AD7\u1AD8\u1AD9\u1ADA\u1ADB\u1ADC\u1ADD\u1AE0\u1AE1\u1AE2\u1AE3\u1AE4\u1AE5\u1AE6\u1AE7\u1AE8\u1AE9\u1AEA\u1AEB\u{10EFA}\u{10EFB}\u{11B60}\u{11B61}\u{11B62}\u{11B63}\u{11B64}\u{11B65}\u{11B66}\u{11B67}\u{11DE0}\u{11DE1}\u{11DE2}\u{11DE3}\u{11DE4}\u{11DE5}\u{11DE6}\u{11DE7}\u{11DE8}\u{11DE9}\u{1E6E3}\u{1E6E6}\u{1E6EE}\u{1E6EF}\u{1E6F5};
};

View File

@ -0,0 +1,17 @@
// Copyright 2025 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
esid: prod-PrivateIdentifier
description: |
Test that Unicode v17.0.0 ID_Continue characters are accepted as
identifier part characters in private class fields.
info: |
Generated by https://github.com/mathiasbynens/caniunicode
features: [class, class-fields-private]
---*/
class _ {
#_𐻺𐻻𑭠𑭡𑭢𑭣𑭤𑭥𑭦𑭧𑷠𑷡𑷢𑷣𑷤𑷥𑷦𑷧𑷨𑷩𞛣𞛦𞛮𞛯𞛵;
};

View File

@ -0,0 +1,16 @@
// Copyright 2025 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
esid: sec-names-and-keywords
description: |
Test that Unicode v17.0.0 ID_Continue characters are accepted as
identifier part characters in escaped form, i.e.
- \uXXXX or \u{XXXX} for BMP symbols
- \u{XXXXXX} for astral symbols
info: |
Generated by https://github.com/mathiasbynens/caniunicode
---*/
var _\u1ACF\u1AD0\u1AD1\u1AD2\u1AD3\u1AD4\u1AD5\u1AD6\u1AD7\u1AD8\u1AD9\u1ADA\u1ADB\u1ADC\u1ADD\u1AE0\u1AE1\u1AE2\u1AE3\u1AE4\u1AE5\u1AE6\u1AE7\u1AE8\u1AE9\u1AEA\u1AEB\u{10EFA}\u{10EFB}\u{11B60}\u{11B61}\u{11B62}\u{11B63}\u{11B64}\u{11B65}\u{11B66}\u{11B67}\u{11DE0}\u{11DE1}\u{11DE2}\u{11DE3}\u{11DE4}\u{11DE5}\u{11DE6}\u{11DE7}\u{11DE8}\u{11DE9}\u{1E6E3}\u{1E6E6}\u{1E6EE}\u{1E6EF}\u{1E6F5};

View File

@ -0,0 +1,14 @@
// Copyright 2025 Mathias Bynens. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Mathias Bynens
esid: sec-names-and-keywords
description: |
Test that Unicode v17.0.0 ID_Continue characters are accepted as
identifier part characters.
info: |
Generated by https://github.com/mathiasbynens/caniunicode
---*/
var _𐻺𐻻𑭠𑭡𑭢𑭣𑭤𑭥𑭦𑭧𑷠𑷡𑷢𑷣𑷤𑷥𑷦𑷧𑷨𑷩𞛣𞛦𞛮𞛯𞛵;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff