Home | History | Annotate | Download | only in Array
      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 	Filename:     slice.js
     24 	Description:  'This tests out some of the functionality on methods on the Array objects'
     25 
     26 	Author:       Nick Lerissa
     27 	Date:         Fri Feb 13 09:58:28 PST 1998
     28 */
     29 
     30 	var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
     31 	var VERSION = 'no version';
     32     startTest();
     33 	var TITLE = 'String:slice';
     34 
     35 	writeHeaderToLog('Executing script: slice.js');
     36 	writeHeaderToLog( SECTION + " "+ TITLE);
     37 
     38 	var count = 0;
     39 	var testcases = new Array();
     40 
     41 
     42 	function mySlice(a, from, to)
     43 	{
     44 	    var from2       = from;
     45 	    var to2         = to;
     46 	    var returnArray = [];
     47 	    var i;
     48 
     49 	    if (from2 < 0) from2 = a.length + from;
     50 	    if (to2 < 0)   to2   = a.length + to;
     51 
     52 	    if ((to2 > from2)&&(to2 > 0)&&(from2 < a.length))
     53 	    {
     54 	        if (from2 < 0)        from2 = 0;
     55 	        if (to2 > a.length) to2 = a.length;
     56 
     57 	        for (i = from2; i < to2; ++i) returnArray.push(a[i]);
     58 	    }
     59 	    return returnArray;
     60 	}
     61 
     62 	// This function tests the slice command on an Array
     63 	// passed in. The arguments passed into slice range in
     64 	// value from -5 to the length of the array + 4. Every
     65 	// combination of the two arguments is tested. The expected
     66 	// result of the slice(...) method is calculated and
     67 	// compared to the actual result from the slice(...) method.
     68 	// If the Arrays are not similar false is returned.
     69 	function exhaustiveSliceTest(testname, a)
     70 	{
     71 	    var x = 0;
     72 	    var y = 0;
     73 	    var errorMessage;
     74 	    var reason = "";
     75 	    var passed = true;
     76 
     77 	    for (x = -(2 + a.length); x <= (2 + a.length); x++)
     78 	        for (y = (2 + a.length); y >= -(2 + a.length); y--)
     79 	        {
     80 	            var b  = a.slice(x,y);
     81 	            var c = mySlice(a,x,y);
     82 
     83 	            if (String(b) != String(c))
     84 	            {
     85 	                errorMessage =
     86 	                    "ERROR: 'TEST FAILED' ERROR: 'TEST FAILED' ERROR: 'TEST FAILED'\n" +
     87 	                    "            test: " + "a.slice(" + x + "," + y + ")\n" +
     88 	                    "               a: " + String(a) + "\n" +
     89 	                    "   actual result: " + String(b) + "\n" +
     90 	                    " expected result: " + String(c) + "\n";
     91 	                writeHeaderToLog(errorMessage);
     92 	                reason = reason + errorMessage;
     93 	                passed = false;
     94 	            }
     95 	        }
     96 	    var testCase = new TestCase(SECTION, testname, true, passed);
     97 	    if (passed == false)
     98 	        testCase.reason = reason;
     99 	    return testCase;
    100 	}
    101 
    102 	var a = ['a','test string',456,9.34,new String("string object"),[],['h','i','j','k']];
    103 	var b = [1,2,3,4,5,6,7,8,9,0];
    104 
    105 	testcases[count++] = exhaustiveSliceTest("exhaustive slice test 1", a);
    106 	testcases[count++] = exhaustiveSliceTest("exhaustive slice test 2", b);
    107 
    108 	function test()
    109 	{
    110 	   for ( tc=0; tc < testcases.length; tc++ ) {
    111 	        testcases[tc].passed = writeTestCaseResult(
    112 	        testcases[tc].expect,
    113 	        testcases[tc].actual,
    114 	        testcases[tc].description +" = "+
    115 	        testcases[tc].actual );
    116 	        testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
    117 	   }
    118 	   stopTest();
    119 	   return ( testcases );
    120 	}
    121 
    122 	test();
    123 
    124