// Copyright (c) 2014, 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';
import 'package:async_helper/async_helper.dart';

import "constraints_lib.dart" deferred as lib;
import "constraints_lib.dart" as lib2; //# type_annotation_non_deferred: ok

class F {}

class G2<T> {}

main() {
  lib.C a = null; //# type_annotation_null: compile-time error
  Expect.throws(() { //# new_before_load: compile-time error
    lib.C a = new lib.C(); //# new_before_load: continued
  }, (e) => e is Error); //# new_before_load: continued

  // In this case we do not defer C.
  lib2.C a1 = new lib2.C(); //# type_annotation_non_deferred: continued
  asyncStart();
  lib.loadLibrary().then((_) {
    lib.C a2 = new lib.C(); //# type_annotation1: compile-time error
    lib.G<F> a3 = new lib.G<F>(); //# type_annotation_generic1: compile-time error
    G2<lib.C> a4 = new G2(); //# type_annotation_generic2: compile-time error
    G2<lib.C> a5 = new G2<lib.C>(); //# type_annotation_generic3: compile-time error
    lib.G<lib.C> a = new lib.G<lib.C>(); //# type_annotation_generic4: compile-time error
    var a6 = new lib.C(); //# new: ok
    var g1 = new lib.G<F>(); //# new_generic1: ok
    // new G2<lib.C>() does not give a dynamic type error because a malformed
    // type used as type-parameter is treated as dynamic.
    var g2 = new G2<lib.C>(); //# new_generic2: compile-time error
    var g3 = new lib.G<lib.C>(); //# new_generic3: compile-time error
    var instance = lib.constantInstance;
    Expect.throwsTypeError(() { //# is_check: compile-time error
      bool a7 = instance is lib.Const; //# is_check: continued
    }); //# is_check: continued
    Expect.throwsTypeError(() { //# as_operation: compile-time error
      instance as lib.Const; //# as_operation: continued
    }); //# as_operation: continued
    Expect.throwsTypeError(() { //# catch_check: compile-time error
      try { throw instance; } on lib.Const {} //# catch_check: continued
    }); //# catch_check: continued
    int i = lib.C.staticMethod(); //# static_method: ok
    asyncEnd();
  });
}

lib.C a9 = null; //# type_annotation_top_level: compile-time error
