Test that fasta_codes_generated.dart is up to date

Change-Id: If9fbbdaf495b32da7a5a288e2fe63bee6f29ee1e
Reviewed-on: https://dart-review.googlesource.com/55888
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index bae14ba..397bded 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -2,6 +2,8 @@
 // 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 'dart:isolate';
@@ -14,6 +16,17 @@
 
 main(List<String> arguments) async {
   var port = new ReceivePort();
+  await new File.fromUri(await computeGeneratedFile())
+      .writeAsString(await generateMessagesFile(), flush: true);
+  port.close();
+}
+
+Future<Uri> computeGeneratedFile() {
+  return Isolate.resolvePackageUri(
+      Uri.parse('package:front_end/src/fasta/fasta_codes_generated.dart'));
+}
+
+Future<String> generateMessagesFile() async {
   Uri messagesFile = Platform.script.resolve("../../messages.yaml");
   Map yaml = loadYaml(await new File.fromUri(messagesFile).readAsStringSync());
   StringBuffer sb = new StringBuffer();
@@ -45,13 +58,7 @@
         map['analyzerCode'], map['dart2jsCode'], map['severity']));
   }
 
-  String dartfmtedText = new DartFormatter().format("$sb");
-
-  Uri problemsFile = await Isolate.resolvePackageUri(
-      Uri.parse('package:front_end/src/fasta/fasta_codes_generated.dart'));
-  await new File.fromUri(problemsFile)
-      .writeAsString(dartfmtedText, flush: true);
-  port.close();
+  return new DartFormatter().format("$sb");
 }
 
 final RegExp placeholderPattern = new RegExp("#[a-zA-Z0-9_]+");
diff --git a/pkg/front_end/tool/_fasta/generate_messages_test.dart b/pkg/front_end/tool/_fasta/generate_messages_test.dart
new file mode 100644
index 0000000..f242f01
--- /dev/null
+++ b/pkg/front_end/tool/_fasta/generate_messages_test.dart
@@ -0,0 +1,21 @@
+// 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:io" show File;
+
+import "package:async_helper/async_helper.dart" show asyncTest;
+
+import "package:expect/expect.dart" show Expect;
+
+import "generate_messages.dart" show computeGeneratedFile, generateMessagesFile;
+
+main() {
+  asyncTest(() async {
+    Uri generatedFile = await computeGeneratedFile();
+    String generated = await generateMessagesFile();
+    String actual = await new File.fromUri(generatedFile).readAsString();
+    Expect.stringEquals(
+        generated, actual, "${generatedFile.path} is out of date");
+  });
+}