// Copyright (c) 2015, the Dart Team. All rights reserved. Use of this
// source code is governed by a BSD-style license that can be found in
// the LICENSE file.

/// Checks that lib1.fooX's dependencies on [A] via is-checks, as-expressions
/// and type-annotations(in checked-mode) is correctly tracked.

import "deferred_type_dependency_lib1.dart" deferred as lib1;
import "deferred_type_dependency_lib2.dart" deferred as lib2;
import "package:async_helper/async_helper.dart";
import "package:expect/expect.dart";

runTest() async {
  await lib1.loadLibrary();
  // Split the cases into a multi-test to test each feature separately.
  Expect.isFalse(
      lib1.fooIs /// is: ok
      lib1.fooAs /// as: ok
      lib1.fooAnnotation /// type_annotation: ok
      ("string")
      is! String /// none: ok
  );
  await lib2.loadLibrary();
  Expect.isTrue(
      lib1.fooIs /// is: ok
      lib1.fooAs /// as: ok
      lib1.fooAnnotation /// type_annotation: ok
      (lib2.getInstance())
      is! String /// none: ok
  );
}

main() {
  asyncStart();
  runTest().then((_) => asyncEnd());
}
