| Index: pkg/analysis_server/test/source/optimizing_pub_package_map_provider_test.dart
|
| diff --git a/pkg/analysis_server/test/source/optimizing_pub_package_map_provider_test.dart b/pkg/analysis_server/test/source/optimizing_pub_package_map_provider_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c604130d98ee63dec332983218ef5db3da9fb008
|
| --- /dev/null
|
| +++ b/pkg/analysis_server/test/source/optimizing_pub_package_map_provider_test.dart
|
| @@ -0,0 +1,231 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library test.source.optimizing_pub_package_map_provider;
|
| +
|
| +import 'dart:convert';
|
| +import 'dart:io' as io;
|
| +
|
| +import 'package:analysis_server/src/source/optimizing_pub_package_map_provider.dart';
|
| +import 'package:analyzer/file_system/file_system.dart';
|
| +import 'package:analyzer/file_system/memory_file_system.dart';
|
| +import 'package:path/path.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +
|
| +import '../reflective_tests.dart';
|
| +
|
| +main() {
|
| + groupSep = ' | ';
|
| + runReflectiveTests(OptimizingPubPackageMapProviderTest);
|
| + runReflectiveTests(OptimizingPubPackageMapInfoTest);
|
| +}
|
| +
|
| +@reflectiveTest
|
| +class OptimizingPubPackageMapInfoTest {
|
| + MemoryResourceProvider resourceProvider;
|
| +
|
| + int createFile(String path) {
|
| + return resourceProvider.newFile(path, 'contents').modificationStamp;
|
| + }
|
| +
|
| + void createFolder(String path) {
|
| + resourceProvider.newFolder(path);
|
| + }
|
| +
|
| + void modifyFile(String path) {
|
| + resourceProvider.modifyFile(path, 'contents');
|
| + }
|
| +
|
| + void setUp() {
|
| + resourceProvider = new MemoryResourceProvider();
|
| + }
|
| +
|
| + test_isChangedDependency_fileNotPresent() {
|
| + String path = '/dep';
|
| + int timestamp = 1;
|
| + OptimizingPubPackageMapInfo info =
|
| + new OptimizingPubPackageMapInfo({}, [path].toSet(), {path: timestamp});
|
| + expect(info.isChangedDependency(path, resourceProvider), isTrue);
|
| + }
|
| +
|
| + test_isChangedDependency_matchingTimestamp() {
|
| + String path = '/dep';
|
| + int timestamp = createFile(path);
|
| + OptimizingPubPackageMapInfo info =
|
| + new OptimizingPubPackageMapInfo({}, [path].toSet(), {path: timestamp});
|
| + expect(info.isChangedDependency(path, resourceProvider), isFalse);
|
| + }
|
| +
|
| + test_isChangedDependency_mismatchedTimestamp() {
|
| + String path = '/dep';
|
| + int timestamp = createFile(path);
|
| + OptimizingPubPackageMapInfo info =
|
| + new OptimizingPubPackageMapInfo({}, [path].toSet(), {path: timestamp});
|
| + modifyFile(path);
|
| + expect(info.isChangedDependency(path, resourceProvider), isTrue);
|
| + }
|
| +
|
| + test_isChangedDependency_nonDependency() {
|
| + OptimizingPubPackageMapInfo info =
|
| + new OptimizingPubPackageMapInfo({}, ['/dep1'].toSet(), {});
|
| + expect(info.isChangedDependency('/dep2', resourceProvider), isFalse);
|
| + }
|
| +
|
| + test_isChangedDependency_nonFile() {
|
| + String path = '/dep';
|
| + int timestamp = 1;
|
| + createFolder(path);
|
| + OptimizingPubPackageMapInfo info =
|
| + new OptimizingPubPackageMapInfo({}, [path].toSet(), {path: timestamp});
|
| + expect(info.isChangedDependency(path, resourceProvider), isTrue);
|
| + }
|
| +
|
| + test_isChangedDependency_noTimestampInfo() {
|
| + String path = '/dep';
|
| + OptimizingPubPackageMapInfo info =
|
| + new OptimizingPubPackageMapInfo({}, [path].toSet(), {});
|
| + expect(info.isChangedDependency(path, resourceProvider), isTrue);
|
| + }
|
| +}
|
| +
|
| +@reflectiveTest
|
| +class OptimizingPubPackageMapProviderTest {
|
| + MemoryResourceProvider resourceProvider;
|
| + OptimizingPubPackageMapProvider provider;
|
| + Folder projectFolder;
|
| + io.ProcessResult pubListResult;
|
| +
|
| + void setPubListError() {
|
| + pubListResult = new io.ProcessResult(0, 1, '', 'ERROR');
|
| + }
|
| +
|
| + void setPubListResult({Map<String, String> packages: const {},
|
| + List<String> input_files: const []}) {
|
| + pubListResult = new io.ProcessResult(0, 0,
|
| + JSON.encode({'packages': packages, 'input_files': input_files}), '');
|
| + }
|
| +
|
| + void setUp() {
|
| + resourceProvider = new MemoryResourceProvider();
|
| + provider = new OptimizingPubPackageMapProvider(
|
| + resourceProvider, null, _runPubList);
|
| + projectFolder = resourceProvider.newFolder('/my/proj');
|
| + }
|
| +
|
| + test_computePackageMap_noPreviousInfo() {
|
| + String dep = posix.join(projectFolder.path, 'dep');
|
| + String pkgName = 'foo';
|
| + String pkgPath = '/pkg/foo';
|
| + setPubListResult(packages: {pkgName: pkgPath}, input_files: [dep]);
|
| + OptimizingPubPackageMapInfo info =
|
| + provider.computePackageMap(projectFolder);
|
| + expect(info.dependencies, hasLength(1));
|
| + expect(info.dependencies, contains(dep));
|
| + expect(info.packageMap, hasLength(1));
|
| + expect(info.packageMap, contains(pkgName));
|
| + expect(info.packageMap[pkgName], hasLength(1));
|
| + expect(info.packageMap[pkgName][0].path, pkgPath);
|
| + expect(info.modificationTimes, isEmpty);
|
| + }
|
| +
|
| + test_computePackageMap_noPreviousInfo_pubListError() {
|
| + String pubspecLock = posix.join(projectFolder.path, 'pubspec.lock');
|
| + String pkgName = 'foo';
|
| + String pkgPath = '/pkg/foo';
|
| + setPubListError();
|
| + OptimizingPubPackageMapInfo info =
|
| + provider.computePackageMap(projectFolder);
|
| + expect(info.dependencies, hasLength(1));
|
| + expect(info.dependencies, contains(pubspecLock));
|
| + expect(info.packageMap, isNull);
|
| + expect(info.modificationTimes, isEmpty);
|
| + }
|
| +
|
| + test_computePackageMap_withPreviousInfo() {
|
| + String dep = posix.join(projectFolder.path, 'dep');
|
| + int timestamp = resourceProvider.newFile(dep, 'contents').modificationStamp;
|
| + setPubListResult(input_files: [dep]);
|
| + OptimizingPubPackageMapInfo info1 =
|
| + provider.computePackageMap(projectFolder);
|
| + OptimizingPubPackageMapInfo info2 =
|
| + provider.computePackageMap(projectFolder, info1);
|
| + expect(info2.dependencies, hasLength(1));
|
| + expect(info2.dependencies, contains(dep));
|
| + expect(info2.modificationTimes, hasLength(1));
|
| + expect(info2.modificationTimes, contains(dep));
|
| + expect(info2.modificationTimes[dep], timestamp);
|
| + }
|
| +
|
| + test_computePackageMap_withPreviousInfo_newDependency() {
|
| + String dep = posix.join(projectFolder.path, 'dep');
|
| + resourceProvider.newFile(dep, 'contents').modificationStamp;
|
| + setPubListResult(input_files: []);
|
| + OptimizingPubPackageMapInfo info1 =
|
| + provider.computePackageMap(projectFolder);
|
| + setPubListResult(input_files: [dep]);
|
| + OptimizingPubPackageMapInfo info2 =
|
| + provider.computePackageMap(projectFolder, info1);
|
| + expect(info2.modificationTimes, isEmpty);
|
| + }
|
| +
|
| + test_computePackageMap_withPreviousInfo_oldDependencyNoLongerAFile() {
|
| + String dep = posix.join(projectFolder.path, 'dep');
|
| + resourceProvider.newFile(dep, 'contents').modificationStamp;
|
| + setPubListResult(input_files: [dep]);
|
| + OptimizingPubPackageMapInfo info1 =
|
| + provider.computePackageMap(projectFolder);
|
| + resourceProvider.deleteFile(dep);
|
| + resourceProvider.newFolder(dep);
|
| + OptimizingPubPackageMapInfo info2 =
|
| + provider.computePackageMap(projectFolder, info1);
|
| + expect(info2.modificationTimes, isEmpty);
|
| + }
|
| +
|
| + test_computePackageMap_withPreviousInfo_oldDependencyNoLongerPresent() {
|
| + String dep = posix.join(projectFolder.path, 'dep');
|
| + resourceProvider.newFile(dep, 'contents').modificationStamp;
|
| + setPubListResult(input_files: [dep]);
|
| + OptimizingPubPackageMapInfo info1 =
|
| + provider.computePackageMap(projectFolder);
|
| + resourceProvider.deleteFile(dep);
|
| + OptimizingPubPackageMapInfo info2 =
|
| + provider.computePackageMap(projectFolder, info1);
|
| + expect(info2.modificationTimes, isEmpty);
|
| + }
|
| +
|
| + test_computePackageMap_withPreviousInfo_oldDependencyNoLongerRelevant() {
|
| + String dep = posix.join(projectFolder.path, 'dep');
|
| + resourceProvider.newFile(dep, 'contents').modificationStamp;
|
| + setPubListResult(input_files: [dep]);
|
| + OptimizingPubPackageMapInfo info1 =
|
| + provider.computePackageMap(projectFolder);
|
| + setPubListResult(input_files: []);
|
| + OptimizingPubPackageMapInfo info2 =
|
| + provider.computePackageMap(projectFolder, info1);
|
| + expect(info2.modificationTimes, isEmpty);
|
| + }
|
| +
|
| + test_computePackageMap_withPreviousInfo_pubListError() {
|
| + String dep = posix.join(projectFolder.path, 'dep');
|
| + String pubspecLock = posix.join(projectFolder.path, 'pubspec.lock');
|
| + int timestamp = resourceProvider.newFile(dep, 'contents').modificationStamp;
|
| + setPubListResult(input_files: [dep]);
|
| + OptimizingPubPackageMapInfo info1 =
|
| + provider.computePackageMap(projectFolder);
|
| + setPubListError();
|
| + OptimizingPubPackageMapInfo info2 =
|
| + provider.computePackageMap(projectFolder, info1);
|
| + expect(info2.dependencies, hasLength(2));
|
| + expect(info2.dependencies, contains(dep));
|
| + expect(info2.dependencies, contains(pubspecLock));
|
| + expect(info2.modificationTimes, hasLength(1));
|
| + expect(info2.modificationTimes, contains(dep));
|
| + expect(info2.modificationTimes[dep], timestamp);
|
| + }
|
| +
|
| + io.ProcessResult _runPubList(Folder folder) {
|
| + expect(folder, projectFolder);
|
| + return pubListResult;
|
| + }
|
| +}
|
|
|