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

Side by Side Diff: packages/intl/test/message_extraction/message_extraction_test.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library message_extraction_test;
6
7 import 'package:unittest/unittest.dart';
8 import 'dart:io';
9 import 'dart:async';
10 import 'dart:convert';
11 import 'package:path/path.dart' as path;
12 import '../data_directory.dart';
13
14 final dart = Platform.executable;
15
16 /** Should we use deferred loading. */
17 bool useDeferredLoading = true;
18
19 String get _deferredLoadPrefix => useDeferredLoading ? '' : 'no-';
20
21 String get deferredLoadArg => '--${_deferredLoadPrefix}use-deferred-loading';
22
23 /** The VM arguments we were given, most important package-root. */
24 final vmArgs = Platform.executableArguments;
25
26 /**
27 * For testing we move the files into a temporary directory so as not to leave
28 * generated files around after a failed test. For debugging, we omit that
29 * step if [useLocalDirectory] is true. The place we move them to is saved as
30 * [tempDir].
31 */
32 String get tempDir => _tempDir == null ? _tempDir = _createTempDir() : _tempDir;
33 var _tempDir;
34 _createTempDir() => useLocalDirectory
35 ? '.'
36 : Directory.systemTemp.createTempSync('message_extraction_test').path;
37
38 var useLocalDirectory = false;
39
40 /**
41 * Translate a relative file path into this test directory. This is
42 * applied to all the arguments of [run]. It will ignore a string that
43 * is an absolute path or begins with "--", because some of the arguments
44 * might be command-line options.
45 */
46 String asTestDirPath([String s]) {
47 if (s == null || s.startsWith("--") || path.isAbsolute(s)) return s;
48 return path.join(intlDirectory, 'test', 'message_extraction', s);
49 }
50
51 /**
52 * Translate a relative file path into our temp directory. This is
53 * applied to all the arguments of [run]. It will ignore a string that
54 * is an absolute path or begins with "--", because some of the arguments
55 * might be command-line options.
56 */
57 String asTempDirPath([String s]) {
58 if (s == null || s.startsWith("--") || path.isAbsolute(s)) return s;
59 return path.join(tempDir, s);
60 }
61
62 main(arguments) {
63 // If debugging, use --local to avoid copying everything to temporary
64 // directories to make it even harder to debug. Note that this will also
65 // not delete the generated files, so may require manual cleanup.
66 if (arguments.contains("--local")) {
67 print("Testing using local directory for generated files");
68 useLocalDirectory = true;
69 }
70 setUp(copyFilesToTempDirectory);
71 tearDown(deleteGeneratedFiles);
72 test("Test round trip message extraction, translation, code generation, "
73 "and printing", () {
74 var makeSureWeVerify = expectAsync(runAndVerify);
75 return extractMessages(null).then((result) {
76 return generateTranslationFiles(result);
77 }).then((result) {
78 return generateCodeFromTranslation(result);
79 }).then(makeSureWeVerify).then(checkResult);
80 });
81 }
82
83 void copyFilesToTempDirectory() {
84 if (useLocalDirectory) return;
85 var files = [
86 asTestDirPath('sample_with_messages.dart'),
87 asTestDirPath('part_of_sample_with_messages.dart'),
88 asTestDirPath('verify_messages.dart'),
89 asTestDirPath('run_and_verify.dart'),
90 asTestDirPath('embedded_plural_text_before.dart'),
91 asTestDirPath('embedded_plural_text_after.dart'),
92 asTestDirPath('print_to_list.dart')
93 ];
94 for (var filename in files) {
95 var file = new File(filename);
96 file.copySync(path.join(tempDir, path.basename(filename)));
97 }
98 }
99
100 void deleteGeneratedFiles() {
101 if (useLocalDirectory) return;
102 try {
103 new Directory(tempDir).deleteSync(recursive: true);
104 } on Error catch (e) {
105 print("Failed to delete $tempDir");
106 print("Exception:\n$e");
107 }
108 }
109
110 /**
111 * Run the process with the given list of filenames, which we assume
112 * are in dir() and need to be qualified in case that's not our working
113 * directory.
114 */
115 Future<ProcessResult> run(
116 ProcessResult previousResult, List<String> filenames) {
117 // If there's a failure in one of the sub-programs, print its output.
118 checkResult(previousResult);
119 var filesInTheRightDirectory = filenames
120 .map((x) => asTempDirPath(x))
121 .map((x) => path.normalize(x))
122 .toList();
123 // Inject the script argument --output-dir in between the script and its
124 // arguments.
125 var args = []
126 ..addAll(vmArgs)
127 ..add(filesInTheRightDirectory.first)
128 ..addAll(["--output-dir=$tempDir"])
129 ..addAll(filesInTheRightDirectory.skip(1));
130 var result =
131 Process.run(dart, args, stdoutEncoding: UTF8, stderrEncoding: UTF8);
132 return result;
133 }
134
135 void checkResult(ProcessResult previousResult) {
136 if (previousResult != null) {
137 if (previousResult.exitCode != 0) {
138 print("Error running sub-program:");
139 }
140 print(previousResult.stdout);
141 print(previousResult.stderr);
142 print("exitCode=${previousResult.exitCode}");
143 // Fail the test.
144 expect(previousResult.exitCode, 0);
145 }
146 }
147
148 Future<ProcessResult> extractMessages(ProcessResult previousResult) => run(
149 previousResult, [
150 asTestDirPath('../../bin/extract_to_arb.dart'),
151 '--suppress-warnings',
152 'sample_with_messages.dart',
153 'part_of_sample_with_messages.dart'
154 ]);
155
156 Future<ProcessResult> generateTranslationFiles(ProcessResult previousResult) =>
157 run(previousResult, [
158 asTestDirPath('make_hardcoded_translation.dart'),
159 'intl_messages.arb'
160 ]);
161
162 Future<ProcessResult> generateCodeFromTranslation(
163 ProcessResult previousResult) => run(previousResult, [
164 asTestDirPath('../../bin/generate_from_arb.dart'),
165 deferredLoadArg,
166 '--generated-file-prefix=foo_',
167 'sample_with_messages.dart',
168 'part_of_sample_with_messages.dart',
169 'translation_fr.arb',
170 'translation_de_DE.arb'
171 ]);
172
173 Future<ProcessResult> runAndVerify(ProcessResult previousResult) =>
174 run(previousResult, [asTempDirPath('run_and_verify.dart')]);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698