Home | History | Annotate | Download | only in Regress
      1 /*
      2 * The contents of this file are subject to the Netscape Public
      3 * License Version 1.1 (the "License"); you may not use this file
      4 * except in compliance with the License. You may obtain a copy of
      5 * the License at http://www.mozilla.org/NPL/
      6 *
      7 * Software distributed under the License is distributed on an "AS
      8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
      9 * implied. See the License for the specific language governing
     10 * rights and limitations under the License.
     11 *
     12 * The Original Code is mozilla.org code.
     13 *
     14 * The Initial Developer of the Original Code is Netscape
     15 * Communications Corporation.  Portions created by Netscape are
     16 * Copyright (C) 1998 Netscape Communications Corporation. All
     17 * Rights Reserved.
     18 *
     19 * Contributor(s): pschwartau (at) netscape.com
     20 * Date: 03 December 2000
     21 *
     22 *
     23 * SUMMARY:  This test arose from Bugzilla bug 57043:
     24 * "Negative integers as object properties: strange behavior!"
     25 *
     26 * We check that object properties may be indexed by signed
     27 * numeric literals, as in assignments like obj[-1] = 'Hello'
     28 *
     29 * NOTE: it should not matter whether we provide the literal with
     30 * quotes around it or not; e.g. these should be equivalent:
     31 *
     32 *                                    obj[-1]  = 'Hello'
     33 *                                    obj['-1']  = 'Hello'
     34 */
     35 //-------------------------------------------------------------------------------------------------
     36 var bug = 57043;
     37 var summary = 'Indexing object properties by signed numerical literals -'
     38 var statprefix = 'Adding a property to test object with an index of ';
     39 var statsuffix =  ', testing it now -';
     40 var propprefix = 'This is property ';
     41 var obj = new Object();
     42 var status = ''; var actual = ''; var expect = ''; var value = '';
     43 
     44 
     45 //  various indices to try -
     46 var index = Array(-5000, -507, -3, -2, -1, 0, 1, 2, 3);
     47 
     48 
     49 //-------------------------------------------------------------------------------------------------
     50 test();
     51 //-------------------------------------------------------------------------------------------------
     52 
     53 
     54 function test()
     55 {
     56   enterFunc ('test');
     57   printBugNumber (bug);
     58   printStatus (summary);
     59 
     60   for (j in index) {testProperty(index[j]);}
     61 
     62   exitFunc ('test');
     63 }
     64 
     65 
     66 function testProperty(i)
     67 {
     68   status = getStatus(i);
     69 
     70   // try to assign a property using the given index -
     71   obj[i] = value = (propprefix  +  i);
     72 
     73   // try to read the property back via the index (as number) -
     74   expect = value;
     75   actual = obj[i];
     76   reportCompare(expect, actual, status);
     77 
     78   // try to read the property back via the index as string -
     79   expect = value;
     80   actual = obj[String(i)];
     81   reportCompare(expect, actual, status);
     82 }
     83 
     84 
     85 function getStatus(i)
     86 {
     87   return (statprefix  +  i  +  statsuffix);
     88 }
     89