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: * Date: 01 May 2001 michael@0: * michael@0: * SUMMARY: Regression test for Bugzilla bug 74474 michael@0: *"switch() misbehaves with duplicated labels" michael@0: * michael@0: * See ECMA3 Section 12.11, "The switch Statement" michael@0: * See http://bugzilla.mozilla.org/show_bug.cgi?id=74474 michael@0: */ michael@0: //----------------------------------------------------------------------------- michael@0: var UBound = 0; michael@0: var BUGNUMBER = 74474; michael@0: var summary = 'Testing switch statements with duplicate labels'; michael@0: var status = ''; michael@0: var statusitems = [ ]; michael@0: var actual = ''; michael@0: var actualvalues = [ ]; michael@0: var expect= ''; michael@0: var expectedvalues = [ ]; michael@0: michael@0: michael@0: status = 'Section A of test: the string literal "1" as a duplicate label'; michael@0: actual = ''; michael@0: switch ('1') michael@0: { michael@0: case '1': michael@0: actual += 'a'; michael@0: case '1': michael@0: actual += 'b'; michael@0: } michael@0: expect = 'ab'; michael@0: addThis(); michael@0: michael@0: michael@0: status = 'Section B of test: the numeric literal 1 as a duplicate label'; michael@0: actual = ''; michael@0: switch (1) michael@0: { michael@0: case 1: michael@0: actual += 'a'; michael@0: case 1: michael@0: actual += 'b'; michael@0: } michael@0: expect = 'ab'; michael@0: addThis(); michael@0: michael@0: michael@0: status = 'Section C of test: the numeric literal 1 as a duplicate label, via a function parameter'; michael@0: tryThis(1); michael@0: function tryThis(x) michael@0: { michael@0: actual = ''; michael@0: michael@0: switch (x) michael@0: { michael@0: case x: michael@0: actual += 'a'; michael@0: case x: michael@0: actual += 'b'; michael@0: } michael@0: } michael@0: expect = 'ab'; michael@0: addThis(); michael@0: michael@0: michael@0: michael@0: //--------------------------------------------------------------------------------- michael@0: test(); michael@0: //--------------------------------------------------------------------------------- michael@0: michael@0: michael@0: michael@0: function addThis() michael@0: { michael@0: statusitems[UBound] = status; michael@0: actualvalues[UBound] = actual; michael@0: expectedvalues[UBound] = expect; michael@0: UBound++; michael@0: } michael@0: michael@0: michael@0: function test() michael@0: { michael@0: enterFunc ('test'); michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus (summary); michael@0: michael@0: for (var i = 0; i < UBound; i++) michael@0: { michael@0: reportCompare(expectedvalues[i], actualvalues[i], getStatus(i)); michael@0: } michael@0: michael@0: exitFunc ('test'); michael@0: } michael@0: michael@0: michael@0: function getStatus(i) michael@0: { michael@0: return statusitems[i]; michael@0: }