Skip to content

Commit

Permalink
inline regexpu-fixtures
Browse files Browse the repository at this point in the history
  • Loading branch information
JLHwung committed Sep 19, 2023
1 parent cb15913 commit 76bc726
Show file tree
Hide file tree
Showing 2 changed files with 298 additions and 6 deletions.
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@
},
"devDependencies": {
"jsesc": "^3.0.2",
"regexpu-fixtures": "^2.1.6",
"@unicode/unicode-15.1.0": "^1.5.2"
}
}
303 changes: 298 additions & 5 deletions tests/tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ const it = global.it || require("node:test").it;
const assert = require('assert');
const regenerate = require('regenerate');
const rewritePattern = require('../rewrite-pattern.js');
const fixtures = require('regexpu-fixtures');

const BMP_SET = regenerate().addRange(0x0, 0xFFFF);
const BMP_PATTERN = BMP_SET.toString({ 'bmpOnly': true });
Expand All @@ -13,11 +12,307 @@ const UNICODE_PATTERN = UNICODE_SET.toString();

const IS_NODE_6 = process.version.startsWith('v6.');

const FLAGS_WITH_UNICODE = 'u ui ug um uy uig uim uigm uigmy'.split(' ');
const FLAGS_WITH_UNICODE_WITH_I = 'ui uig uim uigm uigmy'.split(' ');
const FLAGS_WITH_UNICODE_WITHOUT_I = 'u ug um uy ugm ugmy'.split(' ');
// Note: the leading space is important.
const FLAGS_WITHOUT_UNICODE = ' i g m y ig im igm igmy'.split(' ');
const FLAGS = FLAGS_WITH_UNICODE.concat(FLAGS_WITHOUT_UNICODE);

const unicodeFixtures = [
{
'pattern': '.',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '.'
},
{
'pattern': '.',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])'
},
{
'pattern': '\\s',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]'
},
{
'pattern': '\\s',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]'
},
{
'pattern': '\\S',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uFEFE\\uFF00-\\uFFFF]'
},
{
'pattern': '\\S',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])'
},
{
'pattern': '[\\s\\S]',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '[\\0-\\uFFFF]'
},
{
'pattern': '[\\s\\S]',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])'
},
{
'pattern': '\\d',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '[0-9]'
},
{
'pattern': '\\D',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '[\\0-\\/:-\\uFFFF]'
},
{
'pattern': '\\D',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:[\\0-\\/:-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])'
},
{
'pattern': '[\\d\\D]',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '[\\0-\\uFFFF]'
},
{
'pattern': '[\\d\\D]',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])'
},
{
'pattern': '\\w',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '[0-9A-Z_a-z]'
},
{
'pattern': '\\w',
'flags': FLAGS_WITH_UNICODE_WITH_I,
// Must match U+017F and U+212A.
'transpiled': '[0-9A-Z_a-z\\u017F\\u212A]'
},
{
'pattern': '\\W',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '(?:[\\0-\\/:-@\\[-\\^`\\{-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])'
},
{
'pattern': '\\W',
'flags': FLAGS_WITH_UNICODE_WITH_I,
// Must not match U+017F, U+212A, `K`, or `S` (unlike in ES6).
'transpiled': '(?:[\\0-\\/:-@\\[-\\^`\\{-\\u017E\\u0180-\\u2129\\u212B-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])'
},
{
'pattern': '[\\w\\W]',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '[\\0-\\uFFFF]'
},
{
'pattern': '[\\w\\W]',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])'
},
{
'pattern': '[\\uD834\\uDF06-\\uD834\\uDF08a-z]',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '(?:[a-z]|\\uD834[\\uDF06-\\uDF08])'
},
{
'pattern': '[\\uD834\\uDF06-\\uD834\\uDF08a-z]',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '(?:[a-z]|\\uD834[\\uDF06-\\uDF08])'
},
{
'pattern': '[\\u{1D306}-\\u{1D308}a-z]',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '(?:[a-z]|\\uD834[\\uDF06-\\uDF08])'
},
{
'pattern': '[\\u{0000000000001D306}-\\u{000000000000000000000001D308}a-z]',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '(?:[a-z]|\\uD834[\\uDF06-\\uDF08])'
},
{
'pattern': '[\\u{1D306}-\\u{1D308}a-z]+',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '(?:[a-z]|\\uD834[\\uDF06-\\uDF08])+'
},
{
// `s` and `k` case-fold to U+017F and U+212A.
'pattern': '[\\u{1D306}-\\u{1D308}a-z]',
'flags': FLAGS_WITH_UNICODE_WITH_I,
'transpiled': '(?:[a-z\\u017F\\u212A]|\\uD834[\\uDF06-\\uDF08])'
},
{
// `s` and `k` case-fold to U+017F and U+212A.
'pattern': '[\\u{1D306}-\\u{1D308}a-z]+',
'flags': FLAGS_WITH_UNICODE_WITH_I,
'transpiled': '(?:[a-z\\u017F\\u212A]|\\uD834[\\uDF06-\\uDF08])+'
},
{
// `s` and `k` case-fold to U+017F and U+212A.
'pattern': '[a-z]',
'flags': FLAGS_WITH_UNICODE_WITH_I,
'transpiled': '[a-z\\u017F\\u212A]'
},
{
// `s` and `k` case-fold to U+017F and U+212A.
'pattern': '[A-Z]',
'flags': FLAGS_WITH_UNICODE_WITH_I,
'transpiled': '[A-Z\\u017F\\u212A]'
},
{
'pattern': '[\\u017F\\u212A]',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '[\\u017F\\u212A]'
},
{
'pattern': '[\\u017F\\u212A]',
'flags': FLAGS_WITH_UNICODE_WITH_I,
'transpiled': '[KS\\u017F\\u212A]'
},
{
'pattern': '\\uD806\\uDCDF',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '(?:\\uD806\\uDCDF)'
},
{
// U+118DF case-folds to U+118BF.
'pattern': '\\uD806\\uDCDF',
'flags': FLAGS_WITH_UNICODE_WITH_I,
'transpiled': '(?:\\uD806[\\uDCBF\\uDCDF])'
},
{
'pattern': '[^a]',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '(?:(?![a\\uD800-\\uDFFF])[\\s\\S]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])'
},
{
'pattern': '[^a]',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '(?:[\\0-`b-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])'
},
{
'pattern': '[^a]',
'flags': FLAGS_WITH_UNICODE_WITH_I,
'transpiled': '(?:(?![a\\uD800-\\uDFFF])[\\s\\S]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])'
},
{
'pattern': '[ab]+',
'flags': FLAGS,
'transpiled': '[ab]+'
},
{
'pattern': '^(?:ab|cd)$',
'flags': FLAGS,
'transpiled': '^(?:ab|cd)$'
},
{
// Without the `u` flag, the character class contains two entries: one for
// each surrogate half.
'pattern': '[\\uD834\\uDF06]',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '[\\uD834\\uDF06]'
},
{
// With the `u` flag, the character class contains a single entry: one for
// each code point.
'pattern': '[\\uD834\\uDF06]',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:\\uD834\\uDF06)'
},
{
'pattern': '\\uD834\\uDF06+',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '\\uD834\\uDF06+'
},
{
'pattern': '\\uD834\\uDF06+',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:\\uD834\\uDF06)+'
},
{
'pattern': '\\uD834\\uDF06+',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '\\uD834\\uDF06+'
},
{
'pattern': '\\uD834\\uDF06+',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:\\uD834\\uDF06)+'
},
{
// https://bugs.ecmascript.org/show_bug.cgi?id=3521#c3
'pattern': '\\u{D834}\\u{DF06}+',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:\\uD834(?![\\uDC00-\\uDFFF]))(?:(?:[^\\uD800-\\uDBFF]|^)\\uDF06)+'
},
{
'pattern': '\\uD834\\uDF06{2,4}',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '\\uD834\\uDF06{2,4}'
},
{
'pattern': '\\uD834\\uDF06{2,4}',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:\\uD834\\uDF06){2,4}'
},
{
'pattern': '\\uD834\\uDF06{2,4}',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '\\uD834\\uDF06{2,4}'
},
{
'pattern': '\\uD834\\uDF06{2,4}',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '(?:\\uD834\\uDF06){2,4}'
},
{
'pattern': '(a)\\1',
'flags': FLAGS_WITH_UNICODE_WITHOUT_I,
'transpiled': '(a)\\1'
},
{
// https://github.com/mathiasbynens/regexpu/issues/18
'pattern': '[]',
'flags': FLAGS,
'transpiled': '[]'
},
{
// https://github.com/mathiasbynens/regexpu/issues/19
'pattern': '(\\1)+\\1\\1',
'flags': FLAGS,
'transpiled': '(\\1)+\\1\\1'
},
// https://github.com/mathiasbynens/regexpu-core/issues/7
{
'pattern': '\\u03B8',
'flags': FLAGS_WITH_UNICODE_WITH_I,
'transpiled': '[\\u03B8\\u03F4]'
},
// https://github.com/mathiasbynens/regexpu-core/issues/11
{
'pattern': '\\/',
'flags': FLAGS_WITHOUT_UNICODE,
'transpiled': '\\/'
},
{
'pattern': '\\/',
'flags': FLAGS_WITH_UNICODE,
'transpiled': '\\/'
},
];

describe('rewritePattern { unicodeFlag }', () => {
const options = {
'unicodeFlag': 'transform'
};
for (const fixture of fixtures) {
for (const fixture of unicodeFixtures) {
const pattern = fixture.pattern;
for (const flag of fixture.flags) {
if (flag.includes('u')) {
Expand All @@ -26,9 +321,7 @@ describe('rewritePattern { unicodeFlag }', () => {
});
} else {
it('leaves `/' + pattern + '/' + flag + '` as-is', () => {
// TODO: Update regexpu-fixtures
const expected = pattern.replace(/^\uD834\uDF06/g, '\\uD834\\uDF06');
assert.equal(rewritePattern(pattern, flag, options), expected);
assert.equal(rewritePattern(pattern, flag, options), pattern);
});
}
}
Expand Down

0 comments on commit 76bc726

Please sign in to comment.