| // 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"); | |
| } |