// Copyright (c) 2013, 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. // @dart = 2.7 import "package:expect/expect.dart"; import "package:async_helper/async_helper.dart"; import '../helpers/compiler_helper.dart'; const String TEST_1 = """ class A { var a = 42; } main() { new A().a = 54; return new A().a; } """; const String TEST_2 = """ class A { var a = 42; } main() { return new A().a; } """; const String TEST_3 = """ class A { var a = 42; } main() { var a = new A(); return a.a + a.a; } """; const String TEST_4 = """ class A { var a = 42; } var list = []; main() { new A().a = 54; var a = new A(); list.add(a); return a.a + a.a; } """; const String TEST_5 = """ class A { var a = 42; } var list = []; main() { var a = new A(); list.add(a); return a.a + a.a; } """; const String TEST_6 = """ class A { var a = 42; } var list = [new A()]; main() { var a = new A(); var b = list[0]; b.a = 52; return a.a + a.a; } """; const String TEST_7 = """ class A { var a = 42; } var list = [new A(), new A()]; main() { var a = list[0]; a.a = 32; return a.a; } """; const String TEST_8 = """ class A { var a = 42; } var list = [new A(), new A()]; main() { var a = list[0]; a.a = 32; var b = list[1]; b.a = 42; return a.a; } """; const String TEST_9 = """ class A { var a = 42; } main() { var a = new A(); (() => a.a = 2)(); return a.a; } """; const String TEST_10 = """ class A { var a = 42; } main() { var a = new A(); a.a = 2; return a.a; } """; const String TEST_11 = """ class A { var a; var b; A(this.a); A.bar(this.b); foo() { () => 42; b.a = 2; } } main() { var a = new A(42); var b = new A.bar(a); b.foo(); return a.a; } """; const String TEST_12 = """ var a; var b; main() { a = 10; b = 4; return a - b; } """; const String TEST_13 = """ var a = [1, 2]; main() { a[0] = 10; a[1] = 4; return a[0] - a[1]; } """; const String TEST_14 = """ var a = [1, 2]; var b = [1, 2]; main() { a[0] = 10; b[0] = 4; return a[0]; } """; const String TEST_15 = """ var a; main() { a = 42; if (true) { } return a; } """; const String TEST_16 = """ var a; main() { a = false; if (main() && main()) { a = true; } return a; } """; const String TEST_17 = """ var a; int x = 0; main() { (print)(x++); if (x == 0) { a = true; } else { a = false; } return a; } """; const String TEST_18 = """ main() { var a = [42, true]; if (a[1]) { a[0] = 1; } else { a[0] = 2; } return a[0]; } """; main() { runTests() async { test(String code, Pattern expected) async { String generated = await compile(code, disableInlining: false, disableTypeInference: false); Expect.isTrue( generated.contains(expected), "Generated code didn't contain '$expected'.\n" "Test:\n$code, Generated:\n$generated"); } await test(TEST_1, 'return 42'); await test(TEST_2, 'return 42'); await test(TEST_3, 'return 84'); await test(TEST_4, 'return t1 + t1'); await test(TEST_5, 'return 84'); await test(TEST_6, 'return 84'); await test(TEST_7, RegExp('return( .* =)? 32')); await test(TEST_8, 'return a.a'); await test(TEST_9, 'return a.a'); await test(TEST_10, 'return 2'); await test(TEST_11, 'return a.a'); await test(TEST_12, 'return 6'); await test(TEST_13, 'return 6'); await test(TEST_14, 'return t1[0]'); await test(TEST_15, 'return 42'); await test(TEST_16, 'return \$.a'); await test(TEST_17, RegExp(r'return (t1|\$\.x === 0 \? \$\.a = true : \$\.a = false);')); await test(TEST_18, 'return t1'); } asyncTest(() async { print('--test from kernel------------------------------------------------'); await runTests(); }); }