| // Copyright (c) 2017, 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:expect/async_helper.dart' show asyncTest; | |
| import 'package:expect/expect.dart' show Expect; | |
| import "package:front_end/src/api_prototype/compiler_options.dart" | |
| show CompilerOptions, CfeDiagnosticMessage; | |
| import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart' | |
| show IncrementalCompilerResult; | |
| import 'package:front_end/src/base/compiler_context.dart' show CompilerContext; | |
| import 'package:front_end/src/base/incremental_compiler.dart' | |
| show IncrementalCompiler; | |
| import 'package:front_end/src/base/processed_options.dart' | |
| show ProcessedOptions; | |
| import 'package:front_end/src/compute_platform_binaries_location.dart' | |
| show computePlatformBinariesLocation; | |
| import 'package:kernel/ast.dart' show Component; | |
| import 'package:kernel/target/targets.dart' show TargetFlags; | |
| import 'package:vm/modular/target/vm.dart' show VmTarget; | |
| void diagnosticMessageHandler(CfeDiagnosticMessage message) { | |
| throw "Unexpected message: ${message.plainTextFormatted.join('\n')}"; | |
| } | |
| Future<void> test({required bool sdkFromSource}) async { | |
| final CompilerOptions optionBuilder = new CompilerOptions() | |
| ..packagesFileUri = Uri.base.resolve(".dart_tool/package_config.json") | |
| ..target = new VmTarget(new TargetFlags()) | |
| ..omitPlatform = true | |
| ..onDiagnostic = diagnosticMessageHandler | |
| ..environmentDefines = const {}; | |
| if (sdkFromSource) { | |
| optionBuilder.librariesSpecificationUri = Uri.base.resolve( | |
| "sdk/lib/libraries.json", | |
| ); | |
| } else { | |
| optionBuilder.sdkSummary = computePlatformBinariesLocation( | |
| forceBuildDir: true, | |
| ).resolve("vm_platform.dill"); | |
| } | |
| final Uri helloDart = Uri.base.resolve( | |
| "pkg/front_end/testcases/general/hello.dart", | |
| ); | |
| final ProcessedOptions options = new ProcessedOptions( | |
| options: optionBuilder, | |
| inputs: [helloDart], | |
| ); | |
| IncrementalCompiler compiler = new IncrementalCompiler( | |
| new CompilerContext(options), | |
| ); | |
| IncrementalCompilerResult compilerResult = await compiler.computeDelta(); | |
| Component component = compilerResult.component; | |
| if (sdkFromSource) { | |
| // Expect that the new component contains at least the following libraries: | |
| // dart:core, dart:async, and hello.dart. | |
| Expect.isTrue( | |
| component.libraries.length > 2, | |
| "${component.libraries.length} <= 2", | |
| ); | |
| } else { | |
| // Expect that the new component contains exactly hello.dart. | |
| Expect.isTrue( | |
| component.libraries.length == 1, | |
| "${component.libraries.length} != 1", | |
| ); | |
| } | |
| compiler.invalidate(helloDart); | |
| compilerResult = await compiler.computeDelta(entryPoints: [helloDart]); | |
| component = compilerResult.component; | |
| // Expect that the new component contains exactly hello.dart | |
| Expect.isTrue( | |
| component.libraries.length == 1, | |
| "${component.libraries.length} != 1", | |
| ); | |
| compilerResult = await compiler.computeDelta(entryPoints: [helloDart]); | |
| component = compilerResult.component; | |
| Expect.isTrue(component.libraries.isEmpty); | |
| } | |
| void main() { | |
| asyncTest(() async { | |
| await test(sdkFromSource: true); | |
| await test(sdkFromSource: false); | |
| }); | |
| } |