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