summaryrefslogtreecommitdiffstats
path: root/js/src/tests/js1_2/statements/switch2.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/js1_2/statements/switch2.js')
-rw-r--r--js/src/tests/js1_2/statements/switch2.js158
1 files changed, 158 insertions, 0 deletions
diff --git a/js/src/tests/js1_2/statements/switch2.js b/js/src/tests/js1_2/statements/switch2.js
new file mode 100644
index 000000000..86b2251fa
--- /dev/null
+++ b/js/src/tests/js1_2/statements/switch2.js
@@ -0,0 +1,158 @@
+/* -*- tab-width: 2; 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/. */
+
+
+/**
+ 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';
+var TITLE = 'statements: switch';
+var BUGNUMBER="323626";
+
+startTest();
+writeHeaderToLog("Executing script: switch2.js");
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 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 "";
+}
+new TestCase(SECTION, 'switch statement',
+ f0("a"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f0("b"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f0("*"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f0("c"), "c");
+
+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 "";
+}
+
+new TestCase(SECTION, 'switch statement',
+ f1("a"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f1("b"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f1("*"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f1("c"), "c");
+
+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;
+}
+
+new TestCase(SECTION, 'switch statement',
+ f2(0), 1);
+
+new TestCase(SECTION, 'switch statement',
+ f2(1), 1);
+
+new TestCase(SECTION, 'switch statement',
+ f2(2), 2);
+
+new TestCase(SECTION, 'switch statement',
+ f2(3), 3);
+
+// empty switch: make sure expression is evaluated
+var se = 0;
+switch (se = 1) {
+}
+new TestCase(SECTION, 'switch statement',
+ se, 1);
+
+// only default
+se = 0;
+switch (se) {
+default:
+ se = 1;
+}
+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;
+}
+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;
+}
+new TestCase(SECTION, 'switch statement',
+ se, 2);
+print("hi");
+
+test();
+
+// Needed: tests for evaluation time of case expressions.
+// This issue was under debate at ECMA, so postponing for now.
+