/*
 * Copyright (c) 2019, 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 A read of a field or variable which is marked as late which has
 * not yet been written to causes the initializer expression of the variable to
 * be evaluated to a value, assigned to the variable or field, and returned as
 * the value of the read.
 *
 * @description Check that a read of a field or variable which is marked as late
 * which has not yet been written to causes the initializer expression of the
 * variable to be evaluated to a value, assigned to the variable or field, and
 * returned as the value of the read
 * @author sgrekhov@unipro.ru
 */
// Requirements=nnbd-strong
import "../../Utils/expect.dart";

String _log = "";

String init(String val) {
  _log += "init('$val')";
  return val;
}

void clearLog() {
  _log = "";
}

class C {
  static late final String? s1 = init("When");
  static late String? s2 = init("I found");
  covariant late String? v1 = init("myself");
  late final String? v2 = init("in time");
  late String? v3 = init("of trouble");
}

late final String? g1 = init("Mother Mary");
late String? g2 = init("comes to me");

main() {
  late final String? l1 = init("Speaking words of wisdom");
  late String? l2 = init("let it be");

  Expect.equals("", _log);
  clearLog();

  Expect.equals("When", C.s1);
  Expect.equals("init('When')", _log);
  clearLog();

  Expect.equals("I found", C.s2);
  Expect.equals("init('I found')", _log);
  clearLog();

  C c = new C();
  Expect.equals("", _log);
  Expect.equals("myself", c.v1);
  Expect.equals("init('myself')", _log);
  clearLog();

  Expect.equals("in time", c.v2);
  Expect.equals("init('in time')", _log);
  clearLog();

  Expect.equals("of trouble", c.v3);
  Expect.equals("init('of trouble')", _log);
  clearLog();

  Expect.equals("Mother Mary", g1);
  Expect.equals("init('Mother Mary')", _log);
  clearLog();

  Expect.equals("comes to me", g2);
  Expect.equals("init('comes to me')", _log);
  clearLog();

  Expect.equals("Speaking words of wisdom", l1);
  Expect.equals("init('Speaking words of wisdom')", _log);
  clearLog();

  Expect.equals("let it be", l2);
  Expect.equals("init('let it be')", _log);
}
