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