// Copyright (c) 2018, 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 'dart:async'; import 'dart:io'; import 'package:front_end/src/api_prototype/front_end.dart'; import 'package:front_end/src/compute_platform_binaries_location.dart' show computePlatformBinariesLocation; import 'package:kernel/ast.dart'; import 'package:kernel/text/ast_to_text.dart' show Printer; import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter; import 'package:kernel/target/targets.dart'; import 'package:kernel/target/vm.dart'; import 'package:test/test.dart'; const bool kDumpActualResult = const bool.fromEnvironment('dump.actual.result'); Future compileTestCaseToKernelProgram(Uri sourceUri) async { final platformKernel = computePlatformBinariesLocation().resolve('vm_platform_strong.dill'); final options = new CompilerOptions() ..strongMode = true ..target = new VmTarget(new TargetFlags(strongMode: true)) ..linkedDependencies = [platformKernel] ..reportMessages = true ..onError = (CompilationMessage error) { fail("Compilation error: ${error}"); }; final Component component = await kernelForProgram(sourceUri, options); // Make sure the library name is the same and does not depend on the order // of test cases. component.mainMethod.enclosingLibrary.name = '#lib'; return component; } String kernelLibraryToString(Library library) { final StringBuffer buffer = new StringBuffer(); new Printer(buffer, showExternal: false, showMetadata: true) .writeLibraryFile(library); return buffer.toString(); } class DevNullSink extends Sink { @override void add(T data) {} @override void close() {} } void ensureKernelCanBeSerializedToBinary(Component component) { new BinaryPrinter(new DevNullSink>()).writeComponentFile(component); } void compareResultWithExpectationsFile(Uri source, String actual) { final expectFile = new File(source.toFilePath() + '.expect'); final expected = expectFile.existsSync() ? expectFile.readAsStringSync() : ''; if (actual != expected) { if (kDumpActualResult) { new File(source.toFilePath() + '.actual').writeAsStringSync(actual); } expect(actual, equals(expected), reason: "Test case: $source"); } }