/*
 * 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 Execution of a switch statement of the form
 * switch (e) {label11 ..label1j1 case e1: s1 … labeln1 ..labelnjn case en: sn default: sn+1}
 * or the form switch (e) { label11 … label1j1 case e1: s1 … labeln1 ..labelnjn case en: sn}
 * proceeds as follows:
 * The statement var id = e; is evaluated, where id is a variable whose name is
 * distinct from any other variable in the program.  In checked mode, it is a run
 * time error if the value of e is not an instance of the same type as the constants e1 … en.
 * Next, the case clause case e1: s1 is executed if it exists.
 * If case e1: s1 does not exist, then if there is a default clause it is executed by executing sn+1.
 * @description Checks that if a switch statement does not have any case clauses, the default
 * clause is executed.
 * @author msyabro
 * @reviewer rodionov
 */
import "../../Utils/expect.dart";

foo(p) {
  switch(p) {
    default: return 1;
  }
}

main() {
  Expect.equals(1, foo(1));
  Expect.equals(1, foo(null));
  Expect.equals(1, foo(''));
}
