/*
 * 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 property access e?.f translates to:
 *  SHORT[EXP(e), fn[x] => x.f]
 *
 * @description Check that a property access e?.f translates to:
 *  SHORT[EXP(e), fn[x] => x.f]
 * Test e?.f?.g
 * @author sgrekhov@unipro.ru
 */
// Requirements=nnbd-strong
import "../../Utils/expect.dart";

class C {
  String? test1 = "Lily was here";
  String? get test2 => test1;
}

void testShort(C? x) {
  var actual = x?.test1?.substring(0, 4);
  var n0 = x;
  var expected = null;
  if (n0 != null) {
    var t1 = n0.test1;
    if (t1 != null) {
      expected = t1.substring(0, 4);
    }
  }
  Expect.equals(expected, actual);

  var actual2 = x?.test2?.length;
  var expected2 = null;
  if (n0 != null) {
    var t2 = n0.test2;
    if (t2 != null) {
      expected2 = t2.length;
    }
  }
  Expect.equals(expected2, actual2);
}

main() {
  C? c1 = null;
  testShort(c1);
  c1 = new C();
  testShort(c1);
  if (c1 != null) {
    c1.test1 = null;
    testShort(c1);
  }

  C c2 = new C();
  testShort(c2);
  c2.test1 = null;
  testShort(c2);
}
