| // 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. |
| |
| import 'package:async_helper/async_helper.dart'; |
| import 'package:expect/expect.dart'; |
| import '../compiler_helper.dart'; |
| |
| // Tests for |
| const String TEST_1 = r""" |
| foo() { |
| int a = 120; |
| String b = 'hello'; |
| return 'u${a}v${b}w'; |
| } |
| """; |
| |
| const String TEST_2 = r""" |
| foo(a, b) { |
| return 'aaaaa${a}xxxxx' |
| "yyyyy${b}zzzzz"; |
| } |
| """; |
| |
| const String TEST_3 = r""" |
| foo(a) { |
| var b = '$a#'; |
| return '${b}x${b}'; |
| } |
| """; |
| |
| const String TEST_4 = r""" |
| foo(a) { |
| var b = []; |
| if (a) b.add(123); |
| return '${b.length}'; |
| } |
| """; |
| |
| main() { |
| runTests({bool useKernel}) async { |
| check(String test, String contained) async { |
| String generated = |
| await compile(test, entry: 'foo', useKernel: useKernel); |
| Expect.isTrue(generated.contains(contained), contained); |
| } |
| |
| // Full substitution. |
| await check(TEST_1, r'"u120vhellow"'); |
| |
| // Adjacent string fragments get merged. |
| await check(TEST_2, r'"xxxxxyyyyy"'); |
| |
| // 1. No merging of fragments that are multi-use. Prevents exponential code |
| // and keeps author's manual CSE. |
| // 2. Know string values require no stringification. |
| await check(TEST_3, r'return b + "x" + b'); |
| |
| // Known int value can be formatted directly. |
| await check(TEST_4, r'return "" + b.length'); |
| } |
| |
| asyncTest(() async { |
| print('--test from ast---------------------------------------------------'); |
| await runTests(useKernel: false); |
| print('--test from kernel------------------------------------------------'); |
| await runTests(useKernel: true); |
| }); |
| } |