OLD | NEW |
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 } |
OLD | NEW |