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 |