| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| function write(v) { WScript.Echo(v + ""); } |
| |
| var groups = {}; |
| |
| function Assert(condition, category) |
| { |
| if (!groups[category]) { |
| groups[category] = 1; |
| } else { |
| groups[category]++; |
| } |
| |
| if (!condition) { |
| write(category + " test " + groups[category] + " failed"); |
| } else { |
| write(category + " test " + groups[category] + " passed"); |
| } |
| } |
| |
| write("regex test1"); |
| |
| var re = /a/; |
| var str = new String("abcda"); |
| if (re.test(str)) { |
| write(" regex.test pass"); |
| } |
| else { |
| write(" regex.test fail"); |
| } |
| |
| if (str.match(re)) { |
| write(" string.match pass"); |
| } |
| else { |
| write(" string.match fail"); |
| } |
| var array = re.exec(str); |
| write(" string.exec : " + array); |
| |
| |
| var s = ""; |
| var a = s.split(/\s+/); |
| write("a.length : " + a.length); |
| write("a[0]:" + a[0]); |
| |
| var reTemp = /abc/i; |
| var re = new RegExp(reTemp, "g"); |
| var tmp = "abcdef".replace(re, ""); |
| Assert(re.lastIndex == 0, "lastIndex"); |
| |
| var re = new RegExp(/abc/i, "g"); |
| var tmp = "abcdef".match(re); |
| Assert(re.lastIndex == 0, "lastIndex"); |
| |
| var re = new RegExp(/abc/g); |
| re.exec("abcdef"); |
| Assert(re.lastIndex == 3, "lastIndex"); |
| |
| var re = /abc/; |
| re.exec("abcdef"); |
| Assert(re.lastIndex == 0, "lastIndex"); |
| |
| var re = new RegExp(/abc/g, "i"); |
| Assert(re.global == false, "global"); |
| Assert(re.ignoreCase == true, "ignoreCase"); |
| |
| var re = /abc/i; |
| var re1 = new RegExp(re, "gm"); |
| Assert(re.global == false, "global"); |
| Assert(re.multiline == false, "multiline"); |
| Assert(re.ignoreCase == true, "ignoreCase"); |
| Assert(re1.global == true, "global"); |
| Assert(re1.multiline == true, "multiline"); |
| Assert(re1.ignoreCase == false, "ignoreCase"); |
| |
| var exceptionThrown = false; |
| try |
| { |
| var re = new RegExp(/a/g, "ab"); |
| } |
| catch (ex) |
| { |
| exceptionThrown = true; |
| } |
| Assert(exceptionThrown, "invalid flags"); |
| |
| var re = /(ab)/g |
| |
| "abc ".match(re); |
| Assert(RegExp.$1 == "ab", "lastIndex"); |
| |
| var re = /test/; |
| var exceptionThrown = false; |
| try |
| { |
| re.lastIndex = { toString: function() { throw "an exception string"; } } |
| } |
| catch (ex) |
| { |
| exceptionThrown = true; |
| } |
| |
| Assert(exceptionThrown == false, "lastIndex"); |
| |
| exceptionThrown = false; |
| |
| try |
| { |
| Write("LastIndex is " + re.lastIndex); |
| } |
| catch (ex) |
| { |
| exceptionThrown = true; |
| } |
| |
| Assert(exceptionThrown == true, "lastIndex"); |
| |
| function testsc(r, s) { |
| if (!r.test(s)) |
| write("invalid interpretation of '" + r + "'"); |
| } |
| |
| testsc(/^\cA$/, "\x01"); |
| testsc(/^[\cA]$/, "\x01"); |
| testsc(/^\c1$/, "\\c1"); |
| testsc(/^\c$/, "\\c"); |
| testsc(/\c/, "\\c"); |
| testsc(/^\c\1$/, "\\c\x01"); |
| testsc(/\c/, "\\c"); |
| testsc(/^[\c1]$/, "\x11"); |
| testsc(/^[\c]$/, "c"); |
| testsc(/^[\c]]$/, "c]"); |
| testsc(/^[\c-e]+$/, "cde"); |
| |
| //Octal handling |
| testsc(/^\777$/, "\x3F7"); |
| testsc(/^\777$/, "\777"); |
| testsc(/^\170$/, "x"); |
| |
| //Octal handling test for values > 127 |
| c=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"]; |
| |
| //Negation of empty char set [^] test |
| write("aa".match(/([^])(\1)/)); |
| |
| |