OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library analyzer_cli.test.driver; | 5 library analyzer_cli.test.driver; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:io'; | 8 import 'dart:io'; |
9 | 9 |
10 import 'package:analyzer/error/error.dart'; | 10 import 'package:analyzer/error/error.dart'; |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 ErrorProcessor processorFor(AnalysisError error) => | 215 ErrorProcessor processorFor(AnalysisError error) => |
216 processors.firstWhere((p) => p.appliesTo(error)); | 216 processors.firstWhere((p) => p.appliesTo(error)); |
217 | 217 |
218 /// Normalize text with bullets. | 218 /// Normalize text with bullets. |
219 String _bulletToDash(item) => '$item'.replaceAll('•', '-'); | 219 String _bulletToDash(item) => '$item'.replaceAll('•', '-'); |
220 | 220 |
221 void _test_buildMode() { | 221 void _test_buildMode() { |
222 void createTests(String designator, String optionsFileName) { | 222 void createTests(String designator, String optionsFileName) { |
223 group('build-mode - $designator', () { | 223 group('build-mode - $designator', () { |
224 // Shared driver command. | 224 // Shared driver command. |
225 Future<Null> doDrive(String filePath, | 225 Future<Null> doDrive(String path, |
226 {List<String> additionalArgs: const []}) async { | 226 {String uri, List<String> additionalArgs: const []}) async { |
227 await drive('file:///test_file.dart|$filePath', | 227 uri ??= 'file:///test_file.dart'; |
| 228 await drive('$uri|$path', |
228 args: [ | 229 args: [ |
229 '--dart-sdk', | 230 '--dart-sdk', |
230 findSdkDirForSummaries(), | 231 findSdkDirForSummaries(), |
231 '--build-mode', | 232 '--build-mode', |
232 '--format=machine' | 233 '--format=machine' |
233 ]..addAll(additionalArgs), | 234 ]..addAll(additionalArgs), |
234 options: 'data/options_tests_project/$optionsFileName'); | 235 options: 'data/options_tests_project/$optionsFileName'); |
235 } | 236 } |
236 | 237 |
237 test('no stats', () async { | 238 test('no stats', () async { |
(...skipping 18 matching lines...) Expand all Loading... |
256 }); | 257 }); |
257 | 258 |
258 test( | 259 test( |
259 'Succeeds if there are errors, when --build-suppress-exit-code is give
n', | 260 'Succeeds if there are errors, when --build-suppress-exit-code is give
n', |
260 () async { | 261 () async { |
261 await doDrive(path.join('data', 'file_with_error.dart'), | 262 await doDrive(path.join('data', 'file_with_error.dart'), |
262 additionalArgs: ['--build-suppress-exit-code']); | 263 additionalArgs: ['--build-suppress-exit-code']); |
263 expect(exitCode, 0); | 264 expect(exitCode, 0); |
264 }); | 265 }); |
265 | 266 |
| 267 test('Consume summaries', () async { |
| 268 await withTempDirAsync((tempDir) async { |
| 269 var aDart = path.join(tempDir, 'a.dart'); |
| 270 var bDart = path.join(tempDir, 'b.dart'); |
| 271 var cDart = path.join(tempDir, 'c.dart'); |
| 272 |
| 273 var aUri = 'package:aaa/a.dart'; |
| 274 var bUri = 'package:bbb/b.dart'; |
| 275 var cUri = 'package:ccc/c.dart'; |
| 276 |
| 277 var aSum = path.join(tempDir, 'a.sum'); |
| 278 var bSum = path.join(tempDir, 'b.sum'); |
| 279 var cSum = path.join(tempDir, 'c.sum'); |
| 280 |
| 281 new File(aDart).writeAsStringSync('class A {}'); |
| 282 new File(bDart).writeAsStringSync(''' |
| 283 export 'package:aaa/a.dart'; |
| 284 class B {} |
| 285 '''); |
| 286 new File(cDart).writeAsStringSync(''' |
| 287 import 'package:bbb/b.dart'; |
| 288 var a = new A(); |
| 289 var b = new B(); |
| 290 '''); |
| 291 |
| 292 // Analyze package:aaa/a.dart and compute summary. |
| 293 { |
| 294 await doDrive(aDart, |
| 295 uri: aUri, additionalArgs: ['--build-summary-output=$aSum']); |
| 296 expect(exitCode, 0); |
| 297 var bytes = new File(aSum).readAsBytesSync(); |
| 298 var bundle = new PackageBundle.fromBuffer(bytes); |
| 299 expect(bundle.unlinkedUnitUris, equals([aUri])); |
| 300 expect(bundle.linkedLibraryUris, equals([aUri])); |
| 301 } |
| 302 |
| 303 // Analyze package:bbb/b.dart and compute summary. |
| 304 { |
| 305 await doDrive(bDart, uri: bUri, additionalArgs: [ |
| 306 '--build-summary-input=$aSum', |
| 307 '--build-summary-output=$bSum' |
| 308 ]); |
| 309 expect(exitCode, 0); |
| 310 var bytes = new File(bSum).readAsBytesSync(); |
| 311 var bundle = new PackageBundle.fromBuffer(bytes); |
| 312 expect(bundle.unlinkedUnitUris, equals([bUri])); |
| 313 expect(bundle.linkedLibraryUris, equals([bUri])); |
| 314 } |
| 315 |
| 316 // Analyze package:ccc/c.dart and compute summary. |
| 317 { |
| 318 await doDrive(cDart, uri: cUri, additionalArgs: [ |
| 319 '--build-summary-input=$aSum,$bSum', |
| 320 '--build-summary-output=$cSum' |
| 321 ]); |
| 322 expect(exitCode, 0); |
| 323 var bytes = new File(cSum).readAsBytesSync(); |
| 324 var bundle = new PackageBundle.fromBuffer(bytes); |
| 325 expect(bundle.unlinkedUnitUris, equals([cUri])); |
| 326 expect(bundle.linkedLibraryUris, equals([cUri])); |
| 327 } |
| 328 }); |
| 329 }); |
| 330 |
| 331 test('Error - unlinked summary as linked', () async { |
| 332 await withTempDirAsync((tempDir) async { |
| 333 var aDart = path.join(tempDir, 'a.dart'); |
| 334 var bDart = path.join(tempDir, 'b.dart'); |
| 335 |
| 336 var aUri = 'package:aaa/a.dart'; |
| 337 var bUri = 'package:bbb/b.dart'; |
| 338 |
| 339 var aSum = path.join(tempDir, 'a.sum'); |
| 340 var bSum = path.join(tempDir, 'b.sum'); |
| 341 |
| 342 new File(aDart).writeAsStringSync('class A {}'); |
| 343 |
| 344 // Build unlinked a.sum |
| 345 await doDrive(aDart, uri: aUri, additionalArgs: [ |
| 346 '--build-summary-only', |
| 347 '--build-summary-only-unlinked', |
| 348 '--build-summary-output=$aSum' |
| 349 ]); |
| 350 expect(new File(aSum).existsSync(), isTrue); |
| 351 |
| 352 // Try to consume unlinked a.sum as linked. |
| 353 try { |
| 354 await doDrive(bDart, uri: bUri, additionalArgs: [ |
| 355 '--build-summary-input=$aSum', |
| 356 '--build-summary-output=$bSum' |
| 357 ]); |
| 358 fail('ArgumentError expected.'); |
| 359 } on ArgumentError catch (e) { |
| 360 expect(e.message, |
| 361 contains('Got an unlinked summary for --build-summary-input')); |
| 362 } |
| 363 }); |
| 364 }); |
| 365 |
| 366 test('Error - linked summary as unlinked', () async { |
| 367 await withTempDirAsync((tempDir) async { |
| 368 var aDart = path.join(tempDir, 'a.dart'); |
| 369 var bDart = path.join(tempDir, 'b.dart'); |
| 370 |
| 371 var aUri = 'package:aaa/a.dart'; |
| 372 var bUri = 'package:bbb/b.dart'; |
| 373 |
| 374 var aSum = path.join(tempDir, 'a.sum'); |
| 375 var bSum = path.join(tempDir, 'b.sum'); |
| 376 |
| 377 new File(aDart).writeAsStringSync('class A {}'); |
| 378 |
| 379 // Build linked a.sum |
| 380 await doDrive(aDart, uri: aUri, additionalArgs: [ |
| 381 '--build-summary-only', |
| 382 '--build-summary-output=$aSum' |
| 383 ]); |
| 384 expect(new File(aSum).existsSync(), isTrue); |
| 385 |
| 386 // Try to consume linked a.sum as unlinked. |
| 387 try { |
| 388 await doDrive(bDart, uri: bUri, additionalArgs: [ |
| 389 '--build-summary-unlinked-input=$aSum', |
| 390 '--build-summary-output=$bSum' |
| 391 ]); |
| 392 fail('ArgumentError expected.'); |
| 393 } on ArgumentError catch (e) { |
| 394 expect( |
| 395 e.message, |
| 396 contains( |
| 397 'Got a linked summary for --build-summary-input-unlinked')); |
| 398 } |
| 399 }); |
| 400 }); |
| 401 |
266 test('Linked summary', () async { | 402 test('Linked summary', () async { |
267 await withTempDirAsync((tempDir) async { | 403 await withTempDirAsync((tempDir) async { |
268 var outputPath = path.join(tempDir, 'test_file.dart.sum'); | 404 var outputPath = path.join(tempDir, 'test_file.dart.sum'); |
269 await doDrive(path.join('data', 'test_file.dart'), additionalArgs: [ | 405 await doDrive(path.join('data', 'test_file.dart'), additionalArgs: [ |
270 '--build-summary-only', | 406 '--build-summary-only', |
271 '--build-summary-output=$outputPath' | 407 '--build-summary-output=$outputPath' |
272 ]); | 408 ]); |
273 var output = new File(outputPath); | 409 var output = new File(outputPath); |
274 expect(output.existsSync(), isTrue); | 410 expect(output.existsSync(), isTrue); |
275 PackageBundle bundle = | 411 PackageBundle bundle = |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 }); | 759 }); |
624 }); | 760 }); |
625 } | 761 } |
626 | 762 |
627 class TestSource implements Source { | 763 class TestSource implements Source { |
628 TestSource(); | 764 TestSource(); |
629 | 765 |
630 @override | 766 @override |
631 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 767 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
632 } | 768 } |
OLD | NEW |