18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* The contents of this file are subject to the Netscape Public 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License Version 1.1 (the "License"); you may not use this file 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * except in compliance with the License. You may obtain a copy of 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the License at http://www.mozilla.org/NPL/ 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Software distributed under the License is distributed on an "AS 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * implied. See the License for the specific language governing 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * rights and limitations under the License. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Original Code is Mozilla Communicator client code, released March 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 31, 1998. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Initial Developer of the Original Code is Netscape Communications 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Corporation. Portions created by Netscape are 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1998 Netscape Communications Corporation. All 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Rights Reserved. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Contributor(s): 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Filename: slice.js 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Description: 'This tests the String object method: slice' 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Author: Nick Lerissa 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Date: Fri Feb 13 09:58:28 PST 1998 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var VERSION = 'no version'; 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project startTest(); 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var TITLE = 'String.slice'; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeHeaderToLog('Executing script: slice.js'); 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeHeaderToLog( SECTION + " "+ TITLE); 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var count = 0; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var testcases = new Array(); 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function myStringSlice(a, from, to) 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var from2 = from; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var to2 = to; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var returnString = new String(""); 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var i; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (from2 < 0) from2 = a.length + from; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (to2 < 0) to2 = a.length + to; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ((to2 > from2)&&(to2 > 0)&&(from2 < a.length)) 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (from2 < 0) from2 = 0; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (to2 > a.length) to2 = a.length; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i = from2; i < to2; ++i) returnString += a.charAt(i); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return returnString; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This function tests the slice command on a String 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // passed in. The arguments passed into slice range in 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // value from -5 to the length of the array + 4. Every 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // combination of the two arguments is tested. The expected 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // result of the slice(...) method is calculated and 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // compared to the actual result from the slice(...) method. 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the Strings are not similar false is returned. 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function exhaustiveStringSliceTest(testname, a) 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var x = 0; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var y = 0; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var errorMessage; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var reason = ""; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var passed = true; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (x = -(2 + a.length); x <= (2 + a.length); x++) 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (y = (2 + a.length); y >= -(2 + a.length); y--) 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var b = a.slice(x,y); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var c = myStringSlice(a,x,y); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (String(b) != String(c)) 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project errorMessage = 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "ERROR: 'TEST FAILED' ERROR: 'TEST FAILED' ERROR: 'TEST FAILED'\n" + 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " test: " + "a.slice(" + x + "," + y + ")\n" + 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " a: " + String(a) + "\n" + 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " actual result: " + String(b) + "\n" + 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " expected result: " + String(c) + "\n"; 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeHeaderToLog(errorMessage); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reason = reason + errorMessage; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project passed = false; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var testCase = new TestCase(SECTION, testname, true, passed); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (passed == false) 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testCase.reason = reason; 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return testCase; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var a = new String("abcdefghijklmnopqrstuvwxyz1234567890"); 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var b = new String("this is a test string"); 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[count++] = exhaustiveStringSliceTest("exhaustive String.slice test 1", a); 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[count++] = exhaustiveStringSliceTest("exhaustive String.slice test 2", b); 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function test() 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for ( tc=0; tc < testcases.length; tc++ ) { 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].passed = writeTestCaseResult( 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].expect, 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual, 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].description +" = "+ 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual ); 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stopTest(); 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ( testcases ); 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project test(); 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 124