diff options
Diffstat (limited to 'Source/JavaScriptCore/tests/mozilla/js1_2/statements/switch2.js')
-rw-r--r-- | Source/JavaScriptCore/tests/mozilla/js1_2/statements/switch2.js | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/tests/mozilla/js1_2/statements/switch2.js b/Source/JavaScriptCore/tests/mozilla/js1_2/statements/switch2.js new file mode 100644 index 0000000..5d35f8c --- /dev/null +++ b/Source/JavaScriptCore/tests/mozilla/js1_2/statements/switch2.js @@ -0,0 +1,188 @@ +/* The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is Mozilla Communicator client code, released March + * 31, 1998. + * + * The Initial Developer of the Original Code is Netscape Communications + * Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * + */ +/** + Filename: switch2.js + Description: 'Tests the switch statement' + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=323696 + + Author: Norris Boyd + Date: July 31, 1998 +*/ + + var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; + var VERSION = 'no version'; + startTest(); + var TITLE = 'statements: switch'; + var BUGNUMBER="323626"; + + writeHeaderToLog("Executing script: switch2.js"); + writeHeaderToLog( SECTION + " "+ TITLE); + + var count = 0; + var testcases = new Array(); + + // test defaults not at the end; regression test for a bug that + // nearly made it into 4.06 + function f0(i) { + switch(i) { + default: + case "a": + case "b": + return "ab*" + case "c": + return "c"; + case "d": + return "d"; + } + return ""; + } + testcases[count++] = new TestCase(SECTION, 'switch statement', + f0("a"), "ab*"); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f0("b"), "ab*"); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f0("*"), "ab*"); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f0("c"), "c"); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f0("d"), "d"); + + function f1(i) { + switch(i) { + case "a": + case "b": + default: + return "ab*" + case "c": + return "c"; + case "d": + return "d"; + } + return ""; + } + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f1("a"), "ab*"); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f1("b"), "ab*"); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f1("*"), "ab*"); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f1("c"), "c"); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f1("d"), "d"); + + // Switch on integer; will use TABLESWITCH opcode in C engine + function f2(i) { + switch (i) { + case 0: + case 1: + return 1; + case 2: + return 2; + } + // with no default, control will fall through + return 3; + } + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f2(0), 1); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f2(1), 1); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f2(2), 2); + + testcases[count++] = new TestCase(SECTION, 'switch statement', + f2(3), 3); + + // empty switch: make sure expression is evaluated + var se = 0; + switch (se = 1) { + } + testcases[count++] = new TestCase(SECTION, 'switch statement', + se, 1); + + // only default + se = 0; + switch (se) { + default: + se = 1; + } + testcases[count++] = new TestCase(SECTION, 'switch statement', + se, 1); + + // in loop, break should only break out of switch + se = 0; + for (var i=0; i < 2; i++) { + switch (i) { + case 0: + case 1: + break; + } + se = 1; + } + testcases[count++] = new TestCase(SECTION, 'switch statement', + se, 1); + + // test "fall through" + se = 0; + i = 0; + switch (i) { + case 0: + se++; + /* fall through */ + case 1: + se++; + break; + } + testcases[count++] = new TestCase(SECTION, 'switch statement', + se, 2); + + test(); + + // Needed: tests for evaluation time of case expressions. + // This issue was under debate at ECMA, so postponing for now. + + function test() { + writeLineToLog("hi"); + for ( tc=0; tc < testcases.length; tc++ ) { + testcases[tc].passed = writeTestCaseResult( + testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ + testcases[tc].actual ); + testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( testcases ); + } |