]> git.saurik.com Git - apple/javascriptcore.git/blame - tests/mozilla/ecma_3/RegExp/15.10.6.2-1.js
JavaScriptCore-461.tar.gz
[apple/javascriptcore.git] / tests / mozilla / ecma_3 / RegExp / 15.10.6.2-1.js
CommitLineData
b37bf2e1
A
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//-----------------------------------------------------------------------------
63var i = 0;
64var bug = '(none)';
65var summary = 'Testing regexps with the global flag set';
66var status = '';
67var statusmessages = new Array();
68var pattern = '';
69var patterns = new Array();
70var string = '';
71var strings = new Array();
72var actualmatch = '';
73var actualmatches = new Array();
74var expectedmatch = '';
75var expectedmatches = new Array();
76
77
78status = inSection(1);
79string = 'a b c d e';
80pattern = /\w\s\w/g;
81actualmatch = string.match(pattern);
82expectedmatch = ['a b','c d']; // see above explanation -
83addThis();
84
85
86status = inSection(2);
87string = '12345678';
88pattern = /\d\d\d/g;
89actualmatch = string.match(pattern);
90expectedmatch = ['123','456'];
91addThis();
92
93
94
95//-----------------------------------------------------------------------------
96test();
97//-----------------------------------------------------------------------------
98
99
100
101function 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
112function test()
113{
114 enterFunc ('test');
115 printBugNumber (bug);
116 printStatus (summary);
117 testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
118 exitFunc ('test');
119}