mirror of https://github.com/tc39/test262.git
55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
// 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.
|
|
---*/
|
|
|
|
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 }\`)`
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Returns a function that will validate RegExp match result
|
|
//
|
|
// Example:
|
|
//
|
|
// var validate = matchValidator(['b'], 1, 'abc');
|
|
// validate(/b/.exec('abc'));
|
|
//
|
|
function matchValidator(expectedEntries, expectedIndex, expectedInput) {
|
|
return function(match) {
|
|
assert.compareArray(match, expectedEntries, 'Match entries');
|
|
assert.sameValue(match.index, expectedIndex, 'Match index');
|
|
assert.sameValue(match.input, expectedInput, 'Match input');
|
|
}
|
|
}
|