| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- //-------------------------------------------------------------------------------------------------------
- // 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' });
|