// 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 An on-catch clause of the form catch (p) s is equivalent to an
/// on-catch clause on dynamic catch (p) s. An on-catch clause of the form
/// catch (p1, p2) s is equivalent to an on-catch clause
/// on dynamic catch (p1, p2) s.
/// @description Checks that a catch clause with no particular type specified for
/// the first exception parameter matches any object.
/// @author rodionov

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

class T1 {}
class T2 extends T1 {}

main() {
  bool success = false;
  try {
    throw new T2();
  } catch (p1) {
    success = true;
  }
  Expect.isTrue(success);

  success = false;
  try {
    throw new T1();
  } catch (p1) {
    success = true;
  }
  Expect.isTrue(success);

  success = false;
  try {
    throw "foo";
  } catch (p1, st) {
    success = true;
  }
  Expect.isTrue(success);
}
