| // 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 named argument x: e of s, in source order: |
| /// |
| /// if e infers m with context type S, where S is the type of the parameter |
| /// named x of the targeted super-constructor, |
| /// then x: m is a named argument of s’ following the previously mentioned |
| /// arguments. |
| /// |
| /// @description Check that super-constructor invocation has correct parameters |
| /// @author sgrekhov@unipro.ru |
| |
| // SharedOptions=--enable-experiment=super-parameters |
| |
| import "../../Utils/expect.dart"; |
| |
| class S<T> { |
| num? n; |
| T? t; |
| String log; |
| S({this.n, this.t}) : log = "S"; |
| S.named({this.t, this.n}) : log = "S.named"; |
| } |
| |
| class C<T> extends S<T> { |
| C.constr1(String s, {super.t}); |
| C.constr2(int i, String s, {super.n}) : super(); |
| C.constr3(int i, String s, {super.n, super.t}) : super.named(); |
| } |
| |
| main() { |
| var c11 = C.constr1("Lily was here", t: 42); |
| Expect.equals(null, c11.n); |
| Expect.equals(42, c11.t); |
| Expect.equals("S", c11.log); |
| |
| var c12 = C.constr1("Lily was here", t: "42"); |
| Expect.equals(null, c12.n); |
| Expect.equals("42", c12.t); |
| Expect.equals("S", c12.log); |
| |
| var c21 = C.constr2(1, "Lily was here", n: 3.14); |
| Expect.equals(3.14, c21.n); |
| Expect.equals(null, c21.t); |
| Expect.equals("S", c21.log); |
| |
| var c22 = C.constr2(1, "Lily was here", n: 2); |
| Expect.equals(2, c22.n); |
| Expect.equals(null, c22.t); |
| Expect.equals("S", c22.log); |
| |
| var c31 = C.constr3(1, "Lily was here", n: 42, t: 3.14); |
| Expect.equals(42, c31.n); |
| Expect.equals(3.14, c31.t); |
| Expect.equals("S.named", c31.log); |
| |
| var c32 = C.constr3(1, "Lily was here", n: 3.14, t: 42); |
| Expect.equals(3.14, c32.n); |
| Expect.equals(42, c32.t); |
| Expect.equals("S.named", c32.log); |
| } |