| // Copyright (c) 2012, 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. | |
| // Test that parameters keep their names in the output. | |
| import 'dart:async'; | |
| import 'package:expect/async_helper.dart'; | |
| import 'package:expect/expect.dart'; | |
| import '../helpers/compiler_helper.dart'; | |
| const String TEST_INVOCATION0 = r""" | |
| main() { | |
| var o = null; | |
| o(); | |
| } | |
| """; | |
| const String TEST_INVOCATION1 = r""" | |
| main() { | |
| var o = null; | |
| o(1); | |
| } | |
| """; | |
| const String TEST_INVOCATION2 = r""" | |
| main() { | |
| var o = null; | |
| o(1, 2); | |
| } | |
| """; | |
| const String TEST_BAILOUT = r""" | |
| class A { | |
| var x; | |
| foo(_) { // make sure only g has no arguments | |
| var f = () { return 499; }; | |
| return 499 + x + f(); | |
| } | |
| } | |
| main() { A().foo(1); } | |
| """; | |
| Future closureInvocation({required bool minify, required String prefix}) async { | |
| await compile( | |
| TEST_INVOCATION0, | |
| minify: minify, | |
| check: (String generated) { | |
| Expect.isTrue(generated.contains(".$prefix\$0()")); | |
| }, | |
| ); | |
| await compile( | |
| TEST_INVOCATION1, | |
| minify: minify, | |
| check: (String generated) { | |
| Expect.isTrue(generated.contains(".$prefix\$1(1)")); | |
| }, | |
| ); | |
| await compile( | |
| TEST_INVOCATION2, | |
| minify: minify, | |
| check: (String generated) { | |
| Expect.isTrue(generated.contains(".$prefix\$2(1,${minify ? "" : " "}2)")); | |
| }, | |
| ); | |
| } | |
| // Make sure that the bailout version does not introduce a second version of | |
| // the closure. | |
| Future closureBailout({required bool minify, required String prefix}) async { | |
| String generated = await compileAll(TEST_BAILOUT, minify: minify); | |
| RegExp regexp = RegExp("$prefix\\\$0\\(\\)${minify ? "" : " "}{"); | |
| Iterator<Match> matches = regexp.allMatches(generated).iterator; | |
| checkNumberOfMatches(matches, 1); | |
| } | |
| main() { | |
| runTests() async { | |
| await closureInvocation(minify: false, prefix: "call"); | |
| await closureInvocation(minify: true, prefix: ""); | |
| await closureBailout(minify: false, prefix: "call"); | |
| await closureBailout(minify: true, prefix: ""); | |
| } | |
| asyncTest(() async { | |
| print('--test from kernel------------------------------------------------'); | |
| await runTests(); | |
| }); | |
| } |