* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / Microsoft.JScript / Test / Mozilla / ecma_3 / RegExp / 15.10.4.1-4.js
1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Mozilla Public License Version
5  * 1.1 (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS" basis,
10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11  * for the specific language governing rights and limitations under the
12  * License.
13  *
14  * The Original Code is mozilla.org code.
15  *
16  * The Initial Developer of the Original Code is
17  * Netscape Communications Corporation.
18  * Portions created by the Initial Developer are Copyright (C) 1998
19  * the Initial Developer. All Rights Reserved.
20  *
21  * Contributor(s):
22  *   pschwartau@netscape.com
23  *
24  * Alternatively, the contents of this file may be used under the terms of
25  * either the GNU General Public License Version 2 or later (the "GPL"), or
26  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27  * in which case the provisions of the GPL or the LGPL are applicable instead
28  * of those above. If you wish to allow use of your version of this file only
29  * under the terms of either the GPL or the LGPL, and not to allow others to
30  * use your version of this file under the terms of the MPL, indicate your
31  * decision by deleting the provisions above and replace them with the notice
32  * and other provisions required by the GPL or the LGPL. If you do not delete
33  * the provisions above, a recipient may use your version of this file under
34  * the terms of any one of the MPL, the GPL or the LGPL.
35  *
36  * ***** END LICENSE BLOCK *****
37  *
38  * Date: 26 November 2000
39  *
40  *
41  *SUMMARY: Passing a RegExp object to a RegExp() constructor. 
42  *This test arose from Bugzilla bug 61266. The ECMA3 section is:       
43  *
44  *  15.10.4.1 new RegExp(pattern, flags)
45  *
46  *  If pattern is an object R whose [[Class]] property is "RegExp" and 
47  *  flags is undefined, then let P be the pattern used to construct R 
48  *  and let F be the flags used to construct R. If pattern is an object R
49  *  whose [[Class]] property is "RegExp" and flags is not undefined, 
50  *  then throw a TypeError exception. Otherwise, let P be the empty string  
51  *  if pattern is undefined and ToString(pattern) otherwise, and let F be 
52  *  the empty string if flags is undefined and ToString(flags) otherwise.
53  *
54  *
55  *The current test will check the first scenario outlined above:
56  *
57  *   "pattern" is itself a RegExp object R
58  *   "flags"  is undefined 
59  *
60  * We check that a new RegExp object obj2 defined from these parameters
61  * is morally the same as the original RegExp object obj1. Of course, they 
62  * can't be equal as objects - so we check their enumerable properties...
63  *
64  * In this test, the initial RegExp object obj1 will include a flag. This test is 
65  * identical to test 15.10.4.1-3.js, except that here we use this syntax:
66  *
67  *                  obj2 = new RegExp(obj1, undefined);
68  *
69  * instead of:
70  *
71  *                  obj2 = new RegExp(obj1); 
72  */
73 //-------------------------------------------------------------------------------------------------
74 var bug = '61266';
75 var summary = 'Passing a RegExp object to a RegExp() constructor';
76 var statprefix = 'Applying RegExp() twice to pattern ';
77 var statmiddle = ' and flag ';
78 var statsuffix =  '; testing property ';
79 var singlequote = "'";
80 var i = -1; var j = -1; var s = '';
81 var obj1 = {}; var obj2 = {};
82 var status = ''; var actual = ''; var expect = ''; var msg = '';
83 var patterns = new Array();  
84 var flags = new Array();  
85
86
87 // various regular expressions to try -
88 patterns[0] = '';
89 patterns[1] = 'abc';
90 patterns[2] = '(.*)(3-1)\s\w';
91 patterns[3] = '(.*)(...)\\s\\w';
92 patterns[4] = '[^A-Za-z0-9_]';
93 patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)';
94
95 // various flags to try -
96 flags[0] = 'i';
97 flags[1] = 'g';
98 flags[2] = 'm';
99 flags[3] = undefined;
100
101
102
103 //-------------------------------------------------------------------------------------------------
104 test();
105 //-------------------------------------------------------------------------------------------------
106
107
108 function test() 
109 {
110   enterFunc ('test'); 
111   printBugNumber (bug);
112   printStatus (summary);
113
114   for (i in patterns)
115   {
116     s = patterns[i];
117     
118     for (j in flags)
119     {
120       f = flags[j];
121       status = getStatus(s, f);  
122       obj1 = new RegExp(s, f); 
123       obj2 = new RegExp(obj1, undefined);  // see introduction to bug 
124   
125       for (prop in obj2)
126       { 
127         msg  = status +  quote(prop); 
128         actual = obj2[prop]; 
129         expect = obj1[prop];
130         reportCompare (expect, actual, msg);
131       }
132     }
133   }
134
135   exitFunc ('test');
136 }
137
138
139 function getStatus(regexp, flag)
140
141   return (statprefix  +  quote(regexp) +  statmiddle  +  flag  +  statsuffix); 
142 }
143
144
145 function quote(text)
146 {
147   return (singlequote  +  text  + singlequote);
148 }