blob: a21ffb5fbc3e87373f115703739f57f4156f8d01 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
var normalTests = [
{
regExp: /[-]/u,
acceptedCharacters: ['-'],
rejectedCharacters: [',', '.']
},
{
regExp: /[b-]/u,
acceptedCharacters: ['b', '-'],
rejectedCharacters: ['a', 'c']
},
{
regExp: /[\u{10001}-]/u,
acceptedCharacters: ['\u{10001}', '-'],
rejectedCharacters: ['\u{10000}', '\u{10002}']
},
{
regExp: /[-b]/u,
acceptedCharacters: ['-', 'b'],
rejectedCharacters: ['a', 'c']
},
{
regExp: /[-\u{10001}]/u,
acceptedCharacters: ['-', '\u{10001}'],
rejectedCharacters: ['\u{10000}', '\u{10002}']
},
{
regExp: /[b-d]/u,
acceptedCharacters: ['b', 'c', 'd'],
rejectedCharacters: ['-', 'a', 'e']
},
{
regExp: /[\u{10001}-\u{10003}]/u,
acceptedCharacters: ['\u{10001}', '\u{10002}', '\u{10003}'],
rejectedCharacters: ['-', '\u{10000}', '\u{10004}']
},
{
regExp: /[+--]/u,
acceptedCharacters: ['+', ',', '-'],
rejectedCharacters: ['*', '.']
},
{
regExp: /[--/]/u,
acceptedCharacters: ['-', '.', '/'],
rejectedCharacters: [',', '0']
},
{
regExp: /[b-d-]/u,
acceptedCharacters: ['b', 'c', 'd', '-'],
rejectedCharacters: ['a', 'e']
},
{
regExp: /[\u{10001}-\u{10003}-]/u,
acceptedCharacters: ['\u{10001}', '\u{10002}', '\u{10003}', '-'],
rejectedCharacters: ['\u{10000}', '\u{10004}']
},
{
regExp: /[b-df]/u,
acceptedCharacters: ['b', 'c', 'd', 'f'],
rejectedCharacters: ['-', 'a', 'e']
},
{
regExp: /[\u{10001}-\u{10003}\u{10005}]/u,
acceptedCharacters: ['\u{10001}', '\u{10002}', '\u{10003}', '\u{10005}'],
rejectedCharacters: ['-', '\u{10000}', '\u{10004}']
},
{
regExp: /[b-df-]/u,
acceptedCharacters: ['b', 'c', 'd', 'f', '-'],
rejectedCharacters: ['a', 'e', 'g']
},
{
regExp: /[\u{10001}-\u{10003}\u{10005}-]/u,
acceptedCharacters: ['\u{10001}', '\u{10002}', '\u{10003}', '\u{10005}', '-'],
rejectedCharacters: ['\u{10000}', '\u{10004}', '\u{10006}']
},
{
// Third non-dash character's mathematical value is higher than the second's
regExp: /[b-d-f]/u,
acceptedCharacters: ['b', 'c', 'd', '-', 'f'],
rejectedCharacters: ['a', 'e']
},
{
// Third non-dash character's mathematical value is higher than the second's
regExp: /[\u{10001}-\u{10003}-\u{10005}]/u,
acceptedCharacters: ['\u{10001}', '\u{10002}', '\u{10003}', '-', '\u{10005}'],
rejectedCharacters: ['\u{10000}', '\u{10004}']
},
{
// Third non-dash character's mathematical value is lower than the second's
regExp: /[c-e-a]/u,
acceptedCharacters: ['c', 'd', 'e', '-', 'a'],
rejectedCharacters: ['b', 'f']
},
{
// Third non-dash character's mathematical value is lower than the second's
regExp: /[\u{10002}-\u{10004}-\u{10000}]/u,
acceptedCharacters: ['\u{10002}', '\u{10003}', '\u{10004}', '-', '\u{10000}'],
rejectedCharacters: ['\u{10001}', '\u{10005}']
},
{
regExp: /[b-df-h]/u,
acceptedCharacters: ['b', 'c', 'd', 'f', 'g', 'h'],
rejectedCharacters: ['-', 'a', 'e', 'i']
},
{
regExp: /[\u{10001}-\u{10003}\u{10005}-\u{10007}]/u,
acceptedCharacters: ['\u{10001}', '\u{10002}', '\u{10003}', '\u{10005}', '\u{10006}', '\u{10007}'],
rejectedCharacters: ['-', '\u{10000}', '\u{10004}', '\u{10008}']
},
{
regExp: /[b-d\u{10001}-\u{10003}]/u,
acceptedCharacters: ['b', 'c', 'd', '\u{10001}', '\u{10002}', '\u{10003}'],
rejectedCharacters: ['-', 'a', 'e', '\u{10000}', '\u{10004}']
},
{
// Make sure we don't omit the \u{10400}-\u{107FF} range
regExp: /[\u{10001}-\u{10BFE}]/u,
acceptedCharacters: ['\u{10001}', '\u{103FF}', '\u{10400}', '\u{107FF}', '\u{10800}', '\u{10BFE}']
},
{
regExp: /[\u{10000}-\u{107FF}]/u,
acceptedCharacters: ['\u{10000}', '\u{103FF}', '\u{10400}', '\u{107FF}']
},
{
// Make sure we don't omit the \u{10400}-\u{107FF} range
regExp: /[\u{10000}-\u{10802}]/u,
acceptedCharacters: ['\u{10000}', '\u{103FF}', '\u{10400}', '\u{107FF}', '\u{10800}', '\u{10802}']
}
];
var testsForRunner = normalTests.map(function (test) {
return {
name: '' + test.regExp + ' should work correctly',
body: function () {
function makePrintable(ch) {
var charCode = ch.charCodeAt(0);
if ('a'.charCodeAt(0) <= charCode && charCode <= 'z'.charCodeAt(0)
|| 'A'.charCodeAt(0) <= charCode && charCode <= 'Z'.charCodeAt(0)
|| '0'.charCodeAt(0) <= charCode && charCode <= '9'.charCodeAt(0)
|| ch === '-') {
return ch;
}
else {
var hexString = ch.codePointAt(0).toString(16);
return '\\u{' + hexString + '}';
}
}
function createMessage(ch, result) {
return "'" + makePrintable(ch) + "' should be " + result;
}
test.acceptedCharacters.forEach(function (ch) {
assert.isTrue(test.regExp.test(ch), createMessage(ch, 'acceptedCharacters'));
});
rejectedCharacters = test.rejectedCharacters || [];
rejectedCharacters.forEach(function (ch) {
assert.isFalse(test.regExp.test(ch), createMessage(ch, 'rejectedCharacters'));
});
}
};
});
var disallowedPatterns = [
'/[b-a]/',
'/[\\u{10001}-\\u{10000}]/u',
];
testsForRunner = testsForRunner.concat(disallowedPatterns.map(function (pattern) {
return {
name: '' + pattern + ' should throw SyntaxError',
body: function () {
assert.throws(function () { eval(pattern); }, SyntaxError);
}
};
}));
testRunner.runTests(testsForRunner, { verbose: WScript.Arguments[0] != 'summary' });