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

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: 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
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_missingPubspec() {
46 String packagePath = '/pub-cache/a-1.0';
47 Map<String, List<Folder>> packageMap = <String, List<Folder>>{
48 'a': <Folder>[resourceProvider.getFolder(packagePath)]
49 };
50
51 DependencyFinder finder = new DependencyFinder(resourceProvider);
52 expect(() => finder.transitiveDependenciesFor(packageMap, packagePath),
53 throws);
54 }
55
56 void test_transitiveDependenciesFor_noDependencies() {
57 String packagePath = '/pub-cache/a-1.0';
58 resourceProvider.newFile('$packagePath/$pubspecName', '');
59 Map<String, List<Folder>> packageMap = <String, List<Folder>>{
60 'a': <Folder>[resourceProvider.getFolder(packagePath)]
61 };
62
63 DependencyFinder finder = new DependencyFinder(resourceProvider);
64 List<String> result =
65 finder.transitiveDependenciesFor(packageMap, packagePath);
66 expect(result, hasLength(0));
67 }
68
69 void test_transitiveDependenciesFor_overlappingDependencies() {
70 String packageA = '/pub-cache/a-1.0';
71 String packageB = '/pub-cache/b-1.0';
72 String packageC = '/pub-cache/c-1.0';
73 String packageD = '/pub-cache/d-1.0';
74 resourceProvider.newFile(
75 '$packageA/$pubspecName',
76 '''
77 dependencies:
78 b: any
79 c: any
80 ''');
81 resourceProvider.newFile(
82 '$packageB/$pubspecName',
83 '''
84 dependencies:
85 d: any
86 ''');
87 resourceProvider.newFile(
88 '$packageC/$pubspecName',
89 '''
90 dependencies:
91 d: any
92 ''');
93 resourceProvider.newFile('$packageD/$pubspecName', '');
94 Map<String, List<Folder>> packageMap = <String, List<Folder>>{
95 'a': <Folder>[resourceProvider.getFolder(packageA)],
96 'b': <Folder>[resourceProvider.getFolder(packageB)],
97 'c': <Folder>[resourceProvider.getFolder(packageC)],
98 'd': <Folder>[resourceProvider.getFolder(packageD)],
99 };
100
101 DependencyFinder finder = new DependencyFinder(resourceProvider);
102 List<String> result =
103 finder.transitiveDependenciesFor(packageMap, packageA);
104 expect(result, unorderedEquals([packageB, packageC, packageD]));
105 }
106
107 void test_transitiveDependenciesFor_simpleDependencies() {
108 String packageA = '/pub-cache/a-1.0';
109 String packageB = '/pub-cache/b-1.0';
110 String packageC = '/pub-cache/c-1.0';
111 resourceProvider.newFile(
112 '$packageA/$pubspecName',
113 '''
114 dependencies:
115 b: any
116 c: any
117 ''');
118 resourceProvider.newFile('$packageB/$pubspecName', '');
119 resourceProvider.newFile('$packageC/$pubspecName', '');
120 Map<String, List<Folder>> packageMap = <String, List<Folder>>{
121 'a': <Folder>[resourceProvider.getFolder(packageA)],
122 'b': <Folder>[resourceProvider.getFolder(packageB)],
123 'c': <Folder>[resourceProvider.getFolder(packageC)],
124 };
125
126 DependencyFinder finder = new DependencyFinder(resourceProvider);
127 List<String> result =
128 finder.transitiveDependenciesFor(packageMap, packageA);
129 expect(result, unorderedEquals([packageB, packageC]));
130 }
131 }
132
133 @reflectiveTest
134 class PackageDescriptionTest extends ResolverTestCase {
135 void test_equal_false_differentOptions() {
136 String packageId = 'path1;path2';
137 DartSdk sdk = new MockSdk();
138 AnalysisOptionsImpl options1 = new AnalysisOptionsImpl();
139 AnalysisOptionsImpl options2 = new AnalysisOptionsImpl();
140 options2.enableAsync = !options1.enableAsync;
141 PackageDescription first = new PackageDescription(packageId, sdk, options1);
142 PackageDescription second =
143 new PackageDescription(packageId, sdk, options2);
144 expect(first == second, isFalse);
145 }
146
147 void test_equal_false_differentPaths() {
148 String packageId1 = 'path1;path2';
149 String packageId2 = 'path1;path3';
150 DartSdk sdk = new MockSdk();
151 AnalysisOptions options = new AnalysisOptionsImpl();
152 PackageDescription first = new PackageDescription(packageId1, sdk, options);
153 PackageDescription second =
154 new PackageDescription(packageId2, sdk, options);
155 expect(first == second, isFalse);
156 }
157
158 void test_equal_false_differentSdks() {
159 String packageId = 'path1;path2';
160 DartSdk sdk1 = new MockSdk();
161 DartSdk sdk2 = new MockSdk();
162 AnalysisOptions options = new AnalysisOptionsImpl();
163 PackageDescription first = new PackageDescription(packageId, sdk1, options);
164 PackageDescription second =
165 new PackageDescription(packageId, sdk2, options);
166 expect(first == second, isFalse);
167 }
168
169 void test_equal_true() {
170 String packageId = 'path1;path2';
171 DartSdk sdk = new MockSdk();
172 AnalysisOptions options = new AnalysisOptionsImpl();
173 PackageDescription first = new PackageDescription(packageId, sdk, options);
174 PackageDescription second = new PackageDescription(packageId, sdk, options);
175 expect(first == second, isTrue);
176 }
177 }
178
179 @reflectiveTest
180 class PackageManagerTest extends ResolverTestCase {
181 /**
182 * The resource provider to be used by tests.
183 */
184 MemoryResourceProvider resourceProvider;
185
186 @override
187 void setUp() {
188 resourceProvider = new MemoryResourceProvider();
189 }
190
191 void test_getContext() {
192 String packageA = '/pub-cache/a-1.0';
193 String packageB1 = '/pub-cache/b-1.0';
194 String packageB2 = '/pub-cache/b-2.0';
195 String packageC = '/pub-cache/c-1.0';
196 resourceProvider.newFile(
197 '$packageA/$pubspecName',
198 '''
199 dependencies:
200 b: any
201 c: any
202 ''');
203 resourceProvider.newFile('$packageB1/$pubspecName', '');
204 resourceProvider.newFile('$packageB2/$pubspecName', '');
205 resourceProvider.newFile('$packageC/$pubspecName', '');
206
207 Packages packages1 = new _MockPackages(<String, Uri>{
208 'a': new Uri.file(packageA),
209 'b': new Uri.file(packageB1),
210 'c': new Uri.file(packageC),
211 });
212 DartUriResolver resolver = new DartUriResolver(new MockSdk());
213 AnalysisOptions options = new AnalysisOptionsImpl();
214 //
215 // Verify that we can compute a context for a package.
216 //
217 PackageManager manager = new PackageManager(resourceProvider);
218 AnalysisContext context1 =
219 manager.getContext(packageA, packages1, resolver, options);
220 expect(context1, isNotNull);
221 //
222 // Verify that if we have the same package map we get the same context.
223 //
224 AnalysisContext context2 =
225 manager.getContext(packageA, packages1, resolver, options);
226 expect(context2, same(context1));
227 //
228 // Verify that if we have a different package map we get a different context .
229 //
230 Packages packages3 = new _MockPackages(<String, Uri>{
231 'a': new Uri.file(packageA),
232 'b': new Uri.file(packageB2),
233 'c': new Uri.file(packageC),
234 });
235 AnalysisContext context3 =
236 manager.getContext(packageA, packages3, resolver, options);
237 expect(context3, isNot(same(context1)));
238 }
239 }
240
241 /**
242 * An implementation of [Packages] used for testing.
243 */
244 class _MockPackages implements Packages {
245 final Map<String, Uri> map;
246
247 _MockPackages(this.map);
248
249 @override
250 Iterable<String> get packages => map.keys;
251
252 @override
253 Map<String, Uri> asMap() => map;
254
255 @override
256 Uri resolve(Uri packageUri, {Uri notFound(Uri packageUri)}) {
257 fail('Unexpected invocation of resolve');
258 return null;
259 }
260 }
OLDNEW
« pkg/analyzer/lib/src/generated/package.dart ('K') | « 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