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

/// @assertion If an unmigrated library re-exports a migrated library, the
/// re-exported symbols retain their migrated status (that is, downstream
/// migrated libraries will see their migrated types).
/// @description Check that non-nullable type alias exported from opted-in
/// library to legacy library and then back to the opted in code retains its
/// status.
/// @author iarkh@unipro.ru

// Requirements=nnbd-weak

import "dart:async";
import '../../../Utils/expect.dart';
import 'type-aliases/exports_A01_opted_out_aliases_lib.dart';

typedef exp_A                          = A          ;
typedef exp_Int                        = int        ;
typedef exp_Object                     = Object     ;
typedef exp_Function                   = Function   ;
typedef exp_FutureOrInt<T extends int> = FutureOr<T>;


main() {
  Expect.equals(typeOf<exp_A>()          , typeOf<AAlias>()          );
  Expect.equals(typeOf<exp_Int>()        , typeOf<IntAlias>()        );
  Expect.equals(typeOf<exp_Function>()   , typeOf<FunctionAlias>()   );
  Expect.equals(typeOf<exp_Object>()     , typeOf<ObjectAlias>()     );
  Expect.equals(typeOf<exp_FutureOrInt>(), typeOf<FutureOrIntAlias>());
}
