// 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 Effectively, each super parameters, super.p:
/// ...
/// Implicitly adds that variable as an implicit argument to the
/// super-constructor invocation.
///
/// @description Check that super parameter is implicitly added to
/// super-constructor invocation
/// @author sgrekhov@unipro.ru

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

class S {
  int s1, s2;
  String log;
  S(int x, [int p = 0]) : s1 = x, s2 = p, log = "S";
  S.n(int x, [int p = 0]) : s1 = x, s2 = p, log = "S.n";
}

class C extends S {
  int c;
  C(this.c, super.x, int y, [super.p = 42]);
  C.n(this.c, super.x, int y, [super.p]) : super.n();
}

main() {
  var c1 = C(1, 2, 3);
  Expect.equals("S", c1.log);
  Expect.equals(2, c1.s1);
  Expect.equals(42, c1.s2);

  var c2 = C(1, 2, 3, 4);
  Expect.equals("S", c2.log);
  Expect.equals(2, c2.s1);
  Expect.equals(4, c2.s2);

  var c3 = C.n(1, 2, 3);
  Expect.equals("S.n", c3.log);
  Expect.equals(2, c3.s1);
  Expect.equals(0, c3.s2);

  var c4 = C.n(1, 2, 3, 4);
  Expect.equals("S.n", c4.log);
  Expect.equals(2, c4.s1);
  Expect.equals(4, c4.s2);
}
