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

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: 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
63 final pkcert = Platform.script.resolve('pkcert').toFilePath();
64 SecureSocket.initialize(database: pkcert, password: 'dartdart');
65
33 setUp(() async { 66 setUp(() async {
34 await new Directory(testMojomPath).create(recursive: true); 67 await new Directory(testMojomPath).create(recursive: true);
35 await new File(pregenFilePath).create(recursive: true); 68 await new File(pregenFilePath).create(recursive: true);
36 await new File(additionalPath).create(recursive: true); 69 await new File(additionalPath).create(recursive: true);
37 70
38 final generatedMojomFile = new File(path.join(testPackagePath, 'generated', 71 final generatedMojomFile = new File(path.join(testPackagePath, 'generated',
39 'mojom', 'generated', 'public', 'interfaces', 'generated.mojom')); 72 'mojom', 'generated', 'public', 'interfaces', 'generated.mojom'));
40 await generatedMojomFile.create(recursive: true); 73 await generatedMojomFile.create(recursive: true);
41 await generatedMojomFile.writeAsString(mojomContents); 74 await generatedMojomFile.writeAsString(mojomContents);
75
76 await new Directory(downloadedPackagePath).create(recursive: true);
42 }); 77 });
43 78
44 tearDown(() async { 79 tearDown(() async {
45 await new Directory(additionalRootPath).delete(recursive: true); 80 await new Directory(additionalRootPath).delete(recursive: true);
46 await new Directory(testPackagePath).delete(recursive: true); 81 await new Directory(testPackagePath).delete(recursive: true);
47 }); 82 });
48 83
49 group('end-to-end', () { 84 group('No Download', () {
50 test('Copy', () async { 85 test('Copy', () async {
51 await generate.main(['-p', testPackagePath]); 86 await generate.main(['-p', testPackagePath, '-m', mojoSdk]);
52 final pregenFile = new File( 87 final pregenFile = new File(
53 path.join(testMojomPath, 'pregen', 'pregen.mojom.dart')); 88 path.join(testMojomPath, 'pregen', 'pregen.mojom.dart'));
54 expect(await pregenFile.exists(), isTrue); 89 expect(await pregenFile.exists(), isTrue);
55 }); 90 });
56 91
57 test('Copy and Additional', () async { 92 test('Copy and Additional', () async {
58 await generate.main(['-p', testPackagePath, '-a', additionalRootPath]); 93 await generate.main(['-p', testPackagePath, '-m', mojoSdk,
94 '-a', additionalRootPath]);
59 final additionalFile = new File( 95 final additionalFile = new File(
60 path.join(testMojomPath, 'additional', 'additional.mojom.dart')); 96 path.join(testMojomPath, 'additional', 'additional.mojom.dart'));
61 expect(await additionalFile.exists(), isTrue); 97 expect(await additionalFile.exists(), isTrue);
62 }); 98 });
63 99
64 test('Copy and Generate', () async { 100 test('Copy and Generate', () async {
65 if (Platform.environment['MOJO_SDK'] != null) { 101 await generate.main(['-g', '-p', testPackagePath, '-m', mojoSdk]);
66 await generate.main(['-g', '-p', testPackagePath]); 102 final generatedFile = new File(
67 final generatedFile = new File( 103 path.join(testMojomPath, 'generated', 'generated.mojom.dart'));
68 path.join(testMojomPath, 'generated', 'generated.mojom.dart')); 104 expect(await generatedFile.exists(), isTrue);
69 expect(await generatedFile.exists(), isTrue);
70 }
71 }); 105 });
72 106
73 test('All', () async { 107 test('All', () async {
74 if (Platform.environment['MOJO_SDK'] != null) { 108 await generate.main([
75 await generate.main([ 109 '-g', '-p', testPackagePath, '-m', mojoSdk,
76 '-g', '-p', testPackagePath, '-a', additionalRootPath]); 110 '-a', additionalRootPath]);
77 111
78 final pregenFile = new File( 112 final pregenFile = new File(
79 path.join(testMojomPath, 'pregen', 'pregen.mojom.dart')); 113 path.join(testMojomPath, 'pregen', 'pregen.mojom.dart'));
80 expect(await pregenFile.exists(), isTrue); 114 expect(await pregenFile.exists(), isTrue);
81 115
82 final additionalFile = new File( 116 final additionalFile = new File(
83 path.join(testMojomPath, 'additional', 'additional.mojom.dart')); 117 path.join(testMojomPath, 'additional', 'additional.mojom.dart'));
84 expect(await additionalFile.exists(), isTrue); 118 expect(await additionalFile.exists(), isTrue);
85 119
86 final generatedFile = new File( 120 final generatedFile = new File(
87 path.join(testMojomPath, 'generated', 'generated.mojom.dart')); 121 path.join(testMojomPath, 'generated', 'generated.mojom.dart'));
88 expect(await generatedFile.exists(), isTrue); 122 expect(await generatedFile.exists(), isTrue);
89 }
90 }); 123 });
91 }); 124 });
92 125
126 group('Download', () {
127 var httpServer;
128 setUp(() async {
129 httpServer = await HttpServer.bindSecure(
130 "localhost",
131 0,
132 certificateName: 'localhost_cert',
133 requestClientCertificate: true);
134 httpServer.listen((HttpRequest request) {
135 String path = request.uri.path;
136 if (path.endsWith('path/to/mojom/download_one.mojom')) {
137 request.response.write(dldMojomContents1);
138 } else if (path.endsWith('path/to/mojom/download_two.mojom')) {
139 request.response.write(dldMojomContents2);
140 } else {
141 request.response.statusCode = HttpStatus.NOT_FOUND;
142 }
143 request.response.close();
144 });
145 });
146
147 tearDown(() {
148 httpServer.close();
149 });
150
151 test('simple', () async {
152 final mojomsFile = new File(dotMojomsPath);
153 await mojomsFile.create(recursive: true);
154 await mojomsFile.writeAsString(
155 "root: https://localhost:${httpServer.port}\n"
156 "path/to/mojom/download_one.mojom\n");
157 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
158 final downloadedFile = new File(
159 path.join(testMojomPath, 'downloaded', 'download_one.mojom.dart'));
160 expect(await downloadedFile.exists(), isTrue);
161 await mojomsFile.delete();
162 });
163
164 test('two files', () async {
165 final mojomsFile = new File(dotMojomsPath);
166 await mojomsFile.create(recursive: true);
167 await mojomsFile.writeAsString(
168 "root: https://localhost:${httpServer.port}\n"
169 "path/to/mojom/download_one.mojom\n"
170 "path/to/mojom/download_two.mojom\n");
171 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
172 final downloaded1File = new File(
173 path.join(testMojomPath, 'downloaded', 'download_one.mojom.dart'));
174 expect(await downloaded1File.exists(), isTrue);
175 final downloaded2File = new File(
176 path.join(testMojomPath, 'downloaded', 'download_two.mojom.dart'));
177 expect(await downloaded2File.exists(), isTrue);
178 await mojomsFile.delete();
179 });
180
181 test('two roots', () async {
182 final mojomsFile = new File(dotMojomsPath);
183 await mojomsFile.create(recursive: true);
184 await mojomsFile.writeAsString(
185 "root: https://localhost:${httpServer.port}\n"
186 "path/to/mojom/download_one.mojom\n"
187 "root: https://localhost:${httpServer.port}\n"
188 "path/to/mojom/download_two.mojom\n");
189 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
190 final downloaded1File = new File(
191 path.join(testMojomPath, 'downloaded', 'download_one.mojom.dart'));
192 expect(await downloaded1File.exists(), isTrue);
193 final downloaded2File = new File(
194 path.join(testMojomPath, 'downloaded', 'download_two.mojom.dart'));
195 expect(await downloaded2File.exists(), isTrue);
196 await mojomsFile.delete();
197 });
198
199 test('simple-comment', () async {
200 final mojomsFile = new File(dotMojomsPath);
201 await mojomsFile.create(recursive: true);
202 await mojomsFile.writeAsString(
203 "# Comments are allowed\n"
204 "root: https://localhost:${httpServer.port}\n\n\n\n"
205 "# Here too\n"
206 "path/to/mojom/download_one.mojom\n"
207 "# And here\n");
208 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
209 final downloadedFile = new File(
210 path.join(testMojomPath, 'downloaded', 'download_one.mojom.dart'));
211 expect(await downloadedFile.exists(), isTrue);
212 await mojomsFile.delete();
213 });
214
215 test('404', () async {
216 final mojomsFile = new File(dotMojomsPath);
217 await mojomsFile.create(recursive: true);
218 await mojomsFile.writeAsString(
219 "root: https://localhost:${httpServer.port}\n"
220 "blah\n");
221 var fail = false;
222 try {
223 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
224 } on generate.DownloadError {
225 fail = true;
226 }
227 expect(fail, isTrue);
228 await mojomsFile.delete();
229 });
230 });
231
93 group('Failures', () { 232 group('Failures', () {
94 test('Bad Package Root',() async { 233 test('Bad Package Root',() async {
95 final dummyPackageRoot = path.join(scriptPath, 'dummyPackageRoot'); 234 final dummyPackageRoot = path.join(scriptPath, 'dummyPackageRoot');
96 var fail = false; 235 var fail = false;
97 try { 236 try {
98 await generate.main(['-p', dummyPackageRoot]); 237 await generate.main(['-p', dummyPackageRoot, '-m', mojoSdk]);
99 } on generate.CommandLineError { 238 } on generate.CommandLineError {
100 fail = true; 239 fail = true;
101 } 240 }
102 expect(fail, isTrue); 241 expect(fail, isTrue);
103 }); 242 });
104 243
105 test('Non-absolute PackageRoot', () async { 244 test('Non-absolute PackageRoot', () async {
106 final dummyPackageRoot = 'dummyPackageRoot'; 245 final dummyPackageRoot = 'dummyPackageRoot';
107 var fail = false; 246 var fail = false;
108 try { 247 try {
109 await generate.main(['-p', dummyPackageRoot]); 248 await generate.main(['-p', dummyPackageRoot, '-m', mojoSdk]);
110 } on generate.CommandLineError { 249 } on generate.CommandLineError {
111 fail = true; 250 fail = true;
112 } 251 }
113 expect(fail, isTrue); 252 expect(fail, isTrue);
114 }); 253 });
115 254
116 test('Bad Additional Dir', () async { 255 test('Bad Additional Dir', () async {
117 final dummyAdditional = path.join(scriptPath, 'dummyAdditional'); 256 final dummyAdditional = path.join(scriptPath, 'dummyAdditional');
118 var fail = false; 257 var fail = false;
119 try { 258 try {
120 await generate.main(['-a', dummyAdditional, '-p', testPackagePath]); 259 await generate.main(['-a', dummyAdditional, '-p', testPackagePath,
260 '-m', mojoSdk]);
121 } on generate.CommandLineError { 261 } on generate.CommandLineError {
122 fail = true; 262 fail = true;
123 } 263 }
124 expect(fail, isTrue); 264 expect(fail, isTrue);
125 }); 265 });
126 266
127 test('Non-absolute Additional Dir', () async { 267 test('Non-absolute Additional Dir', () async {
128 final dummyAdditional = 'dummyAdditional'; 268 final dummyAdditional = 'dummyAdditional';
129 var fail = false; 269 var fail = false;
130 try { 270 try {
131 await generate.main(['-a', dummyAdditional, '-p', testPackagePath]); 271 await generate.main(['-a', dummyAdditional, '-p', testPackagePath,
272 '-m', mojoSdk]);
132 } on generate.CommandLineError { 273 } on generate.CommandLineError {
133 fail = true; 274 fail = true;
134 } 275 }
135 expect(fail, isTrue); 276 expect(fail, isTrue);
136 }); 277 });
137 278
138 test('No Mojo Package', () async { 279 test('No Mojo Package', () async {
139 final dummyPackageRoot = path.join(scriptPath, 'dummyPackageRoot'); 280 final dummyPackageRoot = path.join(scriptPath, 'dummyPackageRoot');
140 final dummyPackageDir = new Directory(dummyPackageRoot); 281 final dummyPackageDir = new Directory(dummyPackageRoot);
141 await dummyPackageDir.create(recursive: true); 282 await dummyPackageDir.create(recursive: true);
142 283
143 var fail = false; 284 var fail = false;
144 try { 285 try {
145 await generate.main(['-p', dummyPackageRoot]); 286 await generate.main(['-p', dummyPackageRoot, '-m', mojoSdk]);
146 } on generate.CommandLineError { 287 } on generate.CommandLineError {
147 fail = true; 288 fail = true;
148 } 289 }
149 await dummyPackageDir.delete(recursive: true); 290 await dummyPackageDir.delete(recursive: true);
150 expect(fail, isTrue); 291 expect(fail, isTrue);
151 }); 292 });
152 293
153 test('Bad Mojo SDK', () async { 294 test('Bad Mojo SDK', () async {
154 final dummySdk = path.join(scriptPath, 'dummySdk'); 295 final dummySdk = path.join(scriptPath, 'dummySdk');
155 var fail = false; 296 var fail = false;
156 try { 297 try {
157 await generate.main(['-g', '-m', dummySdk, '-p', testPackagePath]); 298 await generate.main(['-g', '-m', dummySdk, '-p', testPackagePath]);
158 } on generate.CommandLineError { 299 } on generate.CommandLineError {
159 fail = true; 300 fail = true;
160 } 301 }
161 expect(fail, isTrue); 302 expect(fail, isTrue);
162 }); 303 });
304
305 test('Download No Server', () async {
306 final mojomsFile = new File(dotMojomsPath);
307 await mojomsFile.create(recursive: true);
308 await mojomsFile.writeAsString(
309 "root: https://localhost\n"
310 "path/to/mojom/download_one.mojom\n");
311 var fail = false;
312 try {
313 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
314 } on generate.DownloadError {
315 fail = true;
316 }
317 expect(fail, isTrue);
318 await mojomsFile.delete();
319 });
320
321 test('.mojoms no root', () async {
322 final mojomsFile = new File(dotMojomsPath);
323 await mojomsFile.create(recursive: true);
324 await mojomsFile.writeAsString(
325 "path/to/mojom/download_one.mojom\n");
326 var fail = false;
327 try {
328 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
329 } on generate.DownloadError {
330 fail = true;
331 }
332 expect(fail, isTrue);
333 await mojomsFile.delete();
334 });
335
336 test('.mojoms blank root', () async {
337 final mojomsFile = new File(dotMojomsPath);
338 await mojomsFile.create(recursive: true);
339 await mojomsFile.writeAsString(
340 "root:\n"
341 "path/to/mojom/download_one.mojom\n");
342 var fail = false;
343 try {
344 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
345 } on generate.DownloadError {
346 fail = true;
347 }
348 expect(fail, isTrue);
349 await mojomsFile.delete();
350 });
351
352 test('.mojoms root not https', () async {
353 final mojomsFile = new File(dotMojomsPath);
354 await mojomsFile.create(recursive: true);
355 await mojomsFile.writeAsString(
356 "root: http://localhost\n"
357 "path/to/mojom/download_one.mojom\n");
358 var fail = false;
359 try {
360 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
361 } on generate.DownloadError {
362 fail = true;
363 }
364 expect(fail, isTrue);
365 await mojomsFile.delete();
366 });
367
368 test('.mojoms root malformed', () async {
369 final mojomsFile = new File(dotMojomsPath);
370 await mojomsFile.create(recursive: true);
371 await mojomsFile.writeAsString(
372 "root: gobledygook\n"
373 "path/to/mojom/download_one.mojom\n");
374 var fail = false;
375 try {
376 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
377 } on generate.DownloadError {
378 fail = true;
379 }
380 expect(fail, isTrue);
381 await mojomsFile.delete();
382 });
383
384 test('.mojoms root without mojom', () async {
385 final mojomsFile = new File(dotMojomsPath);
386 await mojomsFile.create(recursive: true);
387 await mojomsFile.writeAsString(
388 "root: http://localhost\n"
389 "root: http://localhost\n"
390 "path/to/mojom/download_one.mojom\n");
391 var fail = false;
392 try {
393 await generate.main(['-p', testPackagePath, '-m', mojoSdk, '-d', '-g']);
394 } on generate.DownloadError {
395 fail = true;
396 }
397 expect(fail, isTrue);
398 await mojomsFile.delete();
399 });
163 }); 400 });
164 } 401 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698