blob: f5819d930be6df08c0d977a11a6a8f0fd5b0c4a3 [file] [log] [blame]
/*
* 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 null aware method call e?.m(args) translates to:
* SHORT[EXP(e), fn[x] => x.m(ARGS(args))]
*
* @description Check that a null aware method call e?.m(args) translates to:
* SHORT[EXP(e), fn[x] => x.m(ARGS(args))]
* Test e?.m()?.n()
* @author sgrekhov@unipro.ru
*/
// Requirements=nnbd-strong
import "../../Utils/expect.dart";
class C {
String? test1() => "Lily was here";
String? test2(String? arg) => arg;
}
void testShort(C? x) {
var actual1 = x?.test1()?.substring(0, 4);
var n1 = x;
var expected1 = null;
if (n1 != null) {
var t1 = n1.test1();
if (t1 != null) {
expected1 = t1.substring(0, 4);
}
}
Expect.equals(expected1, actual1);
var actual2 = x?.test2("Show must go on")?.substring(0, 4);
var n2 = x;
var expected2 = null;
if (n2 != null) {
var t2 = n2.test2("Show must go on");
if (t2 != null) {
expected2 = t2.substring(0, 4);
}
}
Expect.equals(expected2, actual2);
var actual3 = x?.test2(null)?.substring(0, 4);
var n3 = x;
var expected3 = null;
if (n3 != null) {
var t3 = n3.test2(null);
if (t3 != null) {
expected2 = t3.substring(0, 4);
}
}
Expect.equals(expected3, actual3);
}
main() {
C? c1 = null;
testShort(c1);
c1 = new C();
testShort(c1);
C c2 = new C();
testShort(c2);
}