// 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.

/// @assertion The switch statement supports dispatching control among a large
/// number of cases.
/// switchStatement:
///   switch '(' expression ')' '{' switchCase* defaultCase? '}'
/// ;
/// switchCase:
///   label* case expression ':' statements
/// ;
/// defaultCase:
///   label* default ':' statements
/// ;
/// @description Checks that nested switch statements modifying the same
/// variables work correctly.
/// @author vasya

import '../../../Utils/expect.dart';

foo(value, value2) {
  var result;

  switch (value) {
    case 0:
      result = "0";
      switch (value2) {
        case "foo": result = "${result}FOO"; break;
        case "bar": result = "${result}BAR"; break;
        default: result = "${result}NULL";
      }
      break;
    default: result = "NULL";
  }
  return result;
}


main() {
  Expect.equals("0FOO", foo(0, "foo"));
  Expect.equals("NULL", foo(1, "foo"));
  Expect.equals("0BAR", foo(0, "bar"));
  Expect.equals("NULL", foo(1, "bar"));
  Expect.equals("0NULL", foo(0, null));
  Expect.equals("NULL", foo(null, null));
}
