| // 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. | 
 |  | 
 | import "package:expect/expect.dart"; | 
 |  | 
 | 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(); | 
 | } |