]> git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma_3/RegExp/15.10.6.2-1.js
JavaScriptCore-1097.3.3.tar.gz
[apple/javascriptcore.git] / tests / mozilla / ecma_3 / RegExp / 15.10.6.2-1.js
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 IS"
8 * basis, WITHOUT WARRANTY OF ANY KIND, either expressed
9 * or 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.
17 * All Rights Reserved.
18 *
19 * Contributor(s): pschwartau@netscape.com
20 * Date: 23 October 2001
21 *
22 * SUMMARY: Testing regexps with the global flag set.
23 * NOT every substring fitting the given pattern will be matched.
24 * The parent string is CONSUMED as successive matches are found.
25 *
26 * From the ECMA-262 Final spec:
27 *
28 * 15.10.6.2 RegExp.prototype.exec(string)
29 * Performs a regular expression match of string against the regular
30 * expression and returns an Array object containing the results of
31 * the match, or null if the string did not match.
32 *
33 * The string ToString(string) is searched for an occurrence of the
34 * regular expression pattern as follows:
35 *
36 * 1. Let S be the value of ToString(string).
37 * 2. Let length be the length of S.
38 * 3. Let lastIndex be the value of the lastIndex property.
39 * 4. Let i be the value of ToInteger(lastIndex).
40 * 5. If the global property is false, let i = 0.
41 * 6. If i < 0 or i > length then set lastIndex to 0 and return null.
42 * 7. Call [[Match]], giving it the arguments S and i.
43 * If [[Match]] returned failure, go to step 8;
44 * otherwise let r be its State result and go to step 10.
45 * 8. Let i = i+1.
46 * 9. Go to step 6.
47 * 10. Let e be r's endIndex value.
48 * 11. If the global property is true, set lastIndex to e.
49 *
50 * etc.
51 *
52 *
53 * So when the global flag is set, |lastIndex| is incremented every time
54 * there is a match; not from i to i+1, but from i to "endIndex" e:
55 *
56 * e = (index of last input character matched so far by the pattern) + 1
57 *
58 * Thus in the example below, the first endIndex e occurs after the
59 * first match 'a b'. The next match will begin AFTER this, and so
60 * will NOT be 'b c', but rather 'c d'. Similarly, 'd e' won't be matched.
61 */
62 //-----------------------------------------------------------------------------
63 var i = 0;
64 var bug = '(none)';
65 var summary = 'Testing regexps with the global flag set';
66 var status = '';
67 var statusmessages = new Array();
68 var pattern = '';
69 var patterns = new Array();
70 var string = '';
71 var strings = new Array();
72 var actualmatch = '';
73 var actualmatches = new Array();
74 var expectedmatch = '';
75 var expectedmatches = new Array();
76
77
78 status = inSection(1);
79 string = 'a b c d e';
80 pattern = /\w\s\w/g;
81 actualmatch = string.match(pattern);
82 expectedmatch = ['a b','c d']; // see above explanation -
83 addThis();
84
85
86 status = inSection(2);
87 string = '12345678';
88 pattern = /\d\d\d/g;
89 actualmatch = string.match(pattern);
90 expectedmatch = ['123','456'];
91 addThis();
92
93
94
95 //-----------------------------------------------------------------------------
96 test();
97 //-----------------------------------------------------------------------------
98
99
100
101 function addThis()
102 {
103 statusmessages[i] = status;
104 patterns[i] = pattern;
105 strings[i] = string;
106 actualmatches[i] = actualmatch;
107 expectedmatches[i] = expectedmatch;
108 i++;
109 }
110
111
112 function test()
113 {
114 enterFunc ('test');
115 printBugNumber (bug);
116 printStatus (summary);
117 testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
118 exitFunc ('test');
119 }