18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The contents of this file are subject to the Netscape Public 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* License Version 1.1 (the "License"); you may not use this file 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* except in compliance with the License. You may obtain a copy of 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the License at http://www.mozilla.org/NPL/ 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Software distributed under the License is distributed on an "AS 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* implied. See the License for the specific language governing 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* rights and limitations under the License. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Original Code is mozilla.org code. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Initial Developer of the Original Code is Netscape 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Communications Corporation. Portions created by Netscape are 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Copyright (C) 1998 Netscape Communications Corporation. All 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Rights Reserved. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Contributor(s): pschwartau@netscape.com 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Date: 26 November 2000 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*SUMMARY: Passing a RegExp object to a RegExp() constructor. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*This test arose from Bugzilla bug 61266. The ECMA3 section is: 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 15.10.4.1 new RegExp(pattern, flags) 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* If pattern is an object R whose [[Class]] property is "RegExp" and 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* flags is undefined, then let P be the pattern used to construct R 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* and let F be the flags used to construct R. If pattern is an object R 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* whose [[Class]] property is "RegExp" and flags is not undefined, 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* then throw a TypeError exception. Otherwise, let P be the empty string 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* if pattern is undefined and ToString(pattern) otherwise, and let F be 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the empty string if flags is undefined and ToString(flags) otherwise. 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*The current test will check the first scenario outlined above: 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* "pattern" is itself a RegExp object R 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* "flags" is undefined 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* We check that a new RegExp object obj2 defined from these parameters 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* is morally the same as the original RegExp object obj1. Of course, they 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* can't be equal as objects - so we check their enumerable properties... 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* In this test, the initial RegExp obj1 will include a flag. The flags 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* parameter for obj2 will be undefined in the sense of not being provided. 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//------------------------------------------------------------------------------------------------- 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar bug = '61266'; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar summary = 'Passing a RegExp object to a RegExp() constructor'; 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar statprefix = 'Applying RegExp() twice to pattern '; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar statmiddle = ' and flag '; 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar statsuffix = '; testing property '; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar singlequote = "'"; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar i = -1; var j = -1; var s = ''; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar obj1 = {}; var obj2 = {}; 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar status = ''; var actual = ''; var expect = ''; var msg = ''; 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar patterns = new Array(); 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar flags = new Array(); 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// various regular expressions to try - 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpatterns[0] = ''; 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpatterns[1] = 'abc'; 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpatterns[2] = '(.*)(3-1)\s\w'; 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpatterns[3] = '(.*)(...)\\s\\w'; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpatterns[4] = '[^A-Za-z0-9_]'; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpatterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)'; 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// various flags to try - 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectflags[0] = 'i'; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectflags[1] = 'g'; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectflags[2] = 'm'; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectflags[3] = undefined; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//------------------------------------------------------------------------------------------------- 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttest(); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//------------------------------------------------------------------------------------------------- 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test() 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project enterFunc ('test'); 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project printBugNumber (bug); 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project printStatus (summary); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i in patterns) 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project s = patterns[i]; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (j in flags) 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project f = flags[j]; 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project status = getStatus(s, f); 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project obj1 = new RegExp(s, f); 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project obj2 = new RegExp(obj1); 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (prop in obj2) 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project msg = status + quote(prop); 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actual = obj2[prop]; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expect = obj1[prop]; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reportCompare (expect, actual, msg); 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project exitFunc ('test'); 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction getStatus(regexp, flag) 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (statprefix + quote(regexp) + statmiddle + flag + statsuffix); 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction quote(text) 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (singlequote + text + singlequote); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}