initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / ecma_2 / String / match-001.js
1 /**
2  *  File Name:          String/match-001.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
32     var SECTION = "String/match-001.js";
33     var VERSION = "ECMA_2";
34     var TITLE   = "String.prototype.match( regexp )";
35
36     startTest();
37
38     // the regexp argument is not a RegExp object
39     // this is not a string object
40
41     // cases in which the regexp global property is false
42
43      AddRegExpCases( 3, "3",   "1234567890", 1, 2, ["3"] );
44
45     // cases in which the regexp object global property is true
46
47     AddGlobalRegExpCases( /34/g, "/34/g", "343443444",  3, ["34", "34", "34"] );
48     AddGlobalRegExpCases( /\d{1}/g,  "/d{1}/g",  "123456abcde7890", 10,
49         ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] );
50
51     AddGlobalRegExpCases( /\d{2}/g,  "/d{2}/g",  "123456abcde7890", 5,
52         ["12", "34", "56", "78", "90"] );
53
54     AddGlobalRegExpCases( /\D{2}/g,  "/d{2}/g",  "123456abcde7890", 2,
55         ["ab", "cd"] );
56
57     test();
58
59
60 function AddRegExpCases(
61     regexp, str_regexp, string, length, index, matches_array ) {
62
63     AddTestCase(
64         "( " + string  + " ).match(" + str_regexp +").length",
65         length,
66         string.match(regexp).length );
67
68     AddTestCase(
69         "( " + string + " ).match(" + str_regexp +").index",
70         index,
71         string.match(regexp).index );
72
73     AddTestCase(
74         "( " + string + " ).match(" + str_regexp +").input",
75         string,
76         string.match(regexp).input );
77
78     for ( var matches = 0; matches < matches_array.length; matches++ ) {
79         AddTestCase(
80             "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
81             matches_array[matches],
82             string.match(regexp)[matches] );
83     }
84 }
85
86 function AddGlobalRegExpCases(
87     regexp, str_regexp, string, length, matches_array ) {
88
89     AddTestCase(
90         "( " + string  + " ).match(" + str_regexp +").length",
91         length,
92         string.match(regexp).length );
93
94     for ( var matches = 0; matches < matches_array.length; matches++ ) {
95         AddTestCase(
96             "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
97             matches_array[matches],
98             string.match(regexp)[matches] );
99     }
100 }