michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: michael@0: /** michael@0: Filename: splice1.js michael@0: Description: 'Tests Array.splice(x,y) w/no var args' michael@0: michael@0: Author: Nick Lerissa michael@0: Date: Fri Feb 13 09:58:28 PST 1998 michael@0: */ michael@0: michael@0: var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; michael@0: var VERSION = 'no version'; michael@0: var TITLE = 'String:splice 1'; michael@0: var BUGNUMBER="123795"; michael@0: michael@0: startTest(); michael@0: writeHeaderToLog('Executing script: splice1.js'); michael@0: writeHeaderToLog( SECTION + " "+ TITLE); michael@0: michael@0: var a = ['a','test string',456,9.34,new String("string object"),[],['h','i','j','k']]; michael@0: var b = [1,2,3,4,5,6,7,8,9,0]; michael@0: michael@0: exhaustiveSpliceTest("exhaustive splice w/no optional args 1",a); michael@0: exhaustiveSpliceTest("exhaustive splice w/no optional args 1",b); michael@0: michael@0: test(); michael@0: michael@0: michael@0: function mySplice(testArray, splicedArray, first, len, elements) michael@0: { michael@0: var removedArray = []; michael@0: var adjustedFirst = first; michael@0: var adjustedLen = len; michael@0: michael@0: if (adjustedFirst < 0) adjustedFirst = testArray.length + first; michael@0: if (adjustedFirst < 0) adjustedFirst = 0; michael@0: michael@0: if (adjustedLen < 0) adjustedLen = 0; michael@0: michael@0: for (i = 0; (i < adjustedFirst)&&(i < testArray.length); ++i) michael@0: splicedArray.push(testArray[i]); michael@0: michael@0: if (adjustedFirst < testArray.length) michael@0: for (i = adjustedFirst; (i < adjustedFirst + adjustedLen) && michael@0: (i < testArray.length); ++i) michael@0: { michael@0: removedArray.push(testArray[i]); michael@0: } michael@0: michael@0: for (i = 0; i < elements.length; i++) splicedArray.push(elements[i]); michael@0: michael@0: for (i = adjustedFirst + adjustedLen; i < testArray.length; i++) michael@0: splicedArray.push(testArray[i]); michael@0: michael@0: return removedArray; michael@0: } michael@0: michael@0: function exhaustiveSpliceTest(testname, testArray) michael@0: { michael@0: var errorMessage; michael@0: var passed = true; michael@0: var reason = ""; michael@0: michael@0: for (var first = -(testArray.length+2); first <= 2 + testArray.length; first++) michael@0: { michael@0: var actualSpliced = []; michael@0: var expectedSpliced = []; michael@0: var actualRemoved = []; michael@0: var expectedRemoved = []; michael@0: michael@0: for (var len = 0; len < testArray.length + 2; len++) michael@0: { michael@0: actualSpliced = []; michael@0: expectedSpliced = []; michael@0: michael@0: for (var i = 0; i < testArray.length; ++i) michael@0: actualSpliced.push(testArray[i]); michael@0: michael@0: actualRemoved = actualSpliced.splice(first,len); michael@0: expectedRemoved = mySplice(testArray,expectedSpliced,first,len,[]); michael@0: michael@0: var adjustedFirst = first; michael@0: if (adjustedFirst < 0) adjustedFirst = testArray.length + first; michael@0: if (adjustedFirst < 0) adjustedFirst = 0; michael@0: michael@0: if ( (String(actualSpliced) != String(expectedSpliced)) michael@0: ||(String(actualRemoved) != String(expectedRemoved))) michael@0: { michael@0: if ( (String(actualSpliced) == String(expectedSpliced)) michael@0: &&(String(actualRemoved) != String(expectedRemoved)) ) michael@0: { michael@0: if ( (expectedRemoved.length == 1) michael@0: &&(String(actualRemoved) == String(expectedRemoved[0]))) continue; michael@0: if ( expectedRemoved.length == 0 && actualRemoved == void 0) continue; michael@0: } michael@0: michael@0: errorMessage = michael@0: "ERROR: 'TEST FAILED'\n" + michael@0: " test: " + "a.splice(" + first + "," + len + ",-97,new String('test arg'),[],9.8)\n" + michael@0: " a: " + String(testArray) + "\n" + michael@0: " actual spliced: " + String(actualSpliced) + "\n" + michael@0: " expected spliced: " + String(expectedSpliced) + "\n" + michael@0: " actual removed: " + String(actualRemoved) + "\n" + michael@0: " expected removed: " + String(expectedRemoved) + "\n"; michael@0: writeHeaderToLog(errorMessage); michael@0: reason = reason + errorMessage; michael@0: passed = false; michael@0: } michael@0: } michael@0: } michael@0: var testcase = new TestCase( SECTION, testname, true, passed); michael@0: if (!passed) michael@0: testcase.reason = reason; michael@0: return testcase; michael@0: }