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

// Tests that malformed types used in extends, implements, and with clauses
// cause compile-time errors.

import 'package:expect/expect.dart';

class A<T> {}

class C
  extends Unresolved //# 01: compile-time error
  extends A<Unresolved> //# 02: static type warning
  extends Object with Unresolved //# 03: compile-time error
  extends Object with A<Unresolved> //# 04: static type warning
  implements Unresolved //# 05: compile-time error
  implements A<Unresolved> //# 06: static type warning
  <A> extends A<int> //# 07: compile-time error
  <A> extends A<Unresolved> //# 08: compile-time error
  <A> extends Object with A<int> //# 09: compile-time error
  <A> extends Object with A<Unresolved> //# 10: compile-time error
  <A> implements A<int> //# 11: compile-time error
  <A> implements A<Unresolved> //# 12: compile-time error
{}

void main() {
  new C();
  Expect.isTrue(new C() is A<String> && new C() is A<int>); //# 02: continued
  Expect.isTrue(new C() is A<String> && new C() is A<int>); //# 04: continued
  Expect.isTrue(new C() is A<String> && new C() is A<int>); //# 06: continued
}
