blob: 509a3738c06249a8a587a1be87111d2e15833d50 [file] [log] [blame]
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:expect/expect.dart';
mkOne() => 1;
mkTwo() => 2;
testNormal() {
int result;
switch (mkOne()) {
case 0:
result = 0;
break;
case 1:
result = 1;
break;
case 2:
result = 2;
break;
default:
result = 3;
break;
}
Expect.isTrue(result == 1);
}
testDefault() {
int result;
switch (null) {
case 0:
result = 0;
break;
case 1:
result = 1;
break;
case 2:
result = 2;
break;
default:
result = 3;
break;
}
Expect.isTrue(result == 3);
}
testFallThrough() {
int result;
switch (mkOne()) {
case 0:
result = 0;
break;
case 1:
case 2:
result = 2;
break;
default:
result = 3;
break;
}
Expect.isTrue(result == 2);
}
testContinue() {
int result;
switch (mkTwo()) {
case 0:
result = 0;
break;
setitto1:
case 1:
result = 1;
continue setitto3;
case 2:
result = 2;
continue setitto1;
setitto3:
default:
result = 3;
break;
}
Expect.isTrue(result == 3);
}
testOnlyDefault() {
int result;
switch (mkTwo()) {
default:
result = 42;
}
Expect.isTrue(result == 42);
}
testOnlyDefaultWithBreak() {
int result;
switch (mkTwo()) {
default:
result = 42;
}
Expect.isTrue(result == 42);
}
String testReturn() {
switch (mkOne()) {
case 0:
return "bad";
case 1:
return "good";
default:
return "bad";
}
}
regressionTest() {
Expect.isTrue(regressionTestHelper(0, 0) == -1);
Expect.isTrue(regressionTestHelper(4, 0) == -1);
Expect.isTrue(regressionTestHelper(4, 1) == 42);
}
regressionTestHelper(i, j) {
switch (i) {
case 4:
switch (j) {
case 1:
return 42;
}
}
return -1;
}
regressionTest2() {
var state = 1;
while (state < 2) {
switch (state) {
case 1:
state++;
break;
case 3:
case 4:
// We will translate this currently to an empty [Fragment] which can
// cause issues if we would like to append/prepend to it.
assert(false);
}
}
return [1];
}
regressionTest3() {
f(x) {
switch (x) {
case 1:
return 2;
case 2:
}
throw new UnsupportedError("Unexpected constant kind.");
}
Expect.isTrue(f(1) == 2);
}
main() {
testNormal();
testDefault();
testFallThrough();
testContinue();
testOnlyDefault();
testOnlyDefaultWithBreak();
regressionTest();
regressionTest2();
regressionTest3();
var result = testReturn();
Expect.isTrue(result == "good");
}