mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 02:37:53 +00:00
40611dd611
TBR=kustermann@google.com BUG= Review URL: https://codereview.chromium.org/2454993003 .
175 lines
2.8 KiB
Dart
175 lines
2.8 KiB
Dart
// 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");
|
|
}
|