]> git.saurik.com Git - apple/javascriptcore.git/blame - tests/mozilla/js1_2/statements/switch2.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / tests / mozilla / js1_2 / statements / switch2.js
CommitLineData
b37bf2e1
A
1/* The contents of this file are subject to the Netscape Public
2 * License Version 1.1 (the "License"); you may not use this file
3 * except in compliance with the License. You may obtain a copy of
4 * the License at http://www.mozilla.org/NPL/
5 *
6 * Software distributed under the License is distributed on an "AS
7 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
8 * implied. See the License for the specific language governing
9 * rights and limitations under the License.
10 *
11 * The Original Code is Mozilla Communicator client code, released March
12 * 31, 1998.
13 *
14 * The Initial Developer of the Original Code is Netscape Communications
15 * Corporation. Portions created by Netscape are
16 * Copyright (C) 1998 Netscape Communications Corporation. All
17 * Rights Reserved.
18 *
19 * Contributor(s):
20 *
21 */
22/**
23 Filename: switch2.js
24 Description: 'Tests the switch statement'
25
26 http://scopus.mcom.com/bugsplat/show_bug.cgi?id=323696
27
28 Author: Norris Boyd
29 Date: July 31, 1998
30*/
31
32 var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
33 var VERSION = 'no version';
34 startTest();
35 var TITLE = 'statements: switch';
36 var BUGNUMBER="323626";
37
38 writeHeaderToLog("Executing script: switch2.js");
39 writeHeaderToLog( SECTION + " "+ TITLE);
40
41 var count = 0;
42 var testcases = new Array();
43
44 // test defaults not at the end; regression test for a bug that
45 // nearly made it into 4.06
46 function f0(i) {
47 switch(i) {
48 default:
49 case "a":
50 case "b":
51 return "ab*"
52 case "c":
53 return "c";
54 case "d":
55 return "d";
56 }
57 return "";
58 }
59 testcases[count++] = new TestCase(SECTION, 'switch statement',
60 f0("a"), "ab*");
61
62 testcases[count++] = new TestCase(SECTION, 'switch statement',
63 f0("b"), "ab*");
64
65 testcases[count++] = new TestCase(SECTION, 'switch statement',
66 f0("*"), "ab*");
67
68 testcases[count++] = new TestCase(SECTION, 'switch statement',
69 f0("c"), "c");
70
71 testcases[count++] = new TestCase(SECTION, 'switch statement',
72 f0("d"), "d");
73
74 function f1(i) {
75 switch(i) {
76 case "a":
77 case "b":
78 default:
79 return "ab*"
80 case "c":
81 return "c";
82 case "d":
83 return "d";
84 }
85 return "";
86 }
87
88 testcases[count++] = new TestCase(SECTION, 'switch statement',
89 f1("a"), "ab*");
90
91 testcases[count++] = new TestCase(SECTION, 'switch statement',
92 f1("b"), "ab*");
93
94 testcases[count++] = new TestCase(SECTION, 'switch statement',
95 f1("*"), "ab*");
96
97 testcases[count++] = new TestCase(SECTION, 'switch statement',
98 f1("c"), "c");
99
100 testcases[count++] = new TestCase(SECTION, 'switch statement',
101 f1("d"), "d");
102
103 // Switch on integer; will use TABLESWITCH opcode in C engine
104 function f2(i) {
105 switch (i) {
106 case 0:
107 case 1:
108 return 1;
109 case 2:
110 return 2;
111 }
112 // with no default, control will fall through
113 return 3;
114 }
115
116 testcases[count++] = new TestCase(SECTION, 'switch statement',
117 f2(0), 1);
118
119 testcases[count++] = new TestCase(SECTION, 'switch statement',
120 f2(1), 1);
121
122 testcases[count++] = new TestCase(SECTION, 'switch statement',
123 f2(2), 2);
124
125 testcases[count++] = new TestCase(SECTION, 'switch statement',
126 f2(3), 3);
127
128 // empty switch: make sure expression is evaluated
129 var se = 0;
130 switch (se = 1) {
131 }
132 testcases[count++] = new TestCase(SECTION, 'switch statement',
133 se, 1);
134
135 // only default
136 se = 0;
137 switch (se) {
138 default:
139 se = 1;
140 }
141 testcases[count++] = new TestCase(SECTION, 'switch statement',
142 se, 1);
143
144 // in loop, break should only break out of switch
145 se = 0;
146 for (var i=0; i < 2; i++) {
147 switch (i) {
148 case 0:
149 case 1:
150 break;
151 }
152 se = 1;
153 }
154 testcases[count++] = new TestCase(SECTION, 'switch statement',
155 se, 1);
156
157 // test "fall through"
158 se = 0;
159 i = 0;
160 switch (i) {
161 case 0:
162 se++;
163 /* fall through */
164 case 1:
165 se++;
166 break;
167 }
168 testcases[count++] = new TestCase(SECTION, 'switch statement',
169 se, 2);
170
171 test();
172
173 // Needed: tests for evaluation time of case expressions.
174 // This issue was under debate at ECMA, so postponing for now.
175
176 function test() {
177 writeLineToLog("hi");
178 for ( tc=0; tc < testcases.length; tc++ ) {
179 testcases[tc].passed = writeTestCaseResult(
180 testcases[tc].expect,
181 testcases[tc].actual,
182 testcases[tc].description +" = "+
183 testcases[tc].actual );
184 testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
185 }
186 stopTest();
187 return ( testcases );
188 }