// Copyright (c) 2021, 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 When inferring the super-constructor invocation, s, targeting the
/// super constructor D, we include the implicit super-parameters from the
/// constructor parameter list:
///
/// The super-constructor invocation s infers a super-constructor invocation s’
/// such that
/// ...
/// For each super parameter p in C, in source order, where p has parameter name
/// n, (inferred or declared) type T, associated super-constructor parameter q,
/// and where S is the type of the parameter q:
///
/// Let xn be an identifier for then name n. As an expression, xn denotes the
/// final variable introduced into the initializer list scope by p.
/// Then s’ has an argument following the previously mentioned arguments:
/// xn if p is positional, or
/// xn: xn if q is named.
///
/// @description Check that super-constructor invocation has correct parameters
/// @author sgrekhov@unipro.ru

import "../../Utils/expect.dart";

class S<T> {
  S(num n, {T? t}) {
    Expect.equals(1, n);
    Expect.equals("42", t);
  }
  S.named(T t, {num n = 0}) {
    Expect.equals(1, n);
    Expect.equals("42", t);
  }
}

class C<T> extends S<T> {
  C.constr1(super.n, String s, {super.t});
  C.constr2(int i, super.n, String s, {super.t}) : super();
  C.constr3(int i, super.t, String s, {super.n}) : super.named();
}

main() {
  C.constr1(1, "Lily was here", t: "42");
  C.constr2(1, 1, "Lily was here", t: "42");
  C.constr3(1, "42", "Lily was here", n: 1);
}
