/*
 * 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 The assignment e1?.f = e2 translates to:
 *  SHORT[EXP(e1), fn[x] => x.f = EXP(e2)]
 *
 * @description Check that the assignment e1?.f = e2 translates to:
 *  SHORT[EXP(e1), fn[x] => x.f = EXP(e2)]. Test legacy pre-NNBD types
 * @author sgrekhov@unipro.ru
 */
// Requirements=nnbd-weak
import "../../../Utils/expect.dart";
import "legacy_lib.dart";

void testShort(A? x, String e2) {
  var actual1 = x?.text = e2;
  var n0 = x;
  var expected1 = n0 == null ? null : n0.text = e2;
  Expect.equals(expected1, actual1);

  var actual2 = x?.text3 = e2;
  var expected2 = n0 == null ? null : n0.text3 = e2;
  Expect.equals(expected2, actual2);
}

main() {
  A? a1 = null;
  testShort(a1, "Show must go on");
  a1 = new A();
  testShort(a1, "Show must go on");

  A a2 = new A();
  testShort(a2, "Show must go on");
}
