1425bb815Sopenharmony_ci// Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci// 3425bb815Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci// you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci// You may obtain a copy of the License at 6425bb815Sopenharmony_ci// 7425bb815Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci// 9425bb815Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci// See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci// limitations under the License. 14425bb815Sopenharmony_ci 15425bb815Sopenharmony_civar r; 16425bb815Sopenharmony_ci 17425bb815Sopenharmony_ci// Simple test cases 18425bb815Sopenharmony_cir = new RegExp ("()"); 19425bb815Sopenharmony_ciassert (r.exec ("a") == ","); 20425bb815Sopenharmony_ci 21425bb815Sopenharmony_cir = new RegExp ("(a)"); 22425bb815Sopenharmony_ciassert (r.exec ("a") == "a,a"); 23425bb815Sopenharmony_ci 24425bb815Sopenharmony_cir = new RegExp ("((a)b)c"); 25425bb815Sopenharmony_ciassert (r.exec ("abc") == "abc,ab,a"); 26425bb815Sopenharmony_ci 27425bb815Sopenharmony_cir = new RegExp ("(a)*"); 28425bb815Sopenharmony_ciassert (r.exec ("b")[0] == ""); 29425bb815Sopenharmony_ciassert (r.exec ("b")[1] == undefined); 30425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa,a"); 31425bb815Sopenharmony_ci 32425bb815Sopenharmony_cir = new RegExp ("(a)+"); 33425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa,a"); 34425bb815Sopenharmony_ci 35425bb815Sopenharmony_cir = new RegExp ("(a){4}"); 36425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa,a"); 37425bb815Sopenharmony_ci 38425bb815Sopenharmony_cir = new RegExp ("(a){1,2}"); 39425bb815Sopenharmony_ciassert (r.exec ("a") == "a,a"); 40425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa,a"); 41425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa,a"); 42425bb815Sopenharmony_ci 43425bb815Sopenharmony_cir = new RegExp ("(a)?"); 44425bb815Sopenharmony_ciassert (r.exec ("a") == "a,a"); 45425bb815Sopenharmony_ciassert (r.exec ("b")[0] == ""); 46425bb815Sopenharmony_ciassert (r.exec ("b")[1] == undefined); 47425bb815Sopenharmony_ci 48425bb815Sopenharmony_ci// Test greedy iterations 49425bb815Sopenharmony_cir = new RegExp ("(a){1,3}a"); 50425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a"); 51425bb815Sopenharmony_ci 52425bb815Sopenharmony_cir = new RegExp ("(a){1,3}a"); 53425bb815Sopenharmony_ciassert (r.exec("aaa") == "aaa,a"); 54425bb815Sopenharmony_ci 55425bb815Sopenharmony_cir = new RegExp ("(a){1,3}"); 56425bb815Sopenharmony_ciassert (r.exec("a") == "a,a"); 57425bb815Sopenharmony_ci 58425bb815Sopenharmony_cir = new RegExp ("(a){1,3}"); 59425bb815Sopenharmony_ciassert (r.exec("aaa") == "aaa,a"); 60425bb815Sopenharmony_ci 61425bb815Sopenharmony_cir = new RegExp ("(a){1,3}"); 62425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaa,a"); 63425bb815Sopenharmony_ci 64425bb815Sopenharmony_cir = new RegExp ("(a){1,5}"); 65425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaaa,a"); 66425bb815Sopenharmony_ci 67425bb815Sopenharmony_cir = new RegExp ("(a|b){1,2}"); 68425bb815Sopenharmony_ciassert (r.exec("a") == "a,a"); 69425bb815Sopenharmony_ci 70425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}a"); 71425bb815Sopenharmony_ciassert (r.exec("aaa") == "aaa,a"); 72425bb815Sopenharmony_ci 73425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}a"); 74425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,b"); 75425bb815Sopenharmony_ci 76425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}a"); 77425bb815Sopenharmony_ciassert (r.exec("b") == undefined); 78425bb815Sopenharmony_ci 79425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}a"); 80425bb815Sopenharmony_ciassert (r.exec("bbb") == undefined); 81425bb815Sopenharmony_ci 82425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}"); 83425bb815Sopenharmony_ciassert (r.exec("a") == "a,a"); 84425bb815Sopenharmony_ci 85425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}"); 86425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a"); 87425bb815Sopenharmony_ci 88425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}"); 89425bb815Sopenharmony_ciassert (r.exec("aaa") == "aaa,a"); 90425bb815Sopenharmony_ci 91425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}"); 92425bb815Sopenharmony_ciassert (r.exec("ab") == "ab,b"); 93425bb815Sopenharmony_ci 94425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}"); 95425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,a"); 96425bb815Sopenharmony_ci 97425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}"); 98425bb815Sopenharmony_ciassert (r.exec("bab") == "bab,b"); 99425bb815Sopenharmony_ci 100425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}"); 101425bb815Sopenharmony_ciassert (r.exec("bbb") == "bbb,b"); 102425bb815Sopenharmony_ci 103425bb815Sopenharmony_cir = new RegExp ("(a|b){1,4}a"); 104425bb815Sopenharmony_ciassert (r.exec("bbb") == undefined); 105425bb815Sopenharmony_ci 106425bb815Sopenharmony_cir = new RegExp ("(a|b){1,4}"); 107425bb815Sopenharmony_ciassert (r.exec("ab") == "ab,b"); 108425bb815Sopenharmony_ci 109425bb815Sopenharmony_cir = new RegExp ("(a|b){1,4}"); 110425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,a"); 111425bb815Sopenharmony_ci 112425bb815Sopenharmony_cir = new RegExp ("(a|b){1,4}"); 113425bb815Sopenharmony_ciassert (r.exec("bbb") == "bbb,b"); 114425bb815Sopenharmony_ci 115425bb815Sopenharmony_cir = new RegExp ("(a|b){1,5}"); 116425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,a"); 117425bb815Sopenharmony_ci 118425bb815Sopenharmony_cir = new RegExp ("(a|b){1,5}"); 119425bb815Sopenharmony_ciassert (r.exec("abab") == "abab,b"); 120425bb815Sopenharmony_ci 121425bb815Sopenharmony_cir = new RegExp ("(a|b){1,5}"); 122425bb815Sopenharmony_ciassert (r.exec("bbb") == "bbb,b"); 123425bb815Sopenharmony_ci 124425bb815Sopenharmony_cir = new RegExp ("(aba)*"); 125425bb815Sopenharmony_ciassert (r.exec("aaaa") == ","); 126425bb815Sopenharmony_ci 127425bb815Sopenharmony_cir = new RegExp ("(aba)+"); 128425bb815Sopenharmony_ciassert (r.exec("aaaa") == undefined); 129425bb815Sopenharmony_ci 130425bb815Sopenharmony_cir = new RegExp ("(a|bb|c|d)"); 131425bb815Sopenharmony_ciassert (r.exec("a") == "a,a"); 132425bb815Sopenharmony_ci 133425bb815Sopenharmony_cir = new RegExp ("(a|b)"); 134425bb815Sopenharmony_ciassert (r.exec("a") == "a,a"); 135425bb815Sopenharmony_ci 136425bb815Sopenharmony_cir = new RegExp ("(a|b)+"); 137425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,a"); 138425bb815Sopenharmony_ci 139425bb815Sopenharmony_cir = new RegExp ("(a|b)"); 140425bb815Sopenharmony_ciassert (r.exec("b") == "b,b"); 141425bb815Sopenharmony_ci 142425bb815Sopenharmony_cir = new RegExp ("(a)"); 143425bb815Sopenharmony_ciassert (r.exec("a") == "a,a"); 144425bb815Sopenharmony_ci 145425bb815Sopenharmony_cir = new RegExp ("(a)*"); 146425bb815Sopenharmony_ciassert (r.exec("a") == "a,a"); 147425bb815Sopenharmony_ci 148425bb815Sopenharmony_cir = new RegExp ("(a)*"); 149425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaaa,a"); 150425bb815Sopenharmony_ci 151425bb815Sopenharmony_cir = new RegExp ("(a)+"); 152425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaaa,a"); 153425bb815Sopenharmony_ci 154425bb815Sopenharmony_cir = new RegExp ("(a|aa){0,3}b"); 155425bb815Sopenharmony_ciassert (r.exec("aaaaaab") == "aaaaaab,aa"); 156425bb815Sopenharmony_ci 157425bb815Sopenharmony_cir = new RegExp ("((a){2,3}){4}b"); 158425bb815Sopenharmony_ciassert (r.exec("aaaaaaaab") == "aaaaaaaab,aa,a"); 159425bb815Sopenharmony_ci 160425bb815Sopenharmony_ci// Test non-greedy iterations 161425bb815Sopenharmony_cir = new RegExp ("(a)+?"); 162425bb815Sopenharmony_ciassert (r.exec("aaaa") == "a,a"); 163425bb815Sopenharmony_ci 164425bb815Sopenharmony_cir = new RegExp ("(a)*?aa"); 165425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aa,"); 166425bb815Sopenharmony_ci 167425bb815Sopenharmony_cir = new RegExp ("(aaa|aa)*?aa"); 168425bb815Sopenharmony_ciassert (r.exec("aaaa")[0] == "aa"); 169425bb815Sopenharmony_ciassert (r.exec("aaaa")[1] == undefined); 170425bb815Sopenharmony_ci 171425bb815Sopenharmony_cir = new RegExp ("(a)??aa"); 172425bb815Sopenharmony_ciassert (r.exec("aaaa")[0] == "aa"); 173425bb815Sopenharmony_ciassert (r.exec("aaaa")[1] == undefined); 174425bb815Sopenharmony_ci 175425bb815Sopenharmony_cir = new RegExp ("(a)?aa"); 176425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaa,a"); 177425bb815Sopenharmony_ci 178425bb815Sopenharmony_cir = new RegExp ("(()*?)*?a"); 179425bb815Sopenharmony_ciassert (r.exec("ba")[0] == "a"); 180425bb815Sopenharmony_ciassert (r.exec("ba")[1] == undefined); 181425bb815Sopenharmony_ciassert (r.exec("ba")[2] == undefined); 182425bb815Sopenharmony_ci 183425bb815Sopenharmony_cir = new RegExp ("((bb?)*)*a"); 184425bb815Sopenharmony_ciassert (r.exec("bbba") == "bbba,bbb,b"); 185425bb815Sopenharmony_ci 186425bb815Sopenharmony_cir = new RegExp ("((bb?)*)*bbb\\Ba"); 187425bb815Sopenharmony_ciassert (r.exec("bbba")[0] == "bbba"); 188425bb815Sopenharmony_ciassert (r.exec("bbba")[1] == undefined); 189425bb815Sopenharmony_ciassert (r.exec("bbba")[2] == undefined); 190425bb815Sopenharmony_ci 191425bb815Sopenharmony_cir = new RegExp ("(a??){0,1}a"); 192425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a"); 193425bb815Sopenharmony_ci 194425bb815Sopenharmony_cir = new RegExp ("(a?){0,1}a"); 195425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a"); 196425bb815Sopenharmony_ci 197425bb815Sopenharmony_cir = new RegExp ("(a{0,1}?){0,1}a"); 198425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a"); 199425bb815Sopenharmony_ci 200425bb815Sopenharmony_cir = new RegExp ("(|.)+"); 201425bb815Sopenharmony_ciassert (JSON.stringify (r.exec("asdfgh")) === '["asdfgh","h"]'); 202425bb815Sopenharmony_ci 203425bb815Sopenharmony_ciassert (JSON.stringify (/([^\W](){8,}?){5}/.exec("asdfghijk")) === '["asdfg","g",""]'); 204425bb815Sopenharmony_ciassert (JSON.stringify (/(()+?(.+)|){3,}./u.exec("asdfghi")) === '["asdfghi","",null,null]') 205425bb815Sopenharmony_ciassert (JSON.stringify (/(()+?(.+)|){3,}?./u.exec("asdfghi")) === '["asdfghi","",null,null]') 206425bb815Sopenharmony_ciassert (JSON.stringify (/(?:()+?(.+)|){3,}./u.exec("asdfghi")) === '["asdfghi",null,null]') 207425bb815Sopenharmony_ciassert (JSON.stringify (/(?:()+?(.+)|){3,}?./u.exec("asdfghi")) === '["asdfghi",null,null]') 208