re2-latin1
Version:
Bindings for RE2: fast, safe alternative to backtracking regular expression engines.
214 lines (142 loc) • 5.59 kB
JavaScript
;
var unit = require("heya-unit");
var RE2 = require("../re2");
// tests
unit.add(module, [
// These tests are copied from MDN:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test
function test_testFromExec(t) {
"use strict";
var re = new RE2("quick\\s(brown).+?(jumps)", "i");
eval(t.TEST("re.test('The Quick Brown Fox Jumps Over The Lazy Dog')"));
eval(t.TEST("re.test('tHE qUICK bROWN fOX jUMPS oVER tHE lAZY dOG')"));
eval(t.TEST("re.test('the quick brown fox jumps over the lazy dog')"));
eval(t.TEST("re.test('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')"));
eval(t.TEST("!re.test('THE KWIK BROWN FOX JUMPS OVER THE LAZY DOG')"));
re = new RE2("ab*", "g");
eval(t.TEST("re.test('abbcdefabh')"));
eval(t.TEST("!re.test('qwerty')"));
re = new RE2("(hello \\S+)");
eval(t.TEST("re.test('This is a hello world!')"));
eval(t.TEST("!re.test('This is a Hello world!')"));
},
function test_testSucc(t) {
"use strict";
var str = "abbcdefabh";
var re = new RE2("ab*", "g");
var result = re.test(str);
eval(t.TEST("result"));
eval(t.TEST("re.lastIndex === 3"));
result = re.test(str);
eval(t.TEST("result"));
eval(t.TEST("re.lastIndex === 9"));
result = re.test(str);
eval(t.TEST("!result"));
},
function test_testSimple(t) {
"use strict";
var str = "abbcdefabh";
var re1 = new RE2("ab*", "g");
eval(t.TEST("re1.test(str)"));
var re2 = new RE2("ab*");
eval(t.TEST("re2.test(str)"));
var re3 = new RE2("abc");
eval(t.TEST("!re3.test(str)"));
},
function test_testAnchoredToBeginning(t) {
"use strict";
var re = RE2('^hello', 'g');
eval(t.TEST("re.test('hellohello')"));
eval(t.TEST("!re.test('hellohello')"));
},
function test_testInvalid(t) {
"use strict";
var re = RE2('');
try {
re.test({ toString() { throw "corner"; } });
t.test(false); // shouldn't be here
} catch(e) {
eval(t.TEST("e === 'corner'"));
}
},
function test_testAnchor1(t) {
"use strict";
var re = new RE2("b|^a", "g");
var result = re.test("aabc");
eval(t.TEST("result"));
eval(t.TEST("re.lastIndex === 1"));
result = re.test("aabc");
eval(t.TEST("result"));
eval(t.TEST("re.lastIndex === 3"));
result = re.test("aabc");
eval(t.TEST("!result"));
},
function test_testAnchor2(t) {
"use strict";
var re = new RE2("(?:^a)", "g");
var result = re.test("aabc");
eval(t.TEST("result"));
eval(t.TEST("re.lastIndex === 1"));
result = re.test("aabc");
eval(t.TEST("!result"));
},
// Unicode tests
function test_testUnicode(t) {
"use strict";
var re = new RE2("охотник\\s(желает).+?(где)", "ui");
eval(t.TEST("re.test('Каждый Охотник Желает Знать Где Сидит Фазан')"));
eval(t.TEST("re.test('кАЖДЫЙ оХОТНИК жЕЛАЕТ зНАТЬ гДЕ сИДИТ фАЗАН')"));
eval(t.TEST("re.test('каждый охотник желает знать где сидит фазан')"));
eval(t.TEST("re.test('КАЖДЫЙ ОХОТНИК ЖЕЛАЕТ ЗНАТЬ ГДЕ СИДИТ ФАЗАН')"));
eval(t.TEST("!re.test('Кажный Стрелок Хочет Найти Иде Прячется Птица')"));
re = new RE2("аб*", "g");
eval(t.TEST("re.test('аббвгдеабё')"));
eval(t.TEST("!re.test('йцукен')"));
re = new RE2("(привет \\S+)");
eval(t.TEST("re.test('Это просто привет всем.')"));
eval(t.TEST("!re.test('Это просто Привет всем.')"));
},
function test_testUnicodeSubsequent(t) {
"use strict";
var str = "аббвгдеабё";
var re = new RE2("аб*", "ug");
var result = re.test(str);
eval(t.TEST("result"));
eval(t.TEST("re.lastIndex === 3"));
result = re.test(str);
eval(t.TEST("result"));
eval(t.TEST("re.lastIndex === 9"));
result = re.test(str);
eval(t.TEST("!result"));
},
// Buffer tests
function test_testBuffer(t) {
"use strict";
var re = new RE2("охотник\\s(желает).+?(где)", "ui");
eval(t.TEST("re.test(new Buffer('Каждый Охотник Желает Знать Где Сидит Фазан'))"));
eval(t.TEST("re.test(new Buffer('кАЖДЫЙ оХОТНИК жЕЛАЕТ зНАТЬ гДЕ сИДИТ фАЗАН'))"));
eval(t.TEST("re.test(new Buffer('каждый охотник желает знать где сидит фазан'))"));
eval(t.TEST("re.test(new Buffer('КАЖДЫЙ ОХОТНИК ЖЕЛАЕТ ЗНАТЬ ГДЕ СИДИТ ФАЗАН'))"));
eval(t.TEST("!re.test(new Buffer('Кажный Стрелок Хочет Найти Иде Прячется Птица'))"));
re = new RE2("аб*", "g");
eval(t.TEST("re.test(new Buffer('аббвгдеабё'))"));
eval(t.TEST("!re.test(new Buffer('йцукен'))"));
re = new RE2("(привет \\S+)");
eval(t.TEST("re.test(new Buffer('Это просто привет всем.'))"));
eval(t.TEST("!re.test(new Buffer('Это просто Привет всем.'))"));
},
// Sticky tests
function test_testSticky(t) {
"use strict";
var re = new RE2("\\s+", "y");
eval(t.TEST("!re.test('Hello world, how are you?')"));
re.lastIndex = 5;
eval(t.TEST("re.test('Hello world, how are you?')"));
eval(t.TEST("re.lastIndex === 6"));
var re2 = new RE2("\\s+", "gy");
eval(t.TEST("!re2.test('Hello world, how are you?')"));
re2.lastIndex = 5;
eval(t.TEST("re2.test('Hello world, how are you?')"));
eval(t.TEST("re2.lastIndex === 6"));
}
]);