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

Side by Side Diff: pkg/analyzer/test/generated/package_test.dart

Issue 2237893002: Prototype for package-specific cache partitions (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Address comments and add a test Created 4 years, 4 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
« no previous file with comments | « pkg/analyzer/lib/src/generated/package.dart ('k') | no next file » | 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) 2016, 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 analyzer.test.generated.package_test;
6
7 import 'package:analyzer/file_system/file_system.dart';
8 import 'package:analyzer/file_system/memory_file_system.dart';
9 import 'package:analyzer/src/generated/engine.dart';
10 import 'package:analyzer/src/generated/package.dart';
11 import 'package:analyzer/src/generated/sdk.dart';
12 import 'package:analyzer/src/generated/source.dart';
13 import 'package:package_config/packages.dart';
14 import 'package:unittest/unittest.dart';
15
16 import '../reflective_tests.dart';
17 import '../src/context/mock_sdk.dart';
18 import '../utils.dart';
19 import 'resolver_test_case.dart';
20
21 main() {
22 initializeTestEnvironment();
23 runReflectiveTests(DependencyFinderTest);
24 runReflectiveTests(PackageDescriptionTest);
25 runReflectiveTests(PackageManagerTest);
26 }
27
28 /**
29 * The name of the pubspec.yaml file.
30 */
31 const String pubspecName = 'pubspec.yaml';
32
33 @reflectiveTest
34 class DependencyFinderTest extends ResolverTestCase {
35 /**
36 * The resource provider to be used by tests.
37 */
38 MemoryResourceProvider resourceProvider;
39
40 @override
41 void setUp() {
42 resourceProvider = new MemoryResourceProvider();
43 }
44
45 void test_transitiveDependenciesFor_circularDependencies() {
46 String packageA = '/pub-cache/a-1.0';
47 String packageB = '/pub-cache/b-1.0';
48 String packageC = '/pub-cache/c-1.0';
49 resourceProvider.newFile(
50 '$packageA/$pubspecName',
51 '''
52 dependencies:
53 b: any
54 ''');
55 resourceProvider.newFile(
56 '$packageB/$pubspecName',
57 '''
58 dependencies:
59 c: any
60 ''');
61 resourceProvider.newFile(
62 '$packageC/$pubspecName',
63 '''
64 dependencies:
65 a: any
66 ''');
67 Map<String, List<Folder>> packageMap = <String, List<Folder>>{
68 'a': <Folder>[resourceProvider.getFolder(packageA)],
69 'b': <Folder>[resourceProvider.getFolder(packageB)],
70 'c': <Folder>[resourceProvider.getFolder(packageC)],
71 };
72
73 DependencyFinder finder = new DependencyFinder(resourceProvider);
74 List<String> result =
75 finder.transitiveDependenciesFor(packageMap, packageA);
76 expect(result, unorderedEquals([packageB, packageC]));
77 }
78
79 void test_transitiveDependenciesFor_missingPubspec() {
80 String packagePath = '/pub-cache/a-1.0';
81 Map<String, List<Folder>> packageMap = <String, List<Folder>>{
82 'a': <Folder>[resourceProvider.getFolder(packagePath)]
83 };
84
85 DependencyFinder finder = new DependencyFinder(resourceProvider);
86 expect(() => finder.transitiveDependenciesFor(packageMap, packagePath),
87 throws);
88 }
89
90 void test_transitiveDependenciesFor_noDependencies() {
91 String packagePath = '/pub-cache/a-1.0';
92 resourceProvider.newFile('$packagePath/$pubspecName', '');
93 Map<String, List<Folder>> packageMap = <String, List<Folder>>{
94 'a': <Folder>[resourceProvider.getFolder(packagePath)]
95 };
96
97 DependencyFinder finder = new DependencyFinder(resourceProvider);
98 List<String> result =
99 finder.transitiveDependenciesFor(packageMap, packagePath);
100 expect(result, hasLength(0));
101 }
102
103 void test_transitiveDependenciesFor_overlappingDependencies() {
104 String packageA = '/pub-cache/a-1.0';
105 String packageB = '/pub-cache/b-1.0';
106 String packageC = '/pub-cache/c-1.0';
107 String packageD = '/pub-cache/d-1.0';
108 resourceProvider.newFile(
109 '$packageA/$pubspecName',
110 '''
111 dependencies:
112 b: any
113 c: any
114 ''');
115 resourceProvider.newFile(
116 '$packageB/$pubspecName',
117 '''
118 dependencies:
119 d: any
120 ''');
121 resourceProvider.newFile(
122 '$packageC/$pubspecName',
123 '''
124 dependencies:
125 d: any
126 ''');
127 resourceProvider.newFile('$packageD/$pubspecName', '');
128 Map<String, List<Folder>> packageMap = <String, List<Folder>>{
129 'a': <Folder>[resourceProvider.getFolder(packageA)],
130 'b': <Folder>[resourceProvider.getFolder(packageB)],
131 'c': <Folder>[resourceProvider.getFolder(packageC)],
132 'd': <Folder>[resourceProvider.getFolder(packageD)],
133 };
134
135 DependencyFinder finder = new DependencyFinder(resourceProvider);
136 List<String> result =
137 finder.transitiveDependenciesFor(packageMap, packageA);
138 expect(result, unorderedEquals([packageB, packageC, packageD]));
139 }
140
141 void test_transitiveDependenciesFor_simpleDependencies() {
142 String packageA = '/pub-cache/a-1.0';
143 String packageB = '/pub-cache/b-1.0';
144 String packageC = '/pub-cache/c-1.0';
145 resourceProvider.newFile(
146 '$packageA/$pubspecName',
147 '''
148 dependencies:
149 b: any
150 c: any
151 ''');
152 resourceProvider.newFile('$packageB/$pubspecName', '');
153 resourceProvider.newFile('$packageC/$pubspecName', '');
154 Map<String, List<Folder>> packageMap = <String, List<Folder>>{
155 'a': <Folder>[resourceProvider.getFolder(packageA)],
156 'b': <Folder>[resourceProvider.getFolder(packageB)],
157 'c': <Folder>[resourceProvider.getFolder(packageC)],
158 };
159
160 DependencyFinder finder = new DependencyFinder(resourceProvider);
161 List<String> result =
162 finder.transitiveDependenciesFor(packageMap, packageA);
163 expect(result, unorderedEquals([packageB, packageC]));
164 }
165 }
166
167 @reflectiveTest
168 class PackageDescriptionTest extends ResolverTestCase {
169 void test_equal_false_differentOptions() {
170 String packageId = 'path1;path2';
171 DartSdk sdk = new MockSdk();
172 AnalysisOptionsImpl options1 = new AnalysisOptionsImpl();
173 AnalysisOptionsImpl options2 = new AnalysisOptionsImpl();
174 options2.enableAsync = !options1.enableAsync;
175 PackageDescription first = new PackageDescription(packageId, sdk, options1);
176 PackageDescription second =
177 new PackageDescription(packageId, sdk, options2);
178 expect(first == second, isFalse);
179 }
180
181 void test_equal_false_differentPaths() {
182 String packageId1 = 'path1;path2';
183 String packageId2 = 'path1;path3';
184 DartSdk sdk = new MockSdk();
185 AnalysisOptions options = new AnalysisOptionsImpl();
186 PackageDescription first = new PackageDescription(packageId1, sdk, options);
187 PackageDescription second =
188 new PackageDescription(packageId2, sdk, options);
189 expect(first == second, isFalse);
190 }
191
192 void test_equal_false_differentSdks() {
193 String packageId = 'path1;path2';
194 DartSdk sdk1 = new MockSdk();
195 DartSdk sdk2 = new MockSdk();
196 AnalysisOptions options = new AnalysisOptionsImpl();
197 PackageDescription first = new PackageDescription(packageId, sdk1, options);
198 PackageDescription second =
199 new PackageDescription(packageId, sdk2, options);
200 expect(first == second, isFalse);
201 }
202
203 void test_equal_true() {
204 String packageId = 'path1;path2';
205 DartSdk sdk = new MockSdk();
206 AnalysisOptions options = new AnalysisOptionsImpl();
207 PackageDescription first = new PackageDescription(packageId, sdk, options);
208 PackageDescription second = new PackageDescription(packageId, sdk, options);
209 expect(first == second, isTrue);
210 }
211 }
212
213 @reflectiveTest
214 class PackageManagerTest extends ResolverTestCase {
215 /**
216 * The resource provider to be used by tests.
217 */
218 MemoryResourceProvider resourceProvider;
219
220 @override
221 void setUp() {
222 resourceProvider = new MemoryResourceProvider();
223 }
224
225 void test_getContext() {
226 String packageA = '/pub-cache/a-1.0';
227 String packageB1 = '/pub-cache/b-1.0';
228 String packageB2 = '/pub-cache/b-2.0';
229 String packageC = '/pub-cache/c-1.0';
230 resourceProvider.newFile(
231 '$packageA/$pubspecName',
232 '''
233 dependencies:
234 b: any
235 c: any
236 ''');
237 resourceProvider.newFile('$packageB1/$pubspecName', '');
238 resourceProvider.newFile('$packageB2/$pubspecName', '');
239 resourceProvider.newFile('$packageC/$pubspecName', '');
240
241 Packages packages1 = new _MockPackages(<String, Uri>{
242 'a': new Uri.file(packageA),
243 'b': new Uri.file(packageB1),
244 'c': new Uri.file(packageC),
245 });
246 DartUriResolver resolver = new DartUriResolver(new MockSdk());
247 AnalysisOptions options = new AnalysisOptionsImpl();
248 //
249 // Verify that we can compute a context for a package.
250 //
251 PackageManager manager = new PackageManager(resourceProvider);
252 AnalysisContext context1 =
253 manager.getContext(packageA, packages1, resolver, options);
254 expect(context1, isNotNull);
255 //
256 // Verify that if we have the same package map we get the same context.
257 //
258 AnalysisContext context2 =
259 manager.getContext(packageA, packages1, resolver, options);
260 expect(context2, same(context1));
261 //
262 // Verify that if we have a different package map we get a different context .
263 //
264 Packages packages3 = new _MockPackages(<String, Uri>{
265 'a': new Uri.file(packageA),
266 'b': new Uri.file(packageB2),
267 'c': new Uri.file(packageC),
268 });
269 AnalysisContext context3 =
270 manager.getContext(packageA, packages3, resolver, options);
271 expect(context3, isNot(same(context1)));
272 }
273 }
274
275 /**
276 * An implementation of [Packages] used for testing.
277 */
278 class _MockPackages implements Packages {
279 final Map<String, Uri> map;
280
281 _MockPackages(this.map);
282
283 @override
284 Iterable<String> get packages => map.keys;
285
286 @override
287 Map<String, Uri> asMap() => map;
288
289 @override
290 Uri resolve(Uri packageUri, {Uri notFound(Uri packageUri)}) {
291 fail('Unexpected invocation of resolve');
292 return null;
293 }
294 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/generated/package.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698