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: splice2.js 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Description: 'Tests Array.splice(x,y) w/4 var args' 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:splice 2'; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var BUGNUMBER="123795"; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeHeaderToLog('Executing script: splice2.js'); 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeHeaderToLog( SECTION + " "+ TITLE); 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var count = 0; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var testcases = new Array(); 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function mySplice(testArray, splicedArray, first, len, elements) 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var removedArray = []; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var adjustedFirst = first; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var adjustedLen = len; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (adjustedFirst < 0) adjustedFirst = testArray.length + first; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (adjustedFirst < 0) adjustedFirst = 0; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (adjustedLen < 0) adjustedLen = 0; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i = 0; (i < adjustedFirst)&&(i < testArray.length); ++i) 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project splicedArray.push(testArray[i]); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (adjustedFirst < testArray.length) 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i = adjustedFirst; (i < adjustedFirst + adjustedLen) && (i < testArray.length); ++i) 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project removedArray.push(testArray[i]); 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i = 0; i < elements.length; i++) splicedArray.push(elements[i]); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i = adjustedFirst + adjustedLen; i < testArray.length; i++) 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project splicedArray.push(testArray[i]); 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return removedArray; 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function exhaustiveSpliceTestWithArgs(testname, testArray) 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var passed = true; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var errorMessage; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var reason = ""; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var first = -(testArray.length+2); first <= 2 + testArray.length; first++) 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var actualSpliced = []; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var expectedSpliced = []; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var actualRemoved = []; 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var expectedRemoved = []; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var len = 0; len < testArray.length + 2; len++) 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actualSpliced = []; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expectedSpliced = []; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i = 0; i < testArray.length; ++i) 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actualSpliced.push(testArray[i]); 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actualRemoved = actualSpliced.splice(first,len,-97,new String("test arg"),[],9.8); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expectedRemoved = mySplice(testArray,expectedSpliced,first,len,[-97,new String("test arg"),[],9.8]); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var adjustedFirst = first; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (adjustedFirst < 0) adjustedFirst = testArray.length + first; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (adjustedFirst < 0) adjustedFirst = 0; 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( (String(actualSpliced) != String(expectedSpliced)) 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ||(String(actualRemoved) != String(expectedRemoved))) 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( (String(actualSpliced) == String(expectedSpliced)) 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project &&(String(actualRemoved) != String(expectedRemoved)) ) 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( (expectedRemoved.length == 1) 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project &&(String(actualRemoved) == String(expectedRemoved[0]))) continue; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ( expectedRemoved.length == 0 && actualRemoved == void 0 ) continue; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project errorMessage = 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "ERROR: 'TEST FAILED' ERROR: 'TEST FAILED' ERROR: 'TEST FAILED'\n" + 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " test: " + "a.splice(" + first + "," + len + ",-97,new String('test arg'),[],9.8)\n" + 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " a: " + String(testArray) + "\n" + 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " actual spliced: " + String(actualSpliced) + "\n" + 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " expected spliced: " + String(expectedSpliced) + "\n" + 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " actual removed: " + String(actualRemoved) + "\n" + 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project " expected removed: " + String(expectedRemoved); 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reason = reason + errorMessage; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeHeaderToLog(errorMessage); 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project passed = false; 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var testcase = new TestCase(SECTION, testname, true, passed); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!passed) testcase.reason = reason; 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return testcase; 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var a = ['a','test string',456,9.34,new String("string object"),[],['h','i','j','k']]; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var b = [1,2,3,4,5,6,7,8,9,0]; 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[count++] = exhaustiveSpliceTestWithArgs("exhaustive splice w/2 optional args 1",a); 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[count++] = exhaustiveSpliceTestWithArgs("exhaustive splice w/2 optional args 2",b); 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function test() 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for ( tc=0; tc < testcases.length; tc++ ) { 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].passed = writeTestCaseResult( 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].expect, 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual, 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].description +" = "+ 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual ); 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stopTest(); 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ( testcases ); 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project test(); 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 151