| // Copyright (c) 2018, 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. |
| |
| // Regression test for https://github.com/flutter/flutter/issues/16182 |
| // Verifies that TFA correctly handles calls via fields/getters. |
| |
| import "package:expect/expect.dart"; |
| |
| bool ok; |
| |
| class T1 { |
| // Should be reachable. |
| void doTest1() { |
| ok = true; |
| } |
| } |
| |
| class A1 { |
| T1 foo; |
| |
| void call([a1, a2, a3, a4, a5]) { |
| foo = a5; |
| } |
| } |
| |
| class B1 { |
| A1 aa1 = new A1(); |
| } |
| |
| void test1() { |
| B1 bb = new B1(); |
| bb.aa1(1, 2, 3, 4, new T1()); |
| |
| ok = false; |
| bb.aa1.foo.doTest1(); |
| Expect.isTrue(ok); |
| } |
| |
| class T2 { |
| // Should be reachable. |
| void doTest2() { |
| ok = true; |
| } |
| } |
| |
| class A2 { |
| dynamic foo; |
| |
| void call([a1, a2, a3, a4, a5, a6]) { |
| foo = a6; |
| } |
| } |
| |
| class B2Base { |
| dynamic _aa = new A2(); |
| dynamic get aa2 => _aa; |
| } |
| |
| class B2 extends B2Base { |
| void doSuperCall() { |
| super.aa2(1, 2, 3, 4, 5, new T2()); |
| } |
| } |
| |
| void test2() { |
| var bb = new B2(); |
| bb.doSuperCall(); |
| |
| ok = false; |
| bb.aa2.foo.doTest2(); |
| Expect.isTrue(ok); |
| } |
| |
| class T3 { |
| // Should be reachable. |
| void doTest3() { |
| ok = true; |
| } |
| } |
| |
| class A3 { |
| dynamic foo; |
| |
| void call([a1, a2, a3, a4, a5, a6, a7]) { |
| foo = a7; |
| } |
| } |
| |
| class B3 { |
| A3 aa3 = new A3(); |
| } |
| |
| dynamic bb3 = new B3(); |
| Function unknown3 = () => bb3; |
| getDynamic3() => unknown3.call(); |
| |
| void test3() { |
| getDynamic3().aa3(1, 2, 3, 4, 5, 6, new T3()); |
| |
| ok = false; |
| bb3.aa3.foo.doTest3(); |
| Expect.isTrue(ok); |
| } |
| |
| class T4 { |
| // Should be reachable. |
| void doTest4() { |
| ok = true; |
| } |
| } |
| |
| class A4 { |
| dynamic foo; |
| |
| void call([a1, a2, a3, a4, a5, a6, a7, a8]) { |
| foo = a8; |
| } |
| } |
| |
| class B4 { |
| dynamic _aa = new A4(); |
| dynamic get aa4 => _aa; |
| } |
| |
| dynamic bb4 = new B4(); |
| Function unknown4 = () => bb4; |
| getDynamic4() => unknown4.call(); |
| |
| void test4() { |
| getDynamic4().aa4(1, 2, 3, 4, 5, 6, 7, new T4()); |
| |
| ok = false; |
| getDynamic4().aa4.foo.doTest4(); |
| Expect.isTrue(ok); |
| } |
| |
| void main() { |
| test1(); |
| test2(); |
| test3(); |
| test4(); |
| } |