/*
 * 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);
}
