blob: a9cd053bf8037bd7244a732dad2d7ea7a3f7e655 [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");
function withCharacterSet(assertions) {
var newAssertions = [];
assertions.forEach(function (assertion) {
newAssertions.push(assertion);
var pattern = assertion[0];
var rest = assertion.slice(1);
var characterSetAssertion = ['[' + pattern + ']'].concat(rest);
newAssertions.push(characterSetAssertion);
});
return newAssertions;
}
var tests = [
{
name: 'Lookahead assertions should be quantifiable',
assertions: [
['(?=a)+ab', 'ab'],
['(?!a)+b', 'b'],
]
},
{
name: 'Curly braces should be allowed on their own',
assertions: withCharacterSet([
['{', '{'],
['}', '}']
])
},
{
name: 'Legacy octal escape sequences should be allowed',
assertions: withCharacterSet([
['\\0', '\x00'],
['\\7', '\x07'],
['\\00', '\x00'],
['\\37', '\x1F'],
['\\41', '\x21'],
['\\77', '\x3F'],
['\\000', '\x00'],
['\\377', '\xFF'],
])
},
{
name: '"\\8" and "\\9" should be identity escapes',
assertions: withCharacterSet([
['\\8', '8'],
['\\9', '9'],
])
},
{
name: 'Legacy octal escape sequence should be disambiguated based on the number of groups',
assertions: [
['(1)(2)\\1\\2\\3', '1212\x03'],
]
},
{
name: '"\\x" should be treated as an identity escape if ill-formed',
assertions: withCharacterSet([
['\\x', 'x'],
['\\xa', 'xa'],
])
},
{
name: '"\\u" should be treated as an identity escape if ill-formed',
assertions: withCharacterSet([
['\\u', 'u'],
['\\ua', 'ua'],
])
},
{
name: 'Any character except "c" should be escapable',
assertions: withCharacterSet([
['\\q', 'q'],
])
},
];
var testsForRunner = tests.map(function (test) {
return {
name: test.name,
body: function () {
test.assertions.forEach(function (assertion) {
var pattern = assertion[0];
var inputString = assertion[1];
var re = eval('/' + pattern + '/');
assert.isTrue(re.test(inputString), re.source);
});
}
}
});
testRunner.runTests(testsForRunner, { verbose: WScript.Arguments[0] != 'summary' });