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

Side by Side Diff: mojo/dart/mojom/test/generate_test.dart

Issue 1210253006: Dart: Allows the mojom package's generate script to download .mojoms. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Address comments Created 5 years, 5 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 import 'dart:io'; 5 import 'dart:io';
6 6
7 import 'package:mojom/generate.dart' as generate; 7 import 'package:mojom/generate.dart' as generate;
8 import 'package:path/path.dart' as path; 8 import 'package:path/path.dart' as path;
9 import 'package:unittest/unittest.dart'; 9 import 'package:unittest/unittest.dart';
10 10
11 final mojomContents = ''' 11 final mojomContents = '''
12 module generated; 12 module generated;
13 13
14 struct Transform { 14 struct Transform {
15 // Row major order. 15 // Row major order.
16 array<float, 16> matrix; 16 array<float, 16> matrix;
17 }; 17 };
18 '''; 18 ''';
19 19
20 void main() { 20 final dldMojomContents1 = '''
21 module downloaded;
22
23 struct Downloaded1 {
24 int32 status;
25 };
26 ''';
27
28 final dldMojomContents2 = '''
29 module downloaded;
30
31 struct Downloaded2 {
32 int32 status;
33 };
34 ''';
35
36 main() async {
37 String mojoSdk;
38 if (Platform.environment['MOJO_SDK'] != null) {
39 mojoSdk = Platform.environment['MOJO_SDK'];
40 } else {
41 mojoSdk = path.normalize(path.join(
42 path.dirname(Platform.script.path), '..', '..', '..', 'public'));
43 }
44 if (!await new Directory(mojoSdk).exists()) {
45 fail("Could not find the Mojo SDK");
46 }
47
21 final scriptPath = path.dirname(Platform.script.path); 48 final scriptPath = path.dirname(Platform.script.path);
22 final testPackagePath = path.join(scriptPath, 'test_packages'); 49 final testPackagePath = path.join(scriptPath, 'test_packages');
23 final testMojomPath = path.join(testPackagePath, 'mojom'); 50 final testMojomPath = path.join(testPackagePath, 'mojom');
24 51
25 final pregenPath = path.join(testPackagePath, 'pregen'); 52 final pregenPath = path.join(testPackagePath, 'pregen');
26 final pregenFilePath = 53 final pregenFilePath =
27 path.join(pregenPath, 'mojom', 'pregen', 'pregen.mojom.dart'); 54 path.join(pregenPath, 'mojom', 'pregen', 'pregen.mojom.dart');
28 55
29 final additionalRootPath = path.join(scriptPath, 'additional_dir'); 56 final additionalRootPath = path.join(scriptPath, 'additional_dir');
30 final additionalPath = path.join( 57 final additionalPath = path.join(
31 additionalRootPath, 'additional', 'additional.mojom.dart'); 58 additionalRootPath, 'additional', 'additional.mojom.dart');
32 59
60 final downloadedPackagePath = path.join(testPackagePath, 'downloaded');
61 final dotMojomsPath = path.join(downloadedPackagePath, '.mojoms');
62
33 setUp(() async { 63 setUp(() async {
34 await new Directory(testMojomPath).create(recursive: true); 64 await new Directory(testMojomPath).create(recursive: true);
35 await new File(pregenFilePath).create(recursive: true); 65 await new File(pregenFilePath).create(recursive: true);
36 await new File(additionalPath).create(recursive: true); 66 await new File(additionalPath).create(recursive: true);
37 67
38 final generatedMojomFile = new File(path.join(testPackagePath, 'generated', 68 final generatedMojomFile = new File(path.join(testPackagePath, 'generated',
39 'mojom', 'generated', 'public', 'interfaces', 'generated.mojom')); 69 'mojom', 'generated', 'public', 'interfaces', 'generated.mojom'));
40 await generatedMojomFile.create(recursive: true); 70 await generatedMojomFile.create(recursive: true);
41 await generatedMojomFile.writeAsString(mojomContents); 71 await generatedMojomFile.writeAsString(mojomContents);
72
73 await new Directory(downloadedPackagePath).create(recursive: true);
42 }); 74 });
43 75
44 tearDown(() async { 76 tearDown(() async {
45 await new Directory(additionalRootPath).delete(recursive: true); 77 await new Directory(additionalRootPath).delete(recursive: true);
46 await new Directory(testPackagePath).delete(recursive: true); 78 await new Directory(testPackagePath).delete(recursive: true);
47 }); 79 });
48 80
49 group('end-to-end', () { 81 group('No Download', () {
50 test('Copy', () async { 82 test('Copy', () async {
51 await generate.main(['-p', testPackagePath]); 83 await generate.main(['-p', testPackagePath, '-m', mojoSdk]);
52 final pregenFile = new File( 84 final pregenFile = new File(
53 path.join(testMojomPath, 'pregen', 'pregen.mojom.dart')); 85 path.join(testMojomPath, 'pregen', 'pregen.mojom.dart'));
54 expect(await pregenFile.exists(), isTrue); 86 expect(await pregenFile.exists(), isTrue);
55 }); 87 });
56 88
57 test('Copy and Additional', () async { 89 test('Copy and Additional', () async {
58 await generate.main(['-p', testPackagePath, '-a', additionalRootPath]); 90 await generate.main(['-p', testPackagePath, '-m', mojoSdk,
91 '-a', additionalRootPath]);
59 final additionalFile = new File( 92 final additionalFile = new File(
60 path.join(testMojomPath, 'additional', 'additional.mojom.dart')); 93 path.join(testMojomPath, 'additional', 'additional.mojom.dart'));
61 expect(await additionalFile.exists(), isTrue); 94 expect(await additionalFile.exists(), isTrue);
62 }); 95 });
63 96
64 test('Copy and Generate', () async { 97 test('Copy and Generate', () async {
65 if (Platform.environment['MOJO_SDK'] != null) { 98 await generate.main(['-g', '-p', testPackagePath, '-m', mojoSdk]);
66 await generate.main(['-g', '-p', testPackagePath]); 99 final generatedFile = new File(
67 final generatedFile = new File( 100 path.join(testMojomPath, 'generated', 'generated.mojom.dart'));
68 path.join(testMojomPath, 'generated', 'generated.mojom.dart')); 101 expect(await generatedFile.exists(), isTrue);
69 expect(await generatedFile.exists(), isTrue);
70 }
71 }); 102 });
72 103
73 test('All', () async { 104 test('All', () async {
74 if (Platform.environment['MOJO_SDK'] != null) { 105 await generate.main([
75 await generate.main([ 106 '-g', '-p', testPackagePath, '-m', mojoSdk,
76 '-g', '-p', testPackagePath, '-a', additionalRootPath]); 107 '-a', additionalRootPath]);
77 108
78 final pregenFile = new File( 109 final pregenFile = new File(
79 path.join(testMojomPath, 'pregen', 'pregen.mojom.dart')); 110 path.join(testMojomPath, 'pregen', 'pregen.mojom.dart'));
80 expect(await pregenFile.exists(), isTrue); 111 expect(await pregenFile.exists(), isTrue);
81 112
82 final additionalFile = new File( 113 final additionalFile = new File(
83 path.join(testMojomPath, 'additional', 'additional.mojom.dart')); 114 path.join(testMojomPath, 'additional', 'additional.mojom.dart'));
84 expect(await additionalFile.exists(), isTrue); 115 expect(await additionalFile.exists(), isTrue);
85 116
86 final generatedFile = new File( 117 final generatedFile = new File(
87 path.join(testMojomPath, 'generated', 'generated.mojom.dart')); 118 path.join(testMojomPath, 'generated', 'generated.mojom.dart'));
88 expect(await generatedFile.exists(), isTrue); 119 expect(await generatedFile.exists(), isTrue);
89 }
90 }); 120 });
91 }); 121 });
92 122
123 group('Download', () {
124 var httpServer;
125 setUp(() async {
126 httpServer = await HttpServer.bind("localhost", 0);
127 httpServer.listen((HttpRequest request) {
128 String path = request.uri.path;
129 if (path.endsWith('path/to/mojom/download_one.mojom')) {
130 request.response.write(dldMojomContents1);
131 } else if (path.endsWith('path/to/mojom/download_two.mojom')) {
132 request.response.write(dldMojomContents2);
133 } else {
134 request.response.statusCode = HttpStatus.NOT_FOUND;
135 }
136 request.response.close();
137 });
138 });
139
140 tearDown(() async {
141 await httpServer.close();
142 httpServer = null;
143 });
144
145 test('simple', () async {
146 final mojomsFile = new File(dotMojomsPath);
147 await mojomsFile.create(recursive: true);
148 await mojomsFile.writeAsString(
149 "root: http://localhost:${httpServer.port}\n"
150 "path/to/mojom/download_one.mojom\n");
151 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
152 final downloadedFile = new File(
153 path.join(testMojomPath, 'downloaded', 'download_one.mojom.dart'));
154 expect(await downloadedFile.exists(), isTrue);
155 await mojomsFile.delete();
156 });
157
158 test('two files', () async {
159 final mojomsFile = new File(dotMojomsPath);
160 await mojomsFile.create(recursive: true);
161 await mojomsFile.writeAsString(
162 "root: http://localhost:${httpServer.port}\n"
163 "path/to/mojom/download_one.mojom\n"
164 "path/to/mojom/download_two.mojom\n");
165 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
166 final downloaded1File = new File(
167 path.join(testMojomPath, 'downloaded', 'download_one.mojom.dart'));
168 expect(await downloaded1File.exists(), isTrue);
169 final downloaded2File = new File(
170 path.join(testMojomPath, 'downloaded', 'download_two.mojom.dart'));
171 expect(await downloaded2File.exists(), isTrue);
172 await mojomsFile.delete();
173 });
174
175 test('two roots', () async {
176 final mojomsFile = new File(dotMojomsPath);
177 await mojomsFile.create(recursive: true);
178 await mojomsFile.writeAsString(
179 "root: http://localhost:${httpServer.port}\n"
180 "path/to/mojom/download_one.mojom\n"
181 "root: http://localhost:${httpServer.port}\n"
182 "path/to/mojom/download_two.mojom\n");
183 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
184 final downloaded1File = new File(
185 path.join(testMojomPath, 'downloaded', 'download_one.mojom.dart'));
186 expect(await downloaded1File.exists(), isTrue);
187 final downloaded2File = new File(
188 path.join(testMojomPath, 'downloaded', 'download_two.mojom.dart'));
189 expect(await downloaded2File.exists(), isTrue);
190 await mojomsFile.delete();
191 });
192
193 test('simple-comment', () async {
194 final mojomsFile = new File(dotMojomsPath);
195 await mojomsFile.create(recursive: true);
196 await mojomsFile.writeAsString(
197 "# Comments are allowed\n"
198 " root: http://localhost:${httpServer.port}\n\n\n\n"
199 " # Here too\n"
200 " path/to/mojom/download_one.mojom\n"
201 "# And here\n");
202 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
203 final downloadedFile = new File(
204 path.join(testMojomPath, 'downloaded', 'download_one.mojom.dart'));
205 expect(await downloadedFile.exists(), isTrue);
206 await mojomsFile.delete();
207 });
208
209 test('404', () async {
210 final mojomsFile = new File(dotMojomsPath);
211 await mojomsFile.create(recursive: true);
212 await mojomsFile.writeAsString(
213 "root: http://localhost:${httpServer.port}\n"
214 "blah\n");
215 var fail = false;
216 try {
217 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
218 } on generate.DownloadError {
219 fail = true;
220 }
221 expect(fail, isTrue);
222 await mojomsFile.delete();
223 });
224 });
225
93 group('Failures', () { 226 group('Failures', () {
94 test('Bad Package Root',() async { 227 test('Bad Package Root',() async {
95 final dummyPackageRoot = path.join(scriptPath, 'dummyPackageRoot'); 228 final dummyPackageRoot = path.join(scriptPath, 'dummyPackageRoot');
96 var fail = false; 229 var fail = false;
97 try { 230 try {
98 await generate.main(['-p', dummyPackageRoot]); 231 await generate.main(['-p', dummyPackageRoot, '-m', mojoSdk]);
99 } on generate.CommandLineError { 232 } on generate.CommandLineError {
100 fail = true; 233 fail = true;
101 } 234 }
102 expect(fail, isTrue); 235 expect(fail, isTrue);
103 }); 236 });
104 237
105 test('Non-absolute PackageRoot', () async { 238 test('Non-absolute PackageRoot', () async {
106 final dummyPackageRoot = 'dummyPackageRoot'; 239 final dummyPackageRoot = 'dummyPackageRoot';
107 var fail = false; 240 var fail = false;
108 try { 241 try {
109 await generate.main(['-p', dummyPackageRoot]); 242 await generate.main(['-p', dummyPackageRoot, '-m', mojoSdk]);
110 } on generate.CommandLineError { 243 } on generate.CommandLineError {
111 fail = true; 244 fail = true;
112 } 245 }
113 expect(fail, isTrue); 246 expect(fail, isTrue);
114 }); 247 });
115 248
116 test('Bad Additional Dir', () async { 249 test('Bad Additional Dir', () async {
117 final dummyAdditional = path.join(scriptPath, 'dummyAdditional'); 250 final dummyAdditional = path.join(scriptPath, 'dummyAdditional');
118 var fail = false; 251 var fail = false;
119 try { 252 try {
120 await generate.main(['-a', dummyAdditional, '-p', testPackagePath]); 253 await generate.main(['-a', dummyAdditional, '-p', testPackagePath,
254 '-m', mojoSdk]);
121 } on generate.CommandLineError { 255 } on generate.CommandLineError {
122 fail = true; 256 fail = true;
123 } 257 }
124 expect(fail, isTrue); 258 expect(fail, isTrue);
125 }); 259 });
126 260
127 test('Non-absolute Additional Dir', () async { 261 test('Non-absolute Additional Dir', () async {
128 final dummyAdditional = 'dummyAdditional'; 262 final dummyAdditional = 'dummyAdditional';
129 var fail = false; 263 var fail = false;
130 try { 264 try {
131 await generate.main(['-a', dummyAdditional, '-p', testPackagePath]); 265 await generate.main(['-a', dummyAdditional, '-p', testPackagePath,
266 '-m', mojoSdk]);
132 } on generate.CommandLineError { 267 } on generate.CommandLineError {
133 fail = true; 268 fail = true;
134 } 269 }
135 expect(fail, isTrue); 270 expect(fail, isTrue);
136 }); 271 });
137 272
138 test('No Mojo Package', () async { 273 test('No Mojo Package', () async {
139 final dummyPackageRoot = path.join(scriptPath, 'dummyPackageRoot'); 274 final dummyPackageRoot = path.join(scriptPath, 'dummyPackageRoot');
140 final dummyPackageDir = new Directory(dummyPackageRoot); 275 final dummyPackageDir = new Directory(dummyPackageRoot);
141 await dummyPackageDir.create(recursive: true); 276 await dummyPackageDir.create(recursive: true);
142 277
143 var fail = false; 278 var fail = false;
144 try { 279 try {
145 await generate.main(['-p', dummyPackageRoot]); 280 await generate.main(['-p', dummyPackageRoot, '-m', mojoSdk]);
146 } on generate.CommandLineError { 281 } on generate.CommandLineError {
147 fail = true; 282 fail = true;
148 } 283 }
149 await dummyPackageDir.delete(recursive: true); 284 await dummyPackageDir.delete(recursive: true);
150 expect(fail, isTrue); 285 expect(fail, isTrue);
151 }); 286 });
152 287
153 test('Bad Mojo SDK', () async { 288 test('Bad Mojo SDK', () async {
154 final dummySdk = path.join(scriptPath, 'dummySdk'); 289 final dummySdk = path.join(scriptPath, 'dummySdk');
155 var fail = false; 290 var fail = false;
156 try { 291 try {
157 await generate.main(['-g', '-m', dummySdk, '-p', testPackagePath]); 292 await generate.main(['-g', '-m', dummySdk, '-p', testPackagePath]);
158 } on generate.CommandLineError { 293 } on generate.CommandLineError {
159 fail = true; 294 fail = true;
160 } 295 }
161 expect(fail, isTrue); 296 expect(fail, isTrue);
162 }); 297 });
298
299 test('Download No Server', () async {
300 final mojomsFile = new File(dotMojomsPath);
301 await mojomsFile.create(recursive: true);
302 await mojomsFile.writeAsString(
303 "root: http://localhots\n"
304 "path/to/mojom/download_one.mojom\n");
305 var fail = false;
306 try {
307 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
308 } on generate.DownloadError {
309 fail = true;
310 }
311 expect(fail, isTrue);
312 await mojomsFile.delete();
313 });
314
315 test('.mojoms no root', () async {
316 final mojomsFile = new File(dotMojomsPath);
317 await mojomsFile.create(recursive: true);
318 await mojomsFile.writeAsString(
319 "path/to/mojom/download_one.mojom\n");
320 var fail = false;
321 try {
322 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
323 } on generate.DownloadError {
324 fail = true;
325 }
326 expect(fail, isTrue);
327 await mojomsFile.delete();
328 });
329
330 test('.mojoms blank root', () async {
331 final mojomsFile = new File(dotMojomsPath);
332 await mojomsFile.create(recursive: true);
333 await mojomsFile.writeAsString(
334 "root:\n"
335 "path/to/mojom/download_one.mojom\n");
336 var fail = false;
337 try {
338 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
339 } on generate.DownloadError {
340 fail = true;
341 }
342 expect(fail, isTrue);
343 await mojomsFile.delete();
344 });
345
346 test('.mojoms root malformed', () async {
347 final mojomsFile = new File(dotMojomsPath);
348 await mojomsFile.create(recursive: true);
349 await mojomsFile.writeAsString(
350 "root: gobledygook\n"
351 "path/to/mojom/download_one.mojom\n");
352 var fail = false;
353 try {
354 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
355 } on generate.DownloadError {
356 fail = true;
357 }
358 expect(fail, isTrue);
359 await mojomsFile.delete();
360 });
361
362 test('.mojoms root without mojom', () async {
363 final mojomsFile = new File(dotMojomsPath);
364 await mojomsFile.create(recursive: true);
365 await mojomsFile.writeAsString(
366 "root: http://localhost\n"
367 "root: http://localhost\n"
368 "path/to/mojom/download_one.mojom\n");
369 var fail = false;
370 try {
371 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
372 } on generate.DownloadError {
373 fail = true;
374 }
375 expect(fail, isTrue);
376 await mojomsFile.delete();
377 });
163 }); 378 });
164 } 379 }
OLDNEW
« no previous file with comments | « mojo/dart/mojom/lib/src/utils.dart ('k') | mojo/public/tools/bindings/generators/mojom_dart_generator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698