| 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 d254d0b1c6b97b90403cf1b952e330f6e7ed8728..2d09e033dfbf1aa6c8acf1e1bec9e3e8a9f75212 100644
|
| --- a/pkg/analyzer_cli/test/driver_test.dart
|
| +++ b/pkg/analyzer_cli/test/driver_test.dart
|
| @@ -112,6 +112,98 @@ class BuildModeTest extends BaseTest {
|
| });
|
| }
|
|
|
| + test_buildLinked_buildSummaryOutputSemantic() async {
|
| + await withTempDirAsync((tempDir) async {
|
| + var testDart = path.join(tempDir, 'test.dart');
|
| + var testSumFull = path.join(tempDir, 'test.sum.full');
|
| + var testSumSemantic = path.join(tempDir, 'test.sum.sem');
|
| +
|
| + new File(testDart).writeAsStringSync('var v = 42;');
|
| +
|
| + await _doDrive(testDart, additionalArgs: [
|
| + '--build-summary-only',
|
| + '--build-summary-output=$testSumFull',
|
| + '--build-summary-output-semantic=$testSumSemantic',
|
| + ]);
|
| + expect(exitCode, 0);
|
| +
|
| + // The full summary is produced.
|
| + {
|
| + var file = new File(testSumFull);
|
| + expect(file.existsSync(), isTrue);
|
| + var bytes = file.readAsBytesSync();
|
| + var bundle = new PackageBundle.fromBuffer(bytes);
|
| + var v = bundle.unlinkedUnits[0].variables[0];
|
| + expect(v.name, 'v');
|
| + expect(v.nameOffset, 4);
|
| + }
|
| +
|
| + // The semantic summary is produced.
|
| + {
|
| + var file = new File(testSumSemantic);
|
| + expect(file.existsSync(), isTrue);
|
| + var bytes = file.readAsBytesSync();
|
| + var bundle = new PackageBundle.fromBuffer(bytes);
|
| + var v = bundle.unlinkedUnits[0].variables[0];
|
| + expect(v.name, 'v');
|
| + expect(v.nameOffset, 0);
|
| + }
|
| + });
|
| + }
|
| +
|
| + test_buildLinked_fromUnlinked() 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 aUnlinked = path.join(tempDir, 'a.unlinked');
|
| + var bUnlinked = path.join(tempDir, 'b.unlinked');
|
| + var abLinked = path.join(tempDir, 'ab.linked');
|
| +
|
| + new File(aDart).writeAsStringSync('var a = 1;');
|
| + new File(bDart).writeAsStringSync('''
|
| +import 'package:aaa/a.dart';
|
| +var b = a;
|
| +''');
|
| +
|
| + Future<Null> buildUnlinked(String uri, String path, String output) async {
|
| + await _doDrive(path, uri: uri, additionalArgs: [
|
| + '--build-summary-only',
|
| + '--build-summary-only-unlinked',
|
| + '--build-summary-output=$output'
|
| + ]);
|
| + expect(exitCode, 0);
|
| + expect(new File(output).existsSync(), isTrue);
|
| + }
|
| +
|
| + await buildUnlinked(aUri, aDart, aUnlinked);
|
| + await buildUnlinked(bUri, bDart, bUnlinked);
|
| +
|
| + await new Driver(isTesting: true).start([
|
| + '--dart-sdk',
|
| + _findSdkDirForSummaries(),
|
| + '--strong',
|
| + '--build-mode',
|
| + '--build-summary-unlinked-input=$aUnlinked,$bUnlinked',
|
| + '--build-summary-output=$abLinked'
|
| + ]);
|
| + expect(exitCode, 0);
|
| + var bytes = new File(abLinked).readAsBytesSync();
|
| + var bundle = new PackageBundle.fromBuffer(bytes);
|
| +
|
| + // Only linked information.
|
| + expect(bundle.unlinkedUnitUris, isEmpty);
|
| + expect(bundle.linkedLibraryUris, unorderedEquals([aUri, bUri]));
|
| +
|
| + // Strong mode type inference was performed.
|
| + expect(bundle.linkedLibraries[0].units[0].types, isNotEmpty);
|
| + expect(bundle.linkedLibraries[1].units[0].types, isNotEmpty);
|
| + });
|
| + }
|
| +
|
| test_buildSuppressExitCode_fail_whenFileNotFound() async {
|
| await _doDrive(path.join('data', 'non_existent_file.dart'),
|
| additionalArgs: ['--build-suppress-exit-code']);
|
| @@ -208,6 +300,29 @@ var b = new B();
|
| });
|
| }
|
|
|
| + test_dartSdkSummaryPath_strong() async {
|
| + await withTempDirAsync((tempDir) async {
|
| + String sdkPath = _findSdkDirForSummaries();
|
| + String strongSummaryPath =
|
| + path.join(sdkPath, 'lib', '_internal', 'strong.sum');
|
| +
|
| + var testDart = path.join(tempDir, 'test.dart');
|
| + var testSum = path.join(tempDir, 'test.sum');
|
| + new File(testDart).writeAsStringSync('var v = 42;');
|
| +
|
| + await _doDrive(testDart,
|
| + additionalArgs: [
|
| + '--strong',
|
| + '--build-summary-only',
|
| + '--build-summary-output=$testSum'
|
| + ],
|
| + dartSdkSummaryPath: strongSummaryPath);
|
| + var output = new File(testSum);
|
| + expect(output.existsSync(), isTrue);
|
| + expect(exitCode, 0);
|
| + });
|
| + }
|
| +
|
| test_error_linkedAsUnlinked() async {
|
| await withTempDirAsync((tempDir) async {
|
| var aDart = path.join(tempDir, 'a.dart');
|
| @@ -244,6 +359,17 @@ var b = new B();
|
| });
|
| }
|
|
|
| + test_error_notUriPipePath() async {
|
| + await withTempDirAsync((tempDir) async {
|
| + var testDart = path.join(tempDir, 'test.dart');
|
| + new File(testDart).writeAsStringSync('var v = 42;');
|
| +
|
| + // We pass just path, not "uri|path", this is a fatal error.
|
| + await drive(testDart, args: ['--build-mode', '--format=machine']);
|
| + expect(exitCode, ErrorSeverity.ERROR.ordinal);
|
| + });
|
| + }
|
| +
|
| test_error_unlinkedAsLinked() async {
|
| await withTempDirAsync((tempDir) async {
|
| var aDart = path.join(tempDir, 'a.dart');
|
| @@ -293,17 +419,29 @@ var b = new B();
|
| }
|
|
|
| Future<Null> _doDrive(String path,
|
| - {String uri, List<String> additionalArgs: const []}) async {
|
| - uri ??= 'file:///test_file.dart';
|
| + {String uri,
|
| + List<String> additionalArgs: const [],
|
| + String dartSdkSummaryPath}) async {
|
| var optionsFileName = AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE;
|
| - await drive('$uri|$path',
|
| - args: [
|
| - '--dart-sdk',
|
| - _findSdkDirForSummaries(),
|
| - '--build-mode',
|
| - '--format=machine'
|
| - ]..addAll(additionalArgs),
|
| - options: 'data/options_tests_project/$optionsFileName');
|
| +
|
| + List<String> args = <String>[];
|
| + if (dartSdkSummaryPath != null) {
|
| + args.add('--dart-sdk-summary');
|
| + args.add(dartSdkSummaryPath);
|
| + } else {
|
| + String sdkPath = _findSdkDirForSummaries();
|
| + args.add('--dart-sdk');
|
| + args.add(sdkPath);
|
| + }
|
| + args.add('--build-mode');
|
| + args.add('--format=machine');
|
| + args.addAll(additionalArgs);
|
| +
|
| + uri ??= 'file:///test_file.dart';
|
| + String source = '$uri|$path';
|
| +
|
| + await drive(source,
|
| + args: args, options: 'data/options_tests_project/$optionsFileName');
|
| }
|
|
|
| /// Try to find a appropriate directory to pass to "--dart-sdk" that will
|
|
|