// Copyright (c) 2016, 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.

import "package:expect/expect.dart";

class View {
  addChild(View v) {}
  transform(View fn(View v)) {}
}
class MyView extends View {
  addChild(covariant MyView v) {}
  transform(covariant MyView fn(Object v)) {}
}

main() {
  dynamic mv = new MyView();
  dynamic v = new View();
  
  mv.addChild(mv);
  Expect.throws(() => mv.addChild(v));

  mv.transform((_) => new MyView());

  // TODO(jmesserly): these *should* be cast failures, but DDC is currently
  // ignoring function type failures w/ a warning at the console...

  // * -> * not a subtype of Object -> MyView
  // Expect.throws(() => mv.transform((_) => mv));

  // View -> View not a subtype of Object -> MyView
  // Expect.throws(() => mv.transform((View x) => x));
}
