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

Unified Diff: pkg/front_end/test/fasta/bootstrap_test.dart

Issue 2723173002: Apply transformers and other work arounds to get boostrapping to work. (Closed)
Patch Set: Add exception class. Created 3 years, 10 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 | « pkg/front_end/lib/src/fasta/kernel/verifier.dart ('k') | pkg/front_end/test/fasta/compile.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/front_end/test/fasta/bootstrap_test.dart
diff --git a/pkg/front_end/test/fasta/bootstrap_test.dart b/pkg/front_end/test/fasta/bootstrap_test.dart
index 40e0a16824a3c2f42ca459b9e20d56dee012caf1..39fa7f9a694d7334b21f40c5de75421c89d0e4f9 100644
--- a/pkg/front_end/test/fasta/bootstrap_test.dart
+++ b/pkg/front_end/test/fasta/bootstrap_test.dart
@@ -4,7 +4,7 @@
import 'dart:async' show Future;
-import 'dart:io' show Directory, Platform;
+import 'dart:io' show Directory, File, Platform;
import 'dart:isolate' show Isolate;
@@ -15,17 +15,36 @@ import 'package:front_end/src/fasta/testing/kernel_chain.dart'
import 'package:testing/testing.dart' show StdioProcess;
+import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
+
+import 'package:kernel/ast.dart' show Program;
+
+import 'package:kernel/text/ast_to_text.dart' show programToString;
+
Future main() async {
asyncStart();
Uri sourceCompiler = await Isolate.resolvePackageUri(
Uri.parse("package:front_end/src/fasta/bin/compile.dart"));
+ Uri outline = await Isolate.resolvePackageUri(
+ Uri.parse("package:front_end/src/fasta/bin/outline.dart"));
Uri packages = await Isolate.packageConfig;
Directory tmp = await Directory.systemTemp.createTemp("fasta_bootstrap");
Uri compiledOnceOutput = tmp.uri.resolve("fasta1.dill");
Uri compiledTwiceOutput = tmp.uri.resolve("fasta2.dill");
+ Uri outlineOutput = tmp.uri.resolve("outline.dill");
try {
await runCompiler(sourceCompiler, sourceCompiler, compiledOnceOutput);
await runCompiler(compiledOnceOutput, sourceCompiler, compiledTwiceOutput);
+ await compare(compiledOnceOutput, compiledTwiceOutput);
+ await runCompiler(compiledTwiceOutput, outline, outlineOutput);
+ try {
+ // Test that compare actually works by comparing the compile program to
+ // the outline program (which are different, but similar).
+ await compare(compiledOnceOutput, outlineOutput, silent: true);
+ throw "Expected an error.";
+ } on ComparisonFailed {
+ // Expected.
+ }
} finally {
await tmp.delete(recursive: true);
}
@@ -48,3 +67,48 @@ Future runCompiler(Uri compiler, Uri input, Uri output) async {
throw "Compilation failed.";
}
}
+
+Future compare(Uri a, Uri b, {bool silent: false}) async {
+ List<int> bytesA = await new File.fromUri(a).readAsBytes();
+ List<int> bytesB = await new File.fromUri(b).readAsBytes();
+ if (bytesA.length == bytesB.length) {
+ bool same = true;
+ for (int i = 0; i < bytesA.length; i++) {
+ if (bytesA[i] != bytesB[i]) {
+ same = false;
+ break;
+ }
+ }
+ if (same) return;
+ }
+ if (!silent) {
+ print("$a is different from $b");
+ }
+ Program programA = new Program();
+ Program programB = new Program();
+ new BinaryBuilder(bytesA, a.toFilePath()).readProgram(programA);
+ new BinaryBuilder(bytesB, b.toFilePath()).readProgram(programB);
+ RegExp splitLines = new RegExp('^', multiLine: true);
+ List<String> linesA = programToString(programA).split(splitLines);
+ List<String> linesB = programToString(programB).split(splitLines);
+ for (int i = 0; i < linesA.length && i < linesB.length; i++) {
+ String lineA = linesA[i].trimRight();
+ String lineB = linesB[i].trimRight();
+ if (lineA != lineB) {
+ String diffHunk = "${i}c$i\n>$lineA\n---\n<$lineB";
+ if (!silent) {
+ print(diffHunk);
+ }
+ }
+ }
+ throw new ComparisonFailed(a, b);
+}
+
+class ComparisonFailed {
+ final Uri a;
+ final Uri b;
+
+ ComparisonFailed(this.a, this.b);
+
+ toString() => "Error: $a is different from $b";
+}
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/verifier.dart ('k') | pkg/front_end/test/fasta/compile.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698