diff --git a/pkg/front_end/test/utils/kernel_chain.dart b/pkg/front_end/test/utils/kernel_chain.dart index 3457bb153f8..93beea1b783 100644 --- a/pkg/front_end/test/utils/kernel_chain.dart +++ b/pkg/front_end/test/utils/kernel_chain.dart @@ -7,8 +7,6 @@ library fasta.testing.kernel_chain; import 'dart:async'; import 'dart:io' show Directory, File, IOSink, Platform; -import 'dart:typed_data' show Uint8List; - import 'package:_fe_analyzer_shared/src/util/relativize.dart' show isWindows, relativizeUri; @@ -454,51 +452,38 @@ class WriteDill extends Step { writeToFile = false; } } - - Sink> sink; - String writeMessage; - if (writeToFile && !skipVm) { - Directory tmp = await Directory.systemTemp.createTemp(); - Uri uri = tmp.uri.resolve("generated.dill"); - File generated = new File.fromUri(uri); - sink = generated.openWrite(); - result = new ComponentResult( - result.description, - result.component, - result.userLibraries, - result.compilationSetup, - result.sourceTarget, - uri); - writeMessage = "Wrote component to `${generated.path}`"; - } else { - sink = new DevNullSink(); - writeMessage = "Wrote component to /dev/null"; - } + ByteSink sink = new ByteSink(); + bool good = false; try { // TODO(johnniwinther,jensj): Avoid serializing the sdk. new BinaryPrinter(sink).writeComponentFile(component); + good = true; } catch (e, s) { return fail(result, e, s); } finally { - print(writeMessage); - if (sink is IOSink) { - await sink.close(); + if (good && writeToFile && !skipVm) { + Directory tmp = await Directory.systemTemp.createTemp(); + Uri uri = tmp.uri.resolve("generated.dill"); + File generated = new File.fromUri(uri); + IOSink ioSink = generated.openWrite(); + ioSink.add(sink.builder.takeBytes()); + await ioSink.close(); + result = new ComponentResult( + result.description, + result.component, + result.userLibraries, + result.compilationSetup, + result.sourceTarget, + uri); + print("Wrote component to `${generated.path}`."); } else { - sink.close(); + print("Wrote component to memory."); } } return pass(result); } } -class DevNullSink extends Sink { - @override - void add(T data) {} - - @override - void close() {} -} - class ReadDill extends Step { const ReadDill(); @@ -516,32 +501,6 @@ class ReadDill extends Step { } } -class BytesCollector implements Sink> { - final List> lists = >[]; - - int length = 0; - - @override - void add(List data) { - lists.add(data); - length += data.length; - } - - Uint8List collect() { - Uint8List result = new Uint8List(length); - int offset = 0; - for (List list in lists) { - result.setRange(offset, offset += list.length, list); - } - lists.clear(); - length = 0; - return result; - } - - @override - void close() {} -} - Future runDiff(Uri expected, String actual) async { if (Platform.isWindows) { // TODO(johnniwinther): Work-around for Windows. For some reason piping