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

// @dart = 2.9

import "package:expect/expect.dart";

class A {}

class B extends A {}

class C {
  void f(B x, B y) {}
}

abstract class I1 {
  void f(covariant A x, B y);
}

// D contains a forwarding stub for f which ensures that `x` is type checked.
class D extends C implements I1 {}

abstract class I2 {
  void f(B x, covariant A y);
}

// E contains a forwarding stub for f which ensures that `y` is type checked.
class E extends D implements I2 {
  void f(B x, B y);
}

main() {
  E e = new E();
  C c = e;
  I1 i1 = e;
  D d = e;
  I2 i2 = e;
  A a = new A();
  B b = new B();
  c.f(b, b); // No error
  i1.f(b, b); // No error
  d.f(b, b); // No error
  i2.f(b, b); // No error
  e.f(b, b); // No error
  Expect.throwsTypeError(() {
    i1.f(a, b);
  });
  Expect.throwsTypeError(() {
    d.f(a, b);
  });
  Expect.throwsTypeError(() {
    i2.f(b, a);
  });
  Expect.throwsTypeError(() {
    e.f(a, b);
  });
  Expect.throwsTypeError(() {
    e.f(b, a);
  });
}
