initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / ecma / String / 15.5.4.10-1.js
1 /* The contents of this file are subject to the Netscape Public
2  * License Version 1.1 (the "License"); you may not use this file
3  * except in compliance with the License. You may obtain a copy of
4  * the License at http://www.mozilla.org/NPL/
5  *
6  * Software distributed under the License is distributed on an "AS
7  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
8  * implied. See the License for the specific language governing
9  * rights and limitations under the License.
10  *
11  * The Original Code is Mozilla Communicator client code, released March
12  * 31, 1998.
13  *
14  * The Initial Developer of the Original Code is Netscape Communications
15  * Corporation. Portions created by Netscape are
16  * Copyright (C) 1998 Netscape Communications Corporation. All
17  * Rights Reserved.
18  *
19  * Contributor(s): 
20  * 
21  */
22 /**
23     File Name:          15.5.4.10-1.js
24     ECMA Section:       15.5.4.10 String.prototype.substring( start, end )
25     Description:
26
27     15.5.4.10 String.prototype.substring(start, end)
28
29     Returns a substring of the result of converting this object to a string,
30     starting from character position start and running to character position
31     end of the string. The result is a string value, not a String object.
32
33     If either argument is NaN or negative, it is replaced with zero; if either
34     argument is larger than the length of the string, it is replaced with the
35     length of the string.
36
37     If start is larger than end, they are swapped.
38
39     When the substring method is called with two arguments start and end, the
40     following steps are taken:
41
42     1.  Call ToString, giving it the this value as its argument.
43     2.  Call ToInteger(start).
44     3.  Call ToInteger (end).
45     4.  Compute the number of characters in Result(1).
46     5.  Compute min(max(Result(2), 0), Result(4)).
47     6.  Compute min(max(Result(3), 0), Result(4)).
48     7.  Compute min(Result(5), Result(6)).
49     8.  Compute max(Result(5), Result(6)).
50     9.  Return a string whose length is the difference between Result(8) and
51         Result(7), containing characters from Result(1), namely the characters
52         with indices Result(7) through Result(8)1, in ascending order.
53
54     Note that the substring function is intentionally generic; it does not require
55     that its this value be a String object. Therefore it can be transferred to other
56     kinds of objects for use as a method.
57
58     Author:             christine@netscape.com
59     Date:               12 november 1997
60 */
61
62     var SECTION = "15.5.4.10-1";
63     var VERSION = "ECMA_1";
64     startTest();
65     var TITLE   = "String.prototype.substring( start, end )";
66
67     writeHeaderToLog( SECTION + " "+ TITLE);
68
69     var testcases = getTestCases();
70     test();
71
72 function getTestCases() {
73     var array = new Array();
74     var item = 0;
75
76     array[item++] = new TestCase( SECTION,  "String.prototype.substring.length",        2,          String.prototype.substring.length );
77     array[item++] = new TestCase( SECTION,  "delete String.prototype.substring.length", false,      delete String.prototype.substring.length );
78     array[item++] = new TestCase( SECTION,  "delete String.prototype.substring.length; String.prototype.substring.length", 2,      eval("delete String.prototype.substring.length; String.prototype.substring.length") );
79
80     // test cases for when substring is called with no arguments.
81
82     // this is a string object
83
84     array[item++] = new TestCase(   SECTION,
85                                     "var s = new String('this is a string object'); typeof s.substring()",
86                                     "string",
87                                     eval("var s = new String('this is a string object'); typeof s.substring()") );
88
89     array[item++] = new TestCase(   SECTION,
90                                     "var s = new String(''); s.substring(1,0)",
91                                     "",
92                                     eval("var s = new String(''); s.substring(1,0)") );
93
94     array[item++] = new TestCase(   SECTION,
95                                     "var s = new String('this is a string object'); s.substring(true, false)",
96                                     "t",
97                                     eval("var s = new String('this is a string object'); s.substring(false, true)") );
98
99     array[item++] = new TestCase(   SECTION,
100                                     "var s = new String('this is a string object'); s.substring(NaN, Infinity)",
101                                     "this is a string object",
102                                     eval("var s = new String('this is a string object'); s.substring(NaN, Infinity)") );
103
104
105     array[item++] = new TestCase(   SECTION,
106                                     "var s = new String('this is a string object'); s.substring(Infinity, NaN)",
107                                     "this is a string object",
108                                     eval("var s = new String('this is a string object'); s.substring(Infinity, NaN)") );
109
110
111     array[item++] = new TestCase(   SECTION,
112                                     "var s = new String('this is a string object'); s.substring(Infinity, Infinity)",
113                                     "",
114                                     eval("var s = new String('this is a string object'); s.substring(Infinity, Infinity)") );
115
116     array[item++] = new TestCase(   SECTION,
117                                     "var s = new String('this is a string object'); s.substring(-0.01, 0)",
118                                     "",
119                                     eval("var s = new String('this is a string object'); s.substring(-0.01,0)") );
120
121
122     array[item++] = new TestCase(   SECTION,
123                                     "var s = new String('this is a string object'); s.substring(s.length, s.length)",
124                                     "",
125                                     eval("var s = new String('this is a string object'); s.substring(s.length, s.length)") );
126
127     array[item++] = new TestCase(   SECTION,
128                                     "var s = new String('this is a string object'); s.substring(s.length+1, 0)",
129                                     "this is a string object",
130                                     eval("var s = new String('this is a string object'); s.substring(s.length+1, 0)") );
131
132
133     array[item++] = new TestCase(   SECTION,
134                                     "var s = new String('this is a string object'); s.substring(-Infinity, -Infinity)",
135                                     "",
136                                     eval("var s = new String('this is a string object'); s.substring(-Infinity, -Infinity)") );
137
138     // this is not a String object, start is not an integer
139
140
141     array[item++] = new TestCase(   SECTION,
142                                     "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(Infinity,-Infinity)",
143                                     "1,2,3,4,5",
144                                     eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(Infinity,-Infinity)") );
145
146     array[item++] = new TestCase(   SECTION,
147                                     "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true, false)",
148                                     "1",
149                                     eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true, false)") );
150
151     array[item++] = new TestCase(   SECTION,
152                                     "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4', '5')",
153                                     "3",
154                                     eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4', '5')") );
155
156
157     // this is an object object
158     array[item++] = new TestCase(   SECTION,
159                                     "var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,0)",
160                                     "[object ",
161                                     eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,0)") );
162
163     array[item++] = new TestCase(   SECTION,
164                                     "var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,obj.toString().length)",
165                                     "Object]",
166                                     eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8, obj.toString().length)") );
167
168     // this is a function object
169     array[item++] = new TestCase(   SECTION,
170                                     "var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8, Infinity)",
171                                     "Function]",
172                                     eval("var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8,Infinity)") );
173     // this is a number object
174     array[item++] = new TestCase(   SECTION,
175                                     "var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(Infinity, NaN)",
176                                     "NaN",
177                                     eval("var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(Infinity, NaN)") );
178
179     // this is the Math object
180     array[item++] = new TestCase(   SECTION,
181                                     "var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI, -10)",
182                                     "[ob",
183                                     eval("var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI, -10)") );
184
185     // this is a Boolean object
186
187     array[item++] = new TestCase(   SECTION,
188                                     "var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array(), new Boolean(1))",
189                                     "f",
190                                     eval("var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array(), new Boolean(1))") );
191
192     // this is a user defined object
193
194     array[item++] = new TestCase( SECTION,
195                                     "var obj = new MyObject( void 0 ); obj.substring(0, 100)",
196                                     "undefined",
197                                     eval( "var obj = new MyObject( void 0 ); obj.substring(0,100)") );
198
199     return array;
200 }
201 function test() {
202     for ( tc=0; tc < testcases.length; tc++ ) {
203         testcases[tc].passed = writeTestCaseResult(
204                             testcases[tc].expect,
205                             testcases[tc].actual,
206                             testcases[tc].description +" = "+
207                             testcases[tc].actual );
208
209         testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
210     }
211     stopTest();
212     return ( testcases );
213 }
214 function MyObject( value ) {
215     this.value = value;
216     this.substring = String.prototype.substring;
217     this.toString = new Function ( "return this.value+''" );
218 }