]> git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma_2/String/match-002.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / tests / mozilla / ecma_2 / String / match-002.js
1 /**
2 * File Name: String/match-002.js
3 * ECMA Section: 15.6.4.9
4 * Description: Based on ECMA 2 Draft 7 February 1999
5 *
6 * Author: christine@netscape.com
7 * Date: 19 February 1999
8 */
9
10 /*
11 * String.match( regexp )
12 *
13 * If regexp is not an object of type RegExp, it is replaced with result
14 * of the expression new RegExp(regexp). Let string denote the result of
15 * converting the this value to a string. If regexp.global is false,
16 * return the result obtained by invoking RegExp.prototype.exec (see
17 * section 15.7.5.3) on regexp with string as parameter.
18 *
19 * Otherwise, set the regexp.lastIndex property to 0 and invoke
20 * RegExp.prototype.exec repeatedly until there is no match. If there is a
21 * match with an empty string (in other words, if the value of
22 * regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1.
23 * The value returned is an array with the properties 0 through n-1
24 * corresponding to the first element of the result of each matching
25 * invocation of RegExp.prototype.exec.
26 *
27 * Note that the match function is intentionally generic; it does not
28 * require that its this value be a string object. Therefore, it can be
29 * transferred to other kinds of objects for use as a method.
30 *
31 * This file tests cases in which regexp.global is false. Therefore,
32 * results should behave as regexp.exec with string passed as a parameter.
33 *
34 */
35
36 var SECTION = "String/match-002.js";
37 var VERSION = "ECMA_2";
38 var TITLE = "String.prototype.match( regexp )";
39
40 startTest();
41
42 // the regexp argument is not a RegExp object
43 // this is not a string object
44
45 AddRegExpCases( /([\d]{5})([-\ ]?[\d]{4})?$/,
46 "/([\d]{5})([-\ ]?[\d]{4})?$/",
47 "Boston, Mass. 02134",
48 14,
49 ["02134", "02134", undefined]);
50
51 AddGlobalRegExpCases( /([\d]{5})([-\ ]?[\d]{4})?$/g,
52 "/([\d]{5})([-\ ]?[\d]{4})?$/g",
53 "Boston, Mass. 02134",
54 ["02134"]);
55
56 // set the value of lastIndex
57 re = /([\d]{5})([-\ ]?[\d]{4})?$/;
58 re.lastIndex = 0;
59
60 s = "Boston, MA 02134";
61
62 AddRegExpCases( re,
63 "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex =0",
64 s,
65 s.lastIndexOf("0"),
66 ["02134", "02134", undefined]);
67
68
69 re.lastIndex = s.length;
70
71 AddRegExpCases( re,
72 "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " +
73 s.length,
74 s,
75 s.lastIndexOf("0"),
76 ["02134", "02134", undefined] );
77
78 re.lastIndex = s.lastIndexOf("0");
79
80 AddRegExpCases( re,
81 "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " +
82 s.lastIndexOf("0"),
83 s,
84 s.lastIndexOf("0"),
85 ["02134", "02134", undefined]);
86
87 re.lastIndex = s.lastIndexOf("0") + 1;
88
89 AddRegExpCases( re,
90 "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " +
91 s.lastIndexOf("0") +1,
92 s,
93 s.lastIndexOf("0"),
94 ["02134", "02134", undefined]);
95
96 test();
97
98 function AddRegExpCases(
99 regexp, str_regexp, string, index, matches_array ) {
100
101 // prevent a runtime error
102
103 if ( regexp.exec(string) == null || matches_array == null ) {
104 AddTestCase(
105 string + ".match(" + regexp +")",
106 matches_array,
107 string.match(regexp) );
108
109 return;
110 }
111
112 AddTestCase(
113 "( " + string + " ).match(" + str_regexp +").length",
114 matches_array.length,
115 string.match(regexp).length );
116
117 AddTestCase(
118 "( " + string + " ).match(" + str_regexp +").index",
119 index,
120 string.match(regexp).index );
121
122 AddTestCase(
123 "( " + string + " ).match(" + str_regexp +").input",
124 string,
125 string.match(regexp).input );
126
127 var limit = matches_array.length > string.match(regexp).length ?
128 matches_array.length :
129 string.match(regexp).length;
130
131 for ( var matches = 0; matches < limit; matches++ ) {
132 AddTestCase(
133 "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
134 matches_array[matches],
135 string.match(regexp)[matches] );
136 }
137 }
138
139 function AddGlobalRegExpCases(
140 regexp, str_regexp, string, matches_array ) {
141
142 // prevent a runtime error
143
144 if ( regexp.exec(string) == null || matches_array == null ) {
145 AddTestCase(
146 regexp + ".exec(" + string +")",
147 matches_array,
148 regexp.exec(string) );
149
150 return;
151 }
152
153 AddTestCase(
154 "( " + string + " ).match(" + str_regexp +").length",
155 matches_array.length,
156 string.match(regexp).length );
157
158 var limit = matches_array.length > string.match(regexp).length ?
159 matches_array.length :
160 string.match(regexp).length;
161
162 for ( var matches = 0; matches < limit; matches++ ) {
163 AddTestCase(
164 "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
165 matches_array[matches],
166 string.match(regexp)[matches] );
167 }
168 }