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}