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_cir = new RegExp ("a"); 18425bb815Sopenharmony_ciassert (r.exec ("a") == "a"); 19425bb815Sopenharmony_ciassert (r.exec ("b") == null); 20425bb815Sopenharmony_citry { 21425bb815Sopenharmony_ci r.exec.call({}, "a"); 22425bb815Sopenharmony_ci assert (false) 23425bb815Sopenharmony_ci} 24425bb815Sopenharmony_cicatch (e) 25425bb815Sopenharmony_ci{ 26425bb815Sopenharmony_ci assert (e instanceof TypeError); 27425bb815Sopenharmony_ci} 28425bb815Sopenharmony_ci 29425bb815Sopenharmony_ciassert (r.test ("a") == true); 30425bb815Sopenharmony_ciassert (r.test ("b") == false); 31425bb815Sopenharmony_citry { 32425bb815Sopenharmony_ci r.test.call({}, "a"); 33425bb815Sopenharmony_ci assert (false) 34425bb815Sopenharmony_ci} 35425bb815Sopenharmony_cicatch (e) 36425bb815Sopenharmony_ci{ 37425bb815Sopenharmony_ci assert (e instanceof TypeError); 38425bb815Sopenharmony_ci} 39425bb815Sopenharmony_ci 40425bb815Sopenharmony_cir = new RegExp ("a", "mig"); 41425bb815Sopenharmony_ciassert (r.toString () == "/a/gim"); 42425bb815Sopenharmony_ci 43425bb815Sopenharmony_ci/* Test continous calls to the exec method to see how does the match 44425bb815Sopenharmony_ci * updates the lastIndex propertyand see if the match restarts. 45425bb815Sopenharmony_ci */ 46425bb815Sopenharmony_civar re = new RegExp("a", "g"); 47425bb815Sopenharmony_ciresult = re.exec("a"); 48425bb815Sopenharmony_ciassert (result.length === 1); 49425bb815Sopenharmony_ciassert (result[0] === "a"); 50425bb815Sopenharmony_ciassert (re.lastIndex === 1); 51425bb815Sopenharmony_ci 52425bb815Sopenharmony_ciassert (re.exec("a") === null); 53425bb815Sopenharmony_ciassert (re.lastIndex === 0); 54425bb815Sopenharmony_ci 55425bb815Sopenharmony_ciresult = re.exec("a"); 56425bb815Sopenharmony_ciassert (result.length === 1); 57425bb815Sopenharmony_ciassert (result[0] === "a"); 58425bb815Sopenharmony_ciassert (re.lastIndex === 1); 59425bb815Sopenharmony_ci 60425bb815Sopenharmony_civar re1 = /foo/gim; 61425bb815Sopenharmony_civar re2 = /bar/g; 62425bb815Sopenharmony_ci 63425bb815Sopenharmony_citry { 64425bb815Sopenharmony_ci re2.compile("asd", "ggim"); 65425bb815Sopenharmony_ci assert (false); 66425bb815Sopenharmony_ci} catch (e) { 67425bb815Sopenharmony_ci assert (e instanceof SyntaxError); 68425bb815Sopenharmony_ci assert (re2 == "/bar/g"); 69425bb815Sopenharmony_ci} 70425bb815Sopenharmony_ci 71425bb815Sopenharmony_citry { 72425bb815Sopenharmony_ci re2.compile("[", undefined); 73425bb815Sopenharmony_ci assert (false); 74425bb815Sopenharmony_ci} catch (e) { 75425bb815Sopenharmony_ci assert (e instanceof SyntaxError); 76425bb815Sopenharmony_ci assert (re2 == "/bar/g"); 77425bb815Sopenharmony_ci} 78425bb815Sopenharmony_ci 79425bb815Sopenharmony_citry { 80425bb815Sopenharmony_ci re2.compile(re1, "im"); 81425bb815Sopenharmony_ci assert (false); 82425bb815Sopenharmony_ci} catch (e) { 83425bb815Sopenharmony_ci assert (e instanceof TypeError); 84425bb815Sopenharmony_ci assert (re2 == "/bar/g"); 85425bb815Sopenharmony_ci} 86425bb815Sopenharmony_ci 87425bb815Sopenharmony_cire2.lastIndex = 2; 88425bb815Sopenharmony_ciassert (re2.compile("asd", "im") === re2); 89425bb815Sopenharmony_ci 90425bb815Sopenharmony_ciassert (re2 == "/asd/im"); 91425bb815Sopenharmony_ciassert (re2.global === false); 92425bb815Sopenharmony_ciassert (re2.ignoreCase === true); 93425bb815Sopenharmony_ciassert (re2.multiline === true); 94425bb815Sopenharmony_ciassert (re2.source === "asd"); 95425bb815Sopenharmony_ciassert (re2.lastIndex === 0); 96425bb815Sopenharmony_ci 97425bb815Sopenharmony_ciassert (re2.compile(re1) === re2); 98425bb815Sopenharmony_ciassert (re2.toString() === re1.toString()); 99425bb815Sopenharmony_ciassert (re2.global === re1.global); 100425bb815Sopenharmony_ciassert (re2.ignoreCase === re1.ignoreCase); 101425bb815Sopenharmony_ciassert (re2.multiline === re1.multiline); 102425bb815Sopenharmony_ciassert (re2.source === re1.source); 103425bb815Sopenharmony_ciassert (re2.lastIndex === 0); 104