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

// This class has no problems.
class M {
  foo() {}
}

// This class has no problems.
class N = Object with M;

// This class has no problems.
class C extends Object with N {}

// This class has no problems.
abstract class M2 implements M {
  bar() {}
}

// This class has an error as it lacks an implementation of M.foo.
class N2 = Object with M2;

// This class lacks an implementation of M.foo, but it is abstract so there's
// no error.
abstract class N3 = Object with M2;

// This class has an error as it lacks an implementation of M.foo.
class C2 extends Object with M2 {}

// This class lacks an implementation of M.foo, but it is abstract so there's
// no error.
abstract class C3 extends Object with M2 {}

main() {}
