// Copyright (c) 2011, 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.
// Check that FallThroughError is thrown if switch clause does not terminate.

class SwitchFallthruTest {
  static String test(int n) {
    String result = "foo";
    switch (n) {
      case 0:
        result = "zero";
        break;
      case 1:
        result = "one";
        // fall-through, throw implicit FallThroughError here.
      case 9:
        result = "nine";
        // No implicit FallThroughError at end of switch statement.
    }
    return result;
  }

  static testMain() {
    Expect.equals("zero", test(0));
    bool fallthroughCaught = false;
    try {
      test(1);
    } on FallThroughError catch (e) {
      fallthroughCaught = true;
    }
    Expect.equals(true, fallthroughCaught);
    Expect.equals("nine", test(9));
    Expect.equals("foo", test(99));
  }
}

main() {
  SwitchFallthruTest.testMain();
}
