// 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 generic class with nullable type parameter in
 * opted-in library is exported to legacy library and then back to the opted in
 * code, it retains its status, i.e. still its type parameter can be [Null].
 * @author iarkh@unipro.ru
 */
// Requirements=nnbd-weak

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

main() {
  Expect.equals(dynamic, GENERIC_NULLABLE().getParamType());
  Expect.equals(Null,    GENERIC_NULLABLE<Null>().getParamType());

  Expect.equals(int,            GENERIC_NULLABLE_INT<int>().getParamType());
  Expect.equals(Null,           GENERIC_NULLABLE_INT<Null>().getParamType());
  Expect.equals(typeOf<int?>(), GENERIC_NULLABLE_INT().getParamType());

  Expect.equals(Object,            GENERIC_NULLABLE_OBJECT<Object>().getParamType());
  Expect.equals(Null,              GENERIC_NULLABLE_OBJECT<Null>().getParamType());
  Expect.equals(typeOf<Object?>(), GENERIC_NULLABLE_OBJECT().getParamType());

  Expect.equals(Function,            GENERIC_NULLABLE_FUNCTION<Function>().getParamType());
  Expect.equals(Null,                GENERIC_NULLABLE_FUNCTION<Null>().getParamType());
  Expect.equals(typeOf<Function?>(), GENERIC_NULLABLE_FUNCTION().getParamType());

  Expect.equals(Null, GENERIC_NULL().getParamType());
  Expect.equals(Null, GENERIC_NULL<Null>().getParamType());

  Expect.equals(FutureOr, GENERIC_FUTUREOR().getParamType());
  Expect.equals(FutureOr, GENERIC_FUTUREOR<FutureOr>().getParamType());
  Expect.equals(Null,     GENERIC_FUTUREOR<Null>().getParamType());
}
