| /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ |
| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| /* |
| * Date: 03 December 2000 |
| * |
| * |
| * SUMMARY: This test arose from Bugzilla bug 57043: |
| * "Negative integers as object properties: strange behavior!" |
| * |
| * We check that object properties may be indexed by signed |
| * numeric literals, as in assignments like obj[-1] = 'Hello' |
| * |
| * NOTE: it should not matter whether we provide the literal with |
| * quotes around it or not; e.g. these should be equivalent: |
| * |
| * obj[-1] = 'Hello' |
| * obj['-1'] = 'Hello' |
| */ |
| //----------------------------------------------------------------------------- |
| var BUGNUMBER = 57043; |
| var summary = 'Indexing object properties by signed numerical literals -' |
| var statprefix = 'Adding a property to test object with an index of '; |
| var statsuffix = ', testing it now -'; |
| var propprefix = 'This is property '; |
| var obj = new Object(); |
| var status = ''; var actual = ''; var expect = ''; var value = ''; |
| |
| |
| // various indices to try - |
| var index = |
| [-1073741825, -1073741824, -1073741823, -5000, -507, -3, -2, -1, -0, 0, 1, 2, 3, 1073741823, 1073741824, 1073741825]; |
| |
| |
| //------------------------------------------------------------------------------------------------- |
| test(); |
| //------------------------------------------------------------------------------------------------- |
| |
| |
| function test() |
| { |
| enterFunc ('test'); |
| printBugNumber(BUGNUMBER); |
| printStatus (summary); |
| |
| for (var j in index) {testProperty(index[j]);} |
| |
| exitFunc ('test'); |
| } |
| |
| |
| function testProperty(i) |
| { |
| status = getStatus(i); |
| |
| // try to assign a property using the given index - |
| obj[i] = value = (propprefix + i); |
| |
| // try to read the property back via the index (as number) - |
| expect = value; |
| actual = obj[i]; |
| reportCompare(expect, actual, status); |
| |
| // try to read the property back via the index as string - |
| expect = value; |
| actual = obj[String(i)]; |
| reportCompare(expect, actual, status); |
| } |
| |
| function positive(n) { return 1 / n > 0; } |
| |
| function getStatus(i) |
| { |
| return statprefix + |
| (positive(i) ? i : "-" + -i) + |
| statsuffix; |
| } |