Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Unified Diff: tests/compiler/dart2js/kernel/closed_world_from_dill_test.dart

Issue 2865693002: Create closed world for hello world using .dill file (Closed)
Patch Set: Updated cf. comments. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/compiler/dart2js/dart2js.status ('k') | tests/compiler/dart2js/kernel/compiler_helper.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/kernel/closed_world_from_dill_test.dart
diff --git a/tests/compiler/dart2js/kernel/closed_world_from_dill_test.dart b/tests/compiler/dart2js/kernel/closed_world_from_dill_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..1c66cd642eaa81e45c92bd43b00444169cd447ae
--- /dev/null
+++ b/tests/compiler/dart2js/kernel/closed_world_from_dill_test.dart
@@ -0,0 +1,122 @@
+// 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.
+
+// Partial test that the closed world computed from [WorldImpact]s derived from
+// kernel is equivalent to the original computed from resolution.
+library dart2js.kernel.closed_world_from_dill_test;
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/common.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/elements/resolution_types.dart';
+import 'package:compiler/src/elements/types.dart';
+import 'package:compiler/src/enqueue.dart';
+import 'package:compiler/src/kernel/element_map.dart';
+import 'package:compiler/src/kernel/kernel_strategy.dart';
+import 'package:compiler/src/resolution/enum_creator.dart';
+import 'package:compiler/src/universe/world_builder.dart';
+import 'package:compiler/src/world.dart';
+import 'package:expect/expect.dart';
+import '../memory_compiler.dart';
+import '../equivalence/check_functions.dart';
+import '../serialization/helper.dart';
+import 'test_helpers.dart';
+
+import 'compiler_helper.dart';
+
+const SOURCE = const {
+ 'main.dart': '''
+main() {
+ print('Hello World');
+}
+'''
+};
+
+main(List<String> args) {
+ asyncTest(() async {
+ await mainInternal(args);
+ });
+}
+
+enum ResultKind { crashes, errors, warnings, success, failure }
+
+Future<ResultKind> mainInternal(List<String> args,
+ {bool skipWarnings: false, bool skipErrors: false}) async {
+ Arguments arguments = new Arguments.from(args);
+ Uri entryPoint;
+ Map<String, String> memorySourceFiles;
+ if (arguments.uri != null) {
+ entryPoint = arguments.uri;
+ memorySourceFiles = const <String, String>{};
+ } else {
+ entryPoint = Uri.parse('memory:main.dart');
+ memorySourceFiles = SOURCE;
+ }
+
+ enableDebugMode();
+ EnumCreator.matchKernelRepresentationForTesting = true;
+
+ Directory dir = await Directory.systemTemp.createTemp('dart2js-with-dill');
+ print('--- create temp directory $dir -------------------------------');
+ memorySourceFiles.forEach((String name, String source) {
+ new File.fromUri(dir.uri.resolve(name)).writeAsStringSync(source);
+ });
+ entryPoint = dir.uri.resolve(entryPoint.path);
+
+ print('---- analyze-only ------------------------------------------------');
+ DiagnosticCollector collector = new DiagnosticCollector();
+ Compiler compiler1 = compilerFor(
+ entryPoint: entryPoint,
+ diagnosticHandler: collector,
+ options: [Flags.analyzeOnly, Flags.enableAssertMessage]);
+ ElementResolutionWorldBuilder.useInstantiationMap = true;
+ compiler1.resolution.retainCachesForTesting = true;
+ await compiler1.run(entryPoint);
+ if (collector.crashes.isNotEmpty) {
+ print('Skipping due to crashes.');
+ return ResultKind.crashes;
+ }
+ if (collector.errors.isNotEmpty && skipErrors) {
+ print('Skipping due to errors.');
+ return ResultKind.errors;
+ }
+ if (collector.warnings.isNotEmpty && skipWarnings) {
+ print('Skipping due to warnings.');
+ return ResultKind.warnings;
+ }
+ Expect.isFalse(compiler1.compilationFailed);
+ ResolutionEnqueuer enqueuer1 = compiler1.enqueuer.resolution;
+ ClosedWorld closedWorld1 = compiler1.resolutionWorldBuilder.closeWorld();
+
+ Compiler compiler2 =
+ await compileWithDill(entryPoint, const {}, printSteps: true);
+
+ KernelFrontEndStrategy frontEndStrategy = compiler2.frontEndStrategy;
+ KernelToElementMap elementMap = frontEndStrategy.elementMap;
+
+ Expect.isFalse(compiler2.compilationFailed);
+
+ KernelEquivalence equivalence = new KernelEquivalence(elementMap);
+
+ ResolutionEnqueuer enqueuer2 = compiler2.enqueuer.resolution;
+ ClosedWorld closedWorld2 = compiler2.resolutionWorldBuilder.closeWorld();
+
+ checkBackendUsage(closedWorld1.backendUsage, closedWorld2.backendUsage,
+ equivalence.defaultStrategy);
+
+ checkResolutionEnqueuers(closedWorld1.backendUsage, closedWorld2.backendUsage,
+ enqueuer1, enqueuer2, elementEquivalence: equivalence.entityEquivalence,
+ typeEquivalence: (ResolutionDartType a, DartType b) {
+ return equivalence.typeEquivalence(unalias(a), b);
+ }, elementFilter: elementFilter, verbose: arguments.verbose);
+
+ checkClosedWorlds(closedWorld1, closedWorld2,
+ strategy: equivalence.defaultStrategy, verbose: arguments.verbose);
+
+ return ResultKind.success;
+}
« no previous file with comments | « tests/compiler/dart2js/dart2js.status ('k') | tests/compiler/dart2js/kernel/compiler_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698