Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(234)

Side by Side Diff: pkg/analysis_server/test/source/optimizing_pub_package_map_provider_test.dart

Issue 1089453002: Avoid redundant calls to "pub list" when multiple dependencies change. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add missing source file. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/analysis_server/test/mocks.dart ('k') | pkg/analysis_server/test/source/test_all.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library test.source.optimizing_pub_package_map_provider;
6
7 import 'dart:convert';
8 import 'dart:io' as io;
9
10 import 'package:analysis_server/src/source/optimizing_pub_package_map_provider.d art';
11 import 'package:analyzer/file_system/file_system.dart';
12 import 'package:analyzer/file_system/memory_file_system.dart';
13 import 'package:path/path.dart';
14 import 'package:unittest/unittest.dart';
15
16 import '../reflective_tests.dart';
17
18 main() {
19 groupSep = ' | ';
20 runReflectiveTests(OptimizingPubPackageMapProviderTest);
21 runReflectiveTests(OptimizingPubPackageMapInfoTest);
22 }
23
24 @reflectiveTest
25 class OptimizingPubPackageMapInfoTest {
26 MemoryResourceProvider resourceProvider;
27
28 int createFile(String path) {
29 return resourceProvider.newFile(path, 'contents').modificationStamp;
30 }
31
32 void createFolder(String path) {
33 resourceProvider.newFolder(path);
34 }
35
36 void modifyFile(String path) {
37 resourceProvider.modifyFile(path, 'contents');
38 }
39
40 void setUp() {
41 resourceProvider = new MemoryResourceProvider();
42 }
43
44 test_isChangedDependency_fileNotPresent() {
45 String path = '/dep';
46 int timestamp = 1;
47 OptimizingPubPackageMapInfo info =
48 new OptimizingPubPackageMapInfo({}, [path].toSet(), {path: timestamp});
49 expect(info.isChangedDependency(path, resourceProvider), isTrue);
50 }
51
52 test_isChangedDependency_matchingTimestamp() {
53 String path = '/dep';
54 int timestamp = createFile(path);
55 OptimizingPubPackageMapInfo info =
56 new OptimizingPubPackageMapInfo({}, [path].toSet(), {path: timestamp});
57 expect(info.isChangedDependency(path, resourceProvider), isFalse);
58 }
59
60 test_isChangedDependency_mismatchedTimestamp() {
61 String path = '/dep';
62 int timestamp = createFile(path);
63 OptimizingPubPackageMapInfo info =
64 new OptimizingPubPackageMapInfo({}, [path].toSet(), {path: timestamp});
65 modifyFile(path);
66 expect(info.isChangedDependency(path, resourceProvider), isTrue);
67 }
68
69 test_isChangedDependency_nonDependency() {
70 OptimizingPubPackageMapInfo info =
71 new OptimizingPubPackageMapInfo({}, ['/dep1'].toSet(), {});
72 expect(info.isChangedDependency('/dep2', resourceProvider), isFalse);
73 }
74
75 test_isChangedDependency_nonFile() {
76 String path = '/dep';
77 int timestamp = 1;
78 createFolder(path);
79 OptimizingPubPackageMapInfo info =
80 new OptimizingPubPackageMapInfo({}, [path].toSet(), {path: timestamp});
81 expect(info.isChangedDependency(path, resourceProvider), isTrue);
82 }
83
84 test_isChangedDependency_noTimestampInfo() {
85 String path = '/dep';
86 OptimizingPubPackageMapInfo info =
87 new OptimizingPubPackageMapInfo({}, [path].toSet(), {});
88 expect(info.isChangedDependency(path, resourceProvider), isTrue);
89 }
90 }
91
92 @reflectiveTest
93 class OptimizingPubPackageMapProviderTest {
94 MemoryResourceProvider resourceProvider;
95 OptimizingPubPackageMapProvider provider;
96 Folder projectFolder;
97 io.ProcessResult pubListResult;
98
99 void setPubListError() {
100 pubListResult = new io.ProcessResult(0, 1, '', 'ERROR');
101 }
102
103 void setPubListResult({Map<String, String> packages: const {},
104 List<String> input_files: const []}) {
105 pubListResult = new io.ProcessResult(0, 0,
106 JSON.encode({'packages': packages, 'input_files': input_files}), '');
107 }
108
109 void setUp() {
110 resourceProvider = new MemoryResourceProvider();
111 provider = new OptimizingPubPackageMapProvider(
112 resourceProvider, null, _runPubList);
113 projectFolder = resourceProvider.newFolder('/my/proj');
114 }
115
116 test_computePackageMap_noPreviousInfo() {
117 String dep = posix.join(projectFolder.path, 'dep');
118 String pkgName = 'foo';
119 String pkgPath = '/pkg/foo';
120 setPubListResult(packages: {pkgName: pkgPath}, input_files: [dep]);
121 OptimizingPubPackageMapInfo info =
122 provider.computePackageMap(projectFolder);
123 expect(info.dependencies, hasLength(1));
124 expect(info.dependencies, contains(dep));
125 expect(info.packageMap, hasLength(1));
126 expect(info.packageMap, contains(pkgName));
127 expect(info.packageMap[pkgName], hasLength(1));
128 expect(info.packageMap[pkgName][0].path, pkgPath);
129 expect(info.modificationTimes, isEmpty);
130 }
131
132 test_computePackageMap_noPreviousInfo_pubListError() {
133 String pubspecLock = posix.join(projectFolder.path, 'pubspec.lock');
134 String pkgName = 'foo';
135 String pkgPath = '/pkg/foo';
136 setPubListError();
137 OptimizingPubPackageMapInfo info =
138 provider.computePackageMap(projectFolder);
139 expect(info.dependencies, hasLength(1));
140 expect(info.dependencies, contains(pubspecLock));
141 expect(info.packageMap, isNull);
142 expect(info.modificationTimes, isEmpty);
143 }
144
145 test_computePackageMap_withPreviousInfo() {
146 String dep = posix.join(projectFolder.path, 'dep');
147 int timestamp = resourceProvider.newFile(dep, 'contents').modificationStamp;
148 setPubListResult(input_files: [dep]);
149 OptimizingPubPackageMapInfo info1 =
150 provider.computePackageMap(projectFolder);
151 OptimizingPubPackageMapInfo info2 =
152 provider.computePackageMap(projectFolder, info1);
153 expect(info2.dependencies, hasLength(1));
154 expect(info2.dependencies, contains(dep));
155 expect(info2.modificationTimes, hasLength(1));
156 expect(info2.modificationTimes, contains(dep));
157 expect(info2.modificationTimes[dep], timestamp);
158 }
159
160 test_computePackageMap_withPreviousInfo_newDependency() {
161 String dep = posix.join(projectFolder.path, 'dep');
162 resourceProvider.newFile(dep, 'contents').modificationStamp;
163 setPubListResult(input_files: []);
164 OptimizingPubPackageMapInfo info1 =
165 provider.computePackageMap(projectFolder);
166 setPubListResult(input_files: [dep]);
167 OptimizingPubPackageMapInfo info2 =
168 provider.computePackageMap(projectFolder, info1);
169 expect(info2.modificationTimes, isEmpty);
170 }
171
172 test_computePackageMap_withPreviousInfo_oldDependencyNoLongerAFile() {
173 String dep = posix.join(projectFolder.path, 'dep');
174 resourceProvider.newFile(dep, 'contents').modificationStamp;
175 setPubListResult(input_files: [dep]);
176 OptimizingPubPackageMapInfo info1 =
177 provider.computePackageMap(projectFolder);
178 resourceProvider.deleteFile(dep);
179 resourceProvider.newFolder(dep);
180 OptimizingPubPackageMapInfo info2 =
181 provider.computePackageMap(projectFolder, info1);
182 expect(info2.modificationTimes, isEmpty);
183 }
184
185 test_computePackageMap_withPreviousInfo_oldDependencyNoLongerPresent() {
186 String dep = posix.join(projectFolder.path, 'dep');
187 resourceProvider.newFile(dep, 'contents').modificationStamp;
188 setPubListResult(input_files: [dep]);
189 OptimizingPubPackageMapInfo info1 =
190 provider.computePackageMap(projectFolder);
191 resourceProvider.deleteFile(dep);
192 OptimizingPubPackageMapInfo info2 =
193 provider.computePackageMap(projectFolder, info1);
194 expect(info2.modificationTimes, isEmpty);
195 }
196
197 test_computePackageMap_withPreviousInfo_oldDependencyNoLongerRelevant() {
198 String dep = posix.join(projectFolder.path, 'dep');
199 resourceProvider.newFile(dep, 'contents').modificationStamp;
200 setPubListResult(input_files: [dep]);
201 OptimizingPubPackageMapInfo info1 =
202 provider.computePackageMap(projectFolder);
203 setPubListResult(input_files: []);
204 OptimizingPubPackageMapInfo info2 =
205 provider.computePackageMap(projectFolder, info1);
206 expect(info2.modificationTimes, isEmpty);
207 }
208
209 test_computePackageMap_withPreviousInfo_pubListError() {
210 String dep = posix.join(projectFolder.path, 'dep');
211 String pubspecLock = posix.join(projectFolder.path, 'pubspec.lock');
212 int timestamp = resourceProvider.newFile(dep, 'contents').modificationStamp;
213 setPubListResult(input_files: [dep]);
214 OptimizingPubPackageMapInfo info1 =
215 provider.computePackageMap(projectFolder);
216 setPubListError();
217 OptimizingPubPackageMapInfo info2 =
218 provider.computePackageMap(projectFolder, info1);
219 expect(info2.dependencies, hasLength(2));
220 expect(info2.dependencies, contains(dep));
221 expect(info2.dependencies, contains(pubspecLock));
222 expect(info2.modificationTimes, hasLength(1));
223 expect(info2.modificationTimes, contains(dep));
224 expect(info2.modificationTimes[dep], timestamp);
225 }
226
227 io.ProcessResult _runPubList(Folder folder) {
228 expect(folder, projectFolder);
229 return pubListResult;
230 }
231 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/test/mocks.dart ('k') | pkg/analysis_server/test/source/test_all.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698