Home | History | Annotate | Download | only in RegExp
      1 /*
      2 * The contents of this file are subject to the Netscape Public
      3 * License Version 1.1 (the "License"); you may not use this file
      4 * except in compliance with the License. You may obtain a copy of
      5 * the License at http://www.mozilla.org/NPL/
      6 *
      7 * Software distributed under the License is distributed on an "AS
      8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
      9 * implied. See the License for the specific language governing
     10 * rights and limitations under the License.
     11 *
     12 * The Original Code is mozilla.org code.
     13 *
     14 * The Initial Developer of the Original Code is Netscape
     15 * Communications Corporation.  Portions created by Netscape are
     16 * Copyright (C) 1998 Netscape Communications Corporation. All
     17 * Rights Reserved.
     18 *
     19 * Contributor(s): pschwartau (at) netscape.com
     20 * Date: 26 November 2000
     21 *
     22 *
     23 *SUMMARY: Passing a RegExp object to a RegExp() constructor.
     24 *This test arose from Bugzilla bug 61266. The ECMA3 section is:
     25 *
     26 *  15.10.4.1 new RegExp(pattern, flags)
     27 *
     28 *  If pattern is an object R whose [[Class]] property is "RegExp" and
     29 *  flags is undefined, then let P be the pattern used to construct R
     30 *  and let F be the flags used to construct R. If pattern is an object R
     31 *  whose [[Class]] property is "RegExp" and flags is not undefined,
     32 *  then throw a TypeError exception. Otherwise, let P be the empty string
     33 *  if pattern is undefined and ToString(pattern) otherwise, and let F be
     34 *  the empty string if flags is undefined and ToString(flags) otherwise.
     35 *
     36 *
     37 *The current test will check the second scenario outlined above:
     38 *
     39 *   "pattern" is itself a RegExp object R
     40 *   "flags" is NOT undefined
     41 *
     42 * This should throw an exception ... we test for this.
     43 *
     44 */
     45 //-------------------------------------------------------------------------------------------------
     46 var bug = '61266';
     47 var summary = 'Negative test: Passing (RegExp object, flag) to RegExp() constructor';
     48 var statprefix = 'Passing RegExp object on pattern ';
     49 var statsuffix =  '; passing flag ';
     50 var cnFAILURE = 'Expected an exception to be thrown, but none was -';
     51 var singlequote = "'";
     52 var i = -1; var j = -1; var s = ''; var f = '';
     53 var obj1 = {}; var obj2 = {};
     54 var patterns = new Array();
     55 var flags = new Array();
     56 
     57 
     58 // various regular expressions to try -
     59 patterns[0] = '';
     60 patterns[1] = 'abc';
     61 patterns[2] = '(.*)(3-1)\s\w';
     62 patterns[3] = '(.*)(...)\\s\\w';
     63 patterns[4] = '[^A-Za-z0-9_]';
     64 patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)';
     65 
     66 // various flags to try -
     67 flags[0] = 'i';
     68 flags[1] = 'g';
     69 flags[2] = 'm';
     70 
     71 
     72 
     73 //-------------------------------------------------------------------------------------------------
     74 test();
     75 //-------------------------------------------------------------------------------------------------
     76 
     77 
     78 function test()
     79 {
     80   enterFunc ('test');
     81   printBugNumber (bug);
     82   printStatus (summary);
     83 
     84   for (i in patterns)
     85   {
     86     s = patterns[i];
     87 
     88     for (j in flags)
     89     {
     90       f = flags[j];
     91       printStatus(getStatus(s, f));
     92       obj1 = new RegExp(s, f);
     93       obj2 = new RegExp(obj1, f);   // this should cause an exception
     94 
     95       // WE SHOULD NEVER REACH THIS POINT -
     96       reportFailure(cnFAILURE);
     97     }
     98   }
     99 
    100   exitFunc ('test');
    101 }
    102 
    103 
    104 function getStatus(regexp, flag)
    105 {
    106   return (statprefix  +  quote(regexp) +  statsuffix  +   flag);
    107 }
    108 
    109 
    110 function quote(text)
    111 {
    112   return (singlequote  +  text  + singlequote);
    113 }