| Index: pkg/analyzer_cli/test/driver_test.dart
|
| diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
|
| index 1a49153a5f68962f600805bc3ad14db3bed7c87f..ceac0aad30967ae4632eb65f0ed301b946ebb092 100644
|
| --- a/pkg/analyzer_cli/test/driver_test.dart
|
| +++ b/pkg/analyzer_cli/test/driver_test.dart
|
| @@ -222,9 +222,10 @@ void _test_buildMode() {
|
| void createTests(String designator, String optionsFileName) {
|
| group('build-mode - $designator', () {
|
| // Shared driver command.
|
| - Future<Null> doDrive(String filePath,
|
| - {List<String> additionalArgs: const []}) async {
|
| - await drive('file:///test_file.dart|$filePath',
|
| + Future<Null> doDrive(String path,
|
| + {String uri, List<String> additionalArgs: const []}) async {
|
| + uri ??= 'file:///test_file.dart';
|
| + await drive('$uri|$path',
|
| args: [
|
| '--dart-sdk',
|
| findSdkDirForSummaries(),
|
| @@ -263,6 +264,141 @@ void _test_buildMode() {
|
| expect(exitCode, 0);
|
| });
|
|
|
| + test('Consume summaries', () async {
|
| + await withTempDirAsync((tempDir) async {
|
| + var aDart = path.join(tempDir, 'a.dart');
|
| + var bDart = path.join(tempDir, 'b.dart');
|
| + var cDart = path.join(tempDir, 'c.dart');
|
| +
|
| + var aUri = 'package:aaa/a.dart';
|
| + var bUri = 'package:bbb/b.dart';
|
| + var cUri = 'package:ccc/c.dart';
|
| +
|
| + var aSum = path.join(tempDir, 'a.sum');
|
| + var bSum = path.join(tempDir, 'b.sum');
|
| + var cSum = path.join(tempDir, 'c.sum');
|
| +
|
| + new File(aDart).writeAsStringSync('class A {}');
|
| + new File(bDart).writeAsStringSync('''
|
| +export 'package:aaa/a.dart';
|
| +class B {}
|
| +''');
|
| + new File(cDart).writeAsStringSync('''
|
| +import 'package:bbb/b.dart';
|
| +var a = new A();
|
| +var b = new B();
|
| +''');
|
| +
|
| + // Analyze package:aaa/a.dart and compute summary.
|
| + {
|
| + await doDrive(aDart,
|
| + uri: aUri, additionalArgs: ['--build-summary-output=$aSum']);
|
| + expect(exitCode, 0);
|
| + var bytes = new File(aSum).readAsBytesSync();
|
| + var bundle = new PackageBundle.fromBuffer(bytes);
|
| + expect(bundle.unlinkedUnitUris, equals([aUri]));
|
| + expect(bundle.linkedLibraryUris, equals([aUri]));
|
| + }
|
| +
|
| + // Analyze package:bbb/b.dart and compute summary.
|
| + {
|
| + await doDrive(bDart, uri: bUri, additionalArgs: [
|
| + '--build-summary-input=$aSum',
|
| + '--build-summary-output=$bSum'
|
| + ]);
|
| + expect(exitCode, 0);
|
| + var bytes = new File(bSum).readAsBytesSync();
|
| + var bundle = new PackageBundle.fromBuffer(bytes);
|
| + expect(bundle.unlinkedUnitUris, equals([bUri]));
|
| + expect(bundle.linkedLibraryUris, equals([bUri]));
|
| + }
|
| +
|
| + // Analyze package:ccc/c.dart and compute summary.
|
| + {
|
| + await doDrive(cDart, uri: cUri, additionalArgs: [
|
| + '--build-summary-input=$aSum,$bSum',
|
| + '--build-summary-output=$cSum'
|
| + ]);
|
| + expect(exitCode, 0);
|
| + var bytes = new File(cSum).readAsBytesSync();
|
| + var bundle = new PackageBundle.fromBuffer(bytes);
|
| + expect(bundle.unlinkedUnitUris, equals([cUri]));
|
| + expect(bundle.linkedLibraryUris, equals([cUri]));
|
| + }
|
| + });
|
| + });
|
| +
|
| + test('Error - unlinked summary as linked', () async {
|
| + await withTempDirAsync((tempDir) async {
|
| + var aDart = path.join(tempDir, 'a.dart');
|
| + var bDart = path.join(tempDir, 'b.dart');
|
| +
|
| + var aUri = 'package:aaa/a.dart';
|
| + var bUri = 'package:bbb/b.dart';
|
| +
|
| + var aSum = path.join(tempDir, 'a.sum');
|
| + var bSum = path.join(tempDir, 'b.sum');
|
| +
|
| + new File(aDart).writeAsStringSync('class A {}');
|
| +
|
| + // Build unlinked a.sum
|
| + await doDrive(aDart, uri: aUri, additionalArgs: [
|
| + '--build-summary-only',
|
| + '--build-summary-only-unlinked',
|
| + '--build-summary-output=$aSum'
|
| + ]);
|
| + expect(new File(aSum).existsSync(), isTrue);
|
| +
|
| + // Try to consume unlinked a.sum as linked.
|
| + try {
|
| + await doDrive(bDart, uri: bUri, additionalArgs: [
|
| + '--build-summary-input=$aSum',
|
| + '--build-summary-output=$bSum'
|
| + ]);
|
| + fail('ArgumentError expected.');
|
| + } on ArgumentError catch (e) {
|
| + expect(e.message,
|
| + contains('Got an unlinked summary for --build-summary-input'));
|
| + }
|
| + });
|
| + });
|
| +
|
| + test('Error - linked summary as unlinked', () async {
|
| + await withTempDirAsync((tempDir) async {
|
| + var aDart = path.join(tempDir, 'a.dart');
|
| + var bDart = path.join(tempDir, 'b.dart');
|
| +
|
| + var aUri = 'package:aaa/a.dart';
|
| + var bUri = 'package:bbb/b.dart';
|
| +
|
| + var aSum = path.join(tempDir, 'a.sum');
|
| + var bSum = path.join(tempDir, 'b.sum');
|
| +
|
| + new File(aDart).writeAsStringSync('class A {}');
|
| +
|
| + // Build linked a.sum
|
| + await doDrive(aDart, uri: aUri, additionalArgs: [
|
| + '--build-summary-only',
|
| + '--build-summary-output=$aSum'
|
| + ]);
|
| + expect(new File(aSum).existsSync(), isTrue);
|
| +
|
| + // Try to consume linked a.sum as unlinked.
|
| + try {
|
| + await doDrive(bDart, uri: bUri, additionalArgs: [
|
| + '--build-summary-unlinked-input=$aSum',
|
| + '--build-summary-output=$bSum'
|
| + ]);
|
| + fail('ArgumentError expected.');
|
| + } on ArgumentError catch (e) {
|
| + expect(
|
| + e.message,
|
| + contains(
|
| + 'Got a linked summary for --build-summary-input-unlinked'));
|
| + }
|
| + });
|
| + });
|
| +
|
| test('Linked summary', () async {
|
| await withTempDirAsync((tempDir) async {
|
| var outputPath = path.join(tempDir, 'test_file.dart.sum');
|
|
|