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