// 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());
}
