/*
 * 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 if function typedef which returns non-nullable value
 * is exported from opted-in library to legacy library and then back to the
 * opted in code, it retains its status. Typedef is in the form [typedef <type>
 * <identifier> <formalParameterPart>].
 * @author iarkh@unipro.ru
 */
// SharedOptions=--enable-experiment=non-nullable
// Requirements=nnbd-strong

import "dart:async";
import "../../Utils/expect.dart";
import "exports_A01_legacy_lib.dart";

typedef exp_getInt         = int Function();
typedef exp_getObject      = Object Function();
typedef exp_getFunction    = Function Function();
typedef exp_getFutureOrInt = FutureOr<int> Function();

main() {
  Expect.equals(exp_getInt,         def1_getInt);
  Expect.equals(exp_getObject,      def1_getObject);
  Expect.equals(exp_getFunction,    def1_getFunction);
  Expect.equals(exp_getFutureOrInt, def1_getFutureOrInt);
}
