blob: 0549e3314648e49c8646801d82d880d58dd12935 [file] [log] [blame]
Test for unicode regular expression processing
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
PASS "a".match(/a/u)[0].length is 1
PASS "a".match(/A/ui)[0].length is 1
PASS "a".match(/a/u)[0].length is 1
PASS "a".match(/A/iu)[0].length is 1
PASS "Ȓ".match(/Ȓ/u)[0].length is 1
PASS "Ȓ".match(/Ȓ/u)[0].length is 1
PASS "ሴ".match(/ሴ/u)[0].length is 1
PASS "ሴ".match(/ሴ/u)[0].length is 1
PASS "⪼".match(/⪼/u)[0].length is 1
PASS "㿭".match(/㿭/u)[0].length is 1
PASS "𒍅".match(/𒍅/u)[0].length is 2
PASS "𒍅".match(/𒍅/u)[0].length is 2
PASS "𝌆".match(/𝌆/u)[0].length is 2
PASS /𐑏/u.test("𐑏") is true
PASS /𐑏/u.test("𐑏") is true
PASS "𝌆".match(/𝌆/u)[0].length is 2
PASS /(𐀀|𐐀|𐐩)/u.test("𐐀") is true
PASS "𐄣".match(/a|𐄣|b/u)[0].length is 2
PASS "b".match(/a|𐄣|b/u)[0].length is 1
PASS /(?:a|𐄣|b)x/u.test("𐄣") is false
PASS /(?:a|𐄣|b)x/u.test("𐄣x") is true
PASS /(?:a|𐄣|b)x/u.test("b") is false
PASS /(?:a|𐄣|b)x/u.test("bx") is true
PASS "a𐄣x".match(/a𐄣b|a𐄣x/u)[0].length is 4
PASS /(𐀀|𐐀|𐐩)x/ui.test("𐐀x") is true
PASS /(𐀀|𐐀|𐐩)x/ui.test("𐐩x") is true
PASS /(𐀀|𐐀|𐐩)x/ui.test("𐐁x") is true
PASS /(𐀀|𐐀|𐐩)x/ui.test("𐐨x") is true
PASS "𐐩".match(/a|𐐁|b/iu)[0].length is 2
PASS "B".match(/a|𐄣|b/iu)[0].length is 1
PASS /(?:A|𐄣|b)x/iu.test("𐄣") is false
PASS /(?:A|𐄣|b)x/iu.test("𐄣x") is true
PASS /(?:A|𐄣|b)x/iu.test("b") is false
PASS /(?:A|𐄣|b)x/iu.test("bx") is true
PASS "a𐄣X".match(/a𐄣b|a𐄣x/iu)[0].length is 4
PASS "Ťx".match(/ťx/iu)[0].length is 2
PASS /\w/iu.test("ſ") is true
PASS /\w/iu.test("K") is true
PASS /\W/iu.test("ſ") is false
PASS /\W/iu.test("K") is false
PASS /[\w\d]/iu.test("ſ") is true
PASS /[\w\d]/iu.test("K") is true
PASS /[^\w\d]/iu.test("ſ") is false
PASS /[^\w\d]/iu.test("K") is false
PASS /[\W\d]/iu.test("ſ") is false
PASS /[\W\d]/iu.test("K") is false
PASS /[^\W\d]/iu.test("ſ") is true
PASS /[^\W\d]/iu.test("K") is true
PASS /\w/iu.test("S") is true
PASS /\w/iu.test("K") is true
PASS /\W/iu.test("S") is false
PASS /\W/iu.test("K") is false
PASS /[\w\d]/iu.test("S") is true
PASS /[\w\d]/iu.test("K") is true
PASS /[^\w\d]/iu.test("S") is false
PASS /[^\w\d]/iu.test("K") is false
PASS /[\W\d]/iu.test("S") is false
PASS /[\W\d]/iu.test("K") is false
PASS /[^\W\d]/iu.test("S") is true
PASS /[^\W\d]/iu.test("K") is true
PASS "Grasſoden is old German for grass".match(/.*?\Bs\u017foden/iu)[0] is "Grasſoden"
PASS "Grasſoden is old German for grass".match(/.*?\B\u017foden/iu)[0] is "Grasſoden"
PASS "Grasſoden is old German for grass".match(/.*?\Boden/iu)[0] is "Grasſoden"
PASS "Grasſoden is old German for grass".match(/.*?\Bden/iu)[0] is "Grasſoden"
PASS "Water freezes at 273K which is 0C.".split(/\b\s/iu) is ["Water","freezes","at","273K","which","is","0C."]
PASS "𝌆".match(/^.$/u)[0].length is 2
PASS "It is 78°".match(/.*/u)[0].length is 9
PASS stringWithDanglingFirstSurrogate.match(/.*/u)[0].length is 3
PASS stringWithDanglingSecondSurrogate.match(/.*/u)[0].length is 3
PASS "𝌆".match(/[𝌆a]/)[0].length is 1
PASS "𝌆".match(/[a𝌆]/u)[0].length is 2
PASS "𝌆".match(/[𝌆a]/u)[0].length is 2
PASS "𝌆".match(/[a-𝌆]/)[0].length is 1
PASS "𝌆".match(/[a-𝌆]/u)[0].length is 2
PASS "X".match(/[ -𐑏]/u)[0].length is 1
PASS "က".match(/[ -𐑏]/u)[0].length is 1
PASS "𐐧".match(/[ -𐑏]/u)[0].length is 2
PASS re1.test("Z") is false
PASS re1.test("က") is false
PASS re1.test("𐐀") is false
PASS re2.test("A") is true
PASS re2.test("￿") is false
PASS re2.test("𒍅") is true
PASS /[𐰁�#�]/u.exec("𐰁").toString() is "𐰁"
PASS /[�𐰁�]/u.exec("𐰁").toString() is "𐰁"
PASS /[�#�𐰁]/u.exec("𐰁").toString() is "𐰁"
PASS /[�𐰁�]/u.exec("𐰁").toString() is "𐰁"
PASS /[𐰁�#�]{2}/u.exec("𐰁") is null
PASS /[�𐰁�]{2}/u.exec("𐰁") is null
PASS /[�#�𐰁]{2}/u.exec("𐰁") is null
PASS /[�𐰁�]{2}/u.exec("𐰁") is null
PASS /�|�|𐰁/u.exec("𐰁").toString() is "𐰁"
PASS /�|𐰁|�/u.exec("𐰁").toString() is "𐰁"
PASS /�|�|𐰁/u.exec("�").toString() is "�"
PASS /�|𐰁|�/u.exec("�").toString() is "�"
PASS /�𐰁/u.exec("𐰁") is null
PASS /�𐰁/u.exec("�") is null
PASS "�𐰁".match(/�𐰁/u)[0].length is 3
PASS /𝌆{2}/u.test("𝌆𝌆") is true
PASS /𝌆{2}/u.test("𝌆𝌆") is true
PASS "𐐅𐐅𐐅𐐅".match(/𐐅{3}/u)[0] is "𐐅𐐅𐐅"
PASS "𐐂𐐅𐐅𐐅".match(/𐐅{3}/u)[0] is "𐐅𐐅𐐅"
PASS "𐐁𐐁𐐀".match(/𐐁{1,3}/u)[0] is "𐐁𐐁"
PASS "𐐁𐐩".match(/𐐁{1,3}/iu)[0] is "𐐁𐐩"
PASS "𐐁𐐩𐐪𐐩".match(/𐐁{1,}/iu)[0] is "𐐁𐐩"
PASS "𐌑𐌑𐌑".match(/𐌑*a|𐌑*./u)[0] is "𐌑𐌑𐌑"
PASS "a𐌑𐌑".match(/a𐌑*?$/u)[0] is "a𐌑𐌑"
PASS "a𐌑𐌑𐌑c".match(/a𐌑*cd|a𐌑*c/u)[0] is "a𐌑𐌑𐌑c"
PASS "a𐌑𐌑𐌑c".match(/a𐌑+cd|a𐌑+c/u)[0] is "a𐌑𐌑𐌑c"
PASS "𐌑𐌑𐌑".match(/𐌑+?a|𐌑+?./u)[0] is "𐌑𐌑"
PASS "𐌑𐌑𐌑".match(/𐌑+?a|𐌑+?$/u)[0] is "𐌑𐌑𐌑"
PASS "a𐌑𐌑𐌑c".match(/a𐌑*?cd|a𐌑*?c/u)[0] is "a𐌑𐌑𐌑c"
PASS "a𐌑𐌑𐌑c".match(/a𐌑+?cd|a𐌑+?c/u)[0] is "a𐌑𐌑𐌑c"
PASS "𐌑𐌑𐌑".match(/𐌑+?a|𐌑+?./iu)[0] is "𐌑𐌑"
PASS "𐐪𐐪𐌑".match(/𐐂*𐈀|𐐂*𐌑/iu)[0] is "𐐪𐐪𐌑"
PASS "𐐪𐐪𐌑".match(/𐐂+𐈀|𐐂+𐌑/iu)[0] is "𐐪𐐪𐌑"
PASS "𐐪𐐪𐌑".match(/𐐂*?𐈀|𐐂*?𐌑/iu)[0] is "𐐪𐐪𐌑"
PASS "𐐪𐐪𐌑".match(/𐐂+?𐈀|𐐂+?𐌑/iu)[0] is "𐐪𐐪𐌑"
PASS "ab𐌑c𐨁".match(/abc|ab𐌑cd|ab𐌑c𐨁d|ab𐌑c𐨁/u)[0] is "ab𐌑c𐨁"
PASS "ab𐐨c𐨁".match(/abc|ab𐐀cd|ab𐐀c𐨁d|ab𐐀c𐨁/iu)[0] is "ab𐐨c𐨁"
PASS /abc|ab𐐀cd|ab𐐀c𐨁d|ab𐐀c𐨁/iu.test("qwerty123") is false
PASS "a𐐨𐐨𐐨c".match(/ac|a𐐀*cd|a𐐀+cd|a𐐀+c/iu)[0] is "a𐐨𐐨𐐨c"
PASS "ab𐐨𐐨𐐨c𐨁".match(/abc|ab𐐀*cd|ab𐐀+c𐨁d|ab𐐀+c𐨁/iu)[0] is "ab𐐨𐐨𐐨c𐨁"
PASS "ab𐐨𐐨𐐨".match(/abc|ab𐐨*./u)[0] is "ab𐐨𐐨𐐨"
PASS "ab𐐨𐐨𐐨".match(/abc|ab𐐀*./iu)[0] is "ab𐐨𐐨𐐨"
PASS "𐐀".match(/a*/u)[0].length is 0
PASS "𐐀".match(/a*/ui)[0].length is 0
PASS "𐐀".match(/\d*/u)[0].length is 0
PASS "123𐐀".match(/\d*/u)[0] is "123"
PASS "12X3𐐀4".match(/\d{0,1}/ug) is ["1", "2", "", "3", "", "4", ""]
PASS "𐐂𐐅𐐅𐐂𐐅𐐅𐐅".match(/𐐅{3}/u)[0] is "𐐅𐐅𐐅"
PASS "a𐐐𐐐b".match(/a(𐐐*?)bc|a(𐐐*?)b/ui)[0] is "a𐐐𐐐b"
PASS match3[0] is "a𐐐𐐐b"
PASS match3[1] is undefined.
PASS match3[2] is "a𐐐𐐐b"
PASS match4[0] is "a𐐸𐐸b"
PASS match4[1] is undefined.
PASS match4[2] is "𐐸𐐸"
PASS match5[0] is "a𐐒𐐒b𐐒𐐒"
PASS match5[1] is undefined.
PASS match5[2] is "𐐒𐐒"
PASS match6[0] is "a𐐒𐐒b𐐺𐐒"
PASS match6[1] is undefined.
PASS match6[2] is "𐐒𐐒"
PASS /ſtop/ui.test("stop") is true
PASS /stop/ui.test("ſtop") is true
PASS /Kelvin/ui.test("kelvin") is true
PASS /KELVIN/ui.test("Kelvin") is true
PASS /\u{1}/.test("u") is true
PASS /\u{4}/.test("u") is false
PASS /\u{4}/.test("uuuu") is true
PASS "800-555-1212".match(/[0-9\-]*/u)[0].length is 12
PASS "🂡🃑🂸🃉🃚".match(re7)[0] is "🂡🃑"
PASS "🂡🃑🂱🃉🃚".match(re7)[0] is "🂡🃑🂱"
PASS "🂡🃑🂱🃁🃚".match(re7)[0] is "🂡🃑🂱🃁"
PASS "🂣🃑🂱🃁🃚".match(re7)[0] is "🃑🂱🃁"
PASS "𐌑𐌐𐌑".match(/[𐌁𐌑]*a|[𐌐𐌑]*./iu)[0] is "𐌑𐌐𐌑"
PASS "𐌑𐌐𐌑".match(/[𐌁𐌑]*?a|[𐌐𐌑]*?./iu)[0] is "𐌑"
PASS "𐌑𐌐𐌑".match(/[𐌁𐌑]+a|[𐌐𐌑]+./iu)[0] is "𐌑𐌐𐌑"
PASS "𐌑𐌐𐌑".match(/[𐌁𐌑]+?a|[𐌐𐌑]+?./iu)[0] is "𐌑𐌐"
PASS "𐌑𐌐𐌑".match(/[𐌁𐌑]+?a$|[𐌐𐌑]+?.$/iu)[0] is "𐌑𐌐𐌑"
PASS "𐌑𐌐𐌑".match(/[𐌁𐌑x]+a|[𐌐𐌑x]+./iu)[0] is "𐌑𐌐𐌑"
PASS "𐌑𐌐𐌑".match(/[𐌁𐌑x]+?a|[𐌐𐌑x]+?./iu)[0] is "𐌑𐌐"
PASS "C83|НАЧАТЬ".match(re8)[0] is "C83|НАЧАТЬ"
PASS "This.Is.16.Chars|НАЧАТЬ".match(re8)[0] is "This.Is.16.Chars|НАЧАТЬ"
PASS "Testing\nሴ 1 2 3".match(/^[က-𐃿] 1 2 3/um)[0] is "ሴ 1 2 3"
PASS "Testing\n𐃰 1 2 3".match(/^[က-𐃿] 1 2 3/um)[0] is "𐃰 1 2 3"
PASS "g\nሴ 1 2 3".match(/g\n^[က-𐃿] 1 2 3/um)[0] is "g\nሴ 1 2 3"
PASS "g\n𐃰 1 2 3".match(/g\n^[က-𐃿] 1 2 3/um)[0] is "g\n𐃰 1 2 3"
PASS "Testing ሴ\n1 2 3".match(/Testing [က-𐃿]$/um)[0] is "Testing ሴ"
PASS "Testing 𐃰\n1 2 3".match(/Testing [က-𐃿]$/um)[0] is "Testing 𐃰"
PASS "Testing ሴ\n1 2 3".match(/g [က-𐃿]$\n1/um)[0] is "g ሴ\n1"
PASS "Testing 𐃰\n1 2 3".match(/g [က-𐃿]$\n1/um)[0] is "g 𐃰\n1"
PASS "this is ba test".match(/is b\cha test/u)[0].length is 11
PASS new RegExp("\\/", "u").source is "\\/"
PASS r = new RegExp("\\u{110000}", "u") threw exception SyntaxError: Invalid regular expression: invalid Unicode code point \u{} escape.
PASS r = new RegExp("𐐅{2147483648}", "u") threw exception SyntaxError: Invalid regular expression: pattern exceeds string length limits.
PASS /{/u threw exception SyntaxError: Invalid regular expression: incomplete {} quantifier for Unicode pattern.
PASS /[a-\d]/u threw exception SyntaxError: Invalid regular expression: invalid range in character class for Unicode pattern.
PASS /]/u threw exception SyntaxError: Invalid regular expression: unmatched ] or } bracket for Unicode pattern.
PASS /\5/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\01/u threw exception SyntaxError: Invalid regular expression: invalid octal escape for Unicode pattern.
PASS /[\23]/u threw exception SyntaxError: Invalid regular expression: invalid octal escape for Unicode pattern.
PASS /\c9/u threw exception SyntaxError: Invalid regular expression: invalid \c escape for Unicode pattern.
PASS r = new RegExp("\\-", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
PASS r = new RegExp("\\a", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
PASS r = new RegExp("[\\a]", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
PASS r = new RegExp("[\\B]", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
PASS r = new RegExp("\\x", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
PASS r = new RegExp("[\\x]", "u") threw exception SyntaxError: Invalid regular expression: invalid escaped character for Unicode pattern.
PASS r = new RegExp("\\u", "u") threw exception SyntaxError: Invalid regular expression: invalid Unicode \u escape.
PASS r = new RegExp("[\\u]", "u") threw exception SyntaxError: Invalid regular expression: invalid Unicode \u escape.
PASS r = new RegExp("\\u{", "u") threw exception SyntaxError: Invalid regular expression: invalid Unicode code point \u{} escape.
PASS r = new RegExp("\\u{\udead", "u") threw exception SyntaxError: Invalid regular expression: invalid Unicode code point \u{} escape.
PASS /\1/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\2/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\3/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\4/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\5/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\6/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\7/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\8/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\9/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /(.)\1/u did not throw exception.
PASS /(.)(.)\2/u did not throw exception.
PASS /(.)(.)\3/u threw exception SyntaxError: Invalid regular expression: invalid backreference for Unicode pattern.
PASS /\1/ did not throw exception.
PASS /\2/ did not throw exception.
PASS /\3/ did not throw exception.
PASS /\4/ did not throw exception.
PASS /\5/ did not throw exception.
PASS /\6/ did not throw exception.
PASS /\7/ did not throw exception.
PASS /\8/ did not throw exception.
PASS /\9/ did not throw exception.
PASS successfullyParsed is true
TEST COMPLETE