2017-07-14 17:37:24 +02:00
|
|
|
// Copyright (C) 2017 Ecma International. All rights reserved.
|
|
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
|
|
/*---
|
|
|
|
description: |
|
|
|
|
Collection of functions used to assert the correctness of RegExp objects.
|
|
|
|
---*/
|
|
|
|
|
2017-04-13 17:22:49 +02:00
|
|
|
function buildString({ loneCodePoints, ranges }) {
|
|
|
|
const CHUNK_SIZE = 10000;
|
|
|
|
let result = String.fromCodePoint(...loneCodePoints);
|
|
|
|
for (const [start, end] of ranges) {
|
|
|
|
const codePoints = [];
|
|
|
|
for (let length = 0, codePoint = start; codePoint <= end; codePoint++) {
|
|
|
|
codePoints[length++] = codePoint;
|
|
|
|
if (length === CHUNK_SIZE) {
|
|
|
|
result += String.fromCodePoint(...codePoints);
|
|
|
|
codePoints.length = length = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result += String.fromCodePoint(...codePoints);
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
function testPropertyEscapes(regex, string, expression) {
|
|
|
|
if (!regex.test(string)) {
|
|
|
|
for (const symbol of string) {
|
|
|
|
const hex = symbol
|
|
|
|
.codePointAt(0)
|
|
|
|
.toString(16)
|
|
|
|
.toUpperCase()
|
|
|
|
.padStart(6, "0");
|
|
|
|
assert(
|
|
|
|
regex.test(symbol),
|
|
|
|
`\`${ expression }\` should match U+${ hex } (\`${ symbol }\`)`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|