]> git.saurik.com Git - apple/javascriptcore.git/blame - tests/mozilla/ecma/String/15.5.4.10-1.js
JavaScriptCore-466.1.6.tar.gz
[apple/javascriptcore.git] / tests / mozilla / ecma / String / 15.5.4.10-1.js
CommitLineData
b37bf2e1
A
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
72function 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}
201function 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}
214function MyObject( value ) {
215 this.value = value;
216 this.substring = String.prototype.substring;
217 this.toString = new Function ( "return this.value+''" );
218}