// 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.
// Test switch statement using labels.

class Switcher {

  Switcher() { }

  say1 (sound) {
    var x = 0;
    switch (sound) {
      MOO:
      case "moo":
        x = 100;
        break;
      case "woof":
        x = 200;
        continue MOO;
      default:
        x = 300;
        break;
    }
    return x;
  }

  say2 (sound) {
    var x = 0;
    switch (sound) {
      WOOF:
      case "woof":
        x = 200;
        break;
      case "moo":
        x = 100;
        continue WOOF;
      default:
        x = 300;
        break;
    }
    return x;
  }

  // forward label to outer switch
  say3 (animal, sound) {
    var x = 0;
    switch (animal) {
      case "cow":
        switch (sound) {
          case "moo":
            x = 100; break;
          case "muh":
            x = 200; break;
          default:
            continue NIX_UNDERSTAND;
        }
        break;
      case "dog":
        if (sound == "woof") {
          x = 300;
        } else {
          continue NIX_UNDERSTAND;
        }
        break;
      NIX_UNDERSTAND:
      case "unicorn":
        x = 400;
        break;
      default:
        x = 500;
        break;
    }
    return x;
  }
}

class SwitchLabelTest {
  static testMain() {
    Switcher s = new Switcher();
    Expect.equals(100, s.say1("moo"));
    Expect.equals(100, s.say1("woof"));
    Expect.equals(300, s.say1("cockadoodledoo"));

    Expect.equals(200, s.say2("moo"));
    Expect.equals(200, s.say2("woof"));
    Expect.equals(300, s.say2(""));  // Dead unicorn says nothing.

    Expect.equals(100, s.say3("cow", "moo"));
    Expect.equals(200, s.say3("cow", "muh"));
    Expect.equals(400, s.say3("cow", "boeh"));  // Don't ask.
    Expect.equals(300, s.say3("dog", "woof"));
    Expect.equals(400, s.say3("dog", "boj"));   // Ĉu vi parolas Esperanton?
    Expect.equals(400, s.say3("unicorn", ""));  // Still dead.
    Expect.equals(500, s.say3("angry bird", "whoooo"));
  }
}

main() {
  SwitchLabelTest.testMain();
}
