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"); 23425bb815Sopenharmony_ci 24425bb815Sopenharmony_cir = new RegExp ("(?:(?:a)b)c"); 25425bb815Sopenharmony_ciassert (r.exec ("abc") == "abc"); 26425bb815Sopenharmony_ci 27425bb815Sopenharmony_cir = new RegExp ("(?:a)*"); 28425bb815Sopenharmony_ciassert (r.exec ("b") == ""); 29425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa"); 30425bb815Sopenharmony_ci 31425bb815Sopenharmony_cir = new RegExp ("(?:a)+"); 32425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa"); 33425bb815Sopenharmony_ci 34425bb815Sopenharmony_cir = new RegExp ("(?:a){4}"); 35425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa"); 36425bb815Sopenharmony_ci 37425bb815Sopenharmony_cir = new RegExp ("(?:a){1,2}"); 38425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 39425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa"); 40425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa"); 41425bb815Sopenharmony_ci 42425bb815Sopenharmony_cir = new RegExp ("(?:a)?"); 43425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 44425bb815Sopenharmony_ciassert (r.exec ("b") == ""); 45425bb815Sopenharmony_ci 46425bb815Sopenharmony_ci// Test greedy iterations 47425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}a"); 48425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa"); 49425bb815Sopenharmony_ci 50425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}a"); 51425bb815Sopenharmony_ciassert (r.exec ("aaa") == "aaa"); 52425bb815Sopenharmony_ci 53425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}"); 54425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 55425bb815Sopenharmony_ci 56425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}"); 57425bb815Sopenharmony_ciassert (r.exec ("aaa") == "aaa"); 58425bb815Sopenharmony_ci 59425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}"); 60425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaa"); 61425bb815Sopenharmony_ci 62425bb815Sopenharmony_cir = new RegExp ("(?:a){1,5}"); 63425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa"); 64425bb815Sopenharmony_ci 65425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,2}"); 66425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 67425bb815Sopenharmony_ci 68425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}a"); 69425bb815Sopenharmony_ciassert (r.exec ("aaa") == "aaa"); 70425bb815Sopenharmony_ci 71425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}a"); 72425bb815Sopenharmony_ciassert (r.exec ("aba") == "aba"); 73425bb815Sopenharmony_ci 74425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}a"); 75425bb815Sopenharmony_ciassert (r.exec ("b") == undefined); 76425bb815Sopenharmony_ci 77425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}a"); 78425bb815Sopenharmony_ciassert (r.exec ("bbb") == undefined); 79425bb815Sopenharmony_ci 80425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}"); 81425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 82425bb815Sopenharmony_ci 83425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}"); 84425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa"); 85425bb815Sopenharmony_ci 86425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}"); 87425bb815Sopenharmony_ciassert (r.exec ("aaa") == "aaa"); 88425bb815Sopenharmony_ci 89425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}"); 90425bb815Sopenharmony_ciassert (r.exec ("ab") == "ab"); 91425bb815Sopenharmony_ci 92425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}"); 93425bb815Sopenharmony_ciassert (r.exec ("aba") == "aba"); 94425bb815Sopenharmony_ci 95425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}"); 96425bb815Sopenharmony_ciassert (r.exec ("bab") == "bab"); 97425bb815Sopenharmony_ci 98425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}"); 99425bb815Sopenharmony_ciassert (r.exec ("bbb") == "bbb"); 100425bb815Sopenharmony_ci 101425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,4}a"); 102425bb815Sopenharmony_ciassert (r.exec ("bbb") == undefined); 103425bb815Sopenharmony_ci 104425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,4}"); 105425bb815Sopenharmony_ciassert (r.exec ("ab") == "ab"); 106425bb815Sopenharmony_ci 107425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,4}"); 108425bb815Sopenharmony_ciassert (r.exec ("aba") == "aba"); 109425bb815Sopenharmony_ci 110425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,4}"); 111425bb815Sopenharmony_ciassert (r.exec ("bbb") == "bbb"); 112425bb815Sopenharmony_ci 113425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,5}"); 114425bb815Sopenharmony_ciassert (r.exec ("abab") == "abab"); 115425bb815Sopenharmony_ci 116425bb815Sopenharmony_cir = new RegExp ("(?:aba)*"); 117425bb815Sopenharmony_ciassert (r.exec ("aaaa") == ""); 118425bb815Sopenharmony_ci 119425bb815Sopenharmony_cir = new RegExp ("(?:aba)+"); 120425bb815Sopenharmony_ciassert (r.exec ("aaaa") == undefined); 121425bb815Sopenharmony_ci 122425bb815Sopenharmony_cir = new RegExp ("(?:a|bb|c|d)"); 123425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 124425bb815Sopenharmony_ci 125425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)"); 126425bb815Sopenharmony_ciassert (r.exec ("") == undefined); 127425bb815Sopenharmony_ci 128425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)"); 129425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 130425bb815Sopenharmony_ci 131425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)"); 132425bb815Sopenharmony_ciassert (r.exec ("b") == "b"); 133425bb815Sopenharmony_ci 134425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)"); 135425bb815Sopenharmony_ciassert (r.exec ("c") == "c"); 136425bb815Sopenharmony_ci 137425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)"); 138425bb815Sopenharmony_ciassert (r.exec ("d") == "d"); 139425bb815Sopenharmony_ci 140425bb815Sopenharmony_cir = new RegExp ("(?:a|b)+"); 141425bb815Sopenharmony_ciassert (r.exec ("aba") == "aba"); 142425bb815Sopenharmony_ci 143425bb815Sopenharmony_cir = new RegExp ("(?:a|b)"); 144425bb815Sopenharmony_ciassert (r.exec ("b") == "b"); 145425bb815Sopenharmony_ci 146425bb815Sopenharmony_cir = new RegExp ("(?:a)"); 147425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 148425bb815Sopenharmony_ci 149425bb815Sopenharmony_cir = new RegExp ("(?:a)*"); 150425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 151425bb815Sopenharmony_ci 152425bb815Sopenharmony_cir = new RegExp ("(?:a)*"); 153425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa"); 154425bb815Sopenharmony_ci 155425bb815Sopenharmony_cir = new RegExp ("(?:a)+"); 156425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa"); 157425bb815Sopenharmony_ci 158425bb815Sopenharmony_cir = new RegExp ("(?:a)?aa"); 159425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaa"); 160425bb815Sopenharmony_ci 161425bb815Sopenharmony_cir = new RegExp ("(?:a?){0,1}a"); 162425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa"); 163425bb815Sopenharmony_ci 164425bb815Sopenharmony_cir = new RegExp ("(?:a|aa){0,3}b"); 165425bb815Sopenharmony_ciassert (r.exec ("aaaaaab") == "aaaaaab"); 166425bb815Sopenharmony_ci 167425bb815Sopenharmony_cir = new RegExp ("(?:(?:a){2,3}){4}b"); 168425bb815Sopenharmony_ciassert (r.exec ("aaaaaaaab") == "aaaaaaaab"); 169425bb815Sopenharmony_ci 170425bb815Sopenharmony_ci// Test non-greedy iterations 171425bb815Sopenharmony_cir = new RegExp ("(?:a)+?"); 172425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "a"); 173425bb815Sopenharmony_ci 174425bb815Sopenharmony_cir = new RegExp ("(?:a)*?aa"); 175425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa"); 176425bb815Sopenharmony_ci 177425bb815Sopenharmony_cir = new RegExp ("(?:aaa|aa)*?aa"); 178425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa"); 179425bb815Sopenharmony_ci 180425bb815Sopenharmony_cir = new RegExp ("(?:a)??aa"); 181425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa"); 182425bb815Sopenharmony_ci 183425bb815Sopenharmony_cir = new RegExp ("(?:(?:)*?)*?a"); 184425bb815Sopenharmony_ciassert (r.exec ("ba") == "a"); 185425bb815Sopenharmony_ci 186425bb815Sopenharmony_cir = new RegExp ("(?:(?:bb?)*)*a"); 187425bb815Sopenharmony_ciassert (r.exec ("bbba") == "bbba"); 188425bb815Sopenharmony_ci 189425bb815Sopenharmony_cir = new RegExp ("(?:(?:bb?)*)*bbb\\Ba"); 190425bb815Sopenharmony_ciassert (r.exec ("bbba") == "bbba"); 191425bb815Sopenharmony_ci 192425bb815Sopenharmony_cir = new RegExp ("(?:a??){0,1}a"); 193425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa"); 194425bb815Sopenharmony_ci 195425bb815Sopenharmony_cir = new RegExp ("(?:a{0,1}?){0,1}a"); 196425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa"); 197