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

Side by Side Diff: pkg/analyzer/test/src/summary/package_bundle_reader_test.dart

Issue 2186143002: Tests for several SummaryDataStore and ResynthesizerResultProvider features. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Actually add the new test file. 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 import 'package:analyzer/src/context/cache.dart';
6 import 'package:analyzer/src/generated/engine.dart';
7 import 'package:analyzer/src/generated/source.dart';
8 import 'package:analyzer/src/summary/idl.dart';
9 import 'package:analyzer/src/summary/package_bundle_reader.dart';
10 import 'package:analyzer/src/task/dart.dart';
11 import 'package:analyzer/src/util/fast_uri.dart';
12 import 'package:analyzer/task/dart.dart';
13 import 'package:typed_mock/typed_mock.dart';
14 import 'package:unittest/unittest.dart';
15
16 import '../../reflective_tests.dart';
17
18 main() {
19 groupSep = ' | ';
20 runReflectiveTests(ResynthesizerResultProviderTest);
21 runReflectiveTests(SummaryDataStoreTest);
22 }
23
24 UnlinkedPublicNamespace _namespaceWithParts(List<String> parts) {
25 UnlinkedPublicNamespace namespace = new _UnlinkedPublicNamespaceMock();
26 when(namespace.parts).thenReturn(parts);
27 return namespace;
28 }
29
30 @reflectiveTest
31 class ResynthesizerResultProviderTest {
32 SourceFactory sourceFactory = new _SourceFactoryMock();
33 InternalAnalysisContext context = new _InternalAnalysisContextMock();
34 UniversalCachePartition cachePartition;
35
36 Source source1 = new _SourceMock('package:p1/u1.dart', '/p1/lib/u1.dart');
37 Source source2 = new _SourceMock('package:p1/u2.dart', '/p1/lib/u2.dart');
38 Source source3 = new _SourceMock('package:p2/u1.dart', '/p2/lib/u1.dart');
39 CacheEntry entry1;
40 CacheEntry entry2;
41 CacheEntry entry3;
42
43 PackageBundle bundle = new _PackageBundleMock();
44 UnlinkedUnit unlinkedUnit1 = new _UnlinkedUnitMock();
45 UnlinkedUnit unlinkedUnit2 = new _UnlinkedUnitMock();
46 LinkedLibrary linkedLibrary = new _LinkedLibraryMock();
47
48 SummaryDataStore dataStore = new SummaryDataStore(<String>[]);
49 _TestResynthesizerResultProvider provider;
50
51 void setUp() {
52 cachePartition = new UniversalCachePartition(context);
53 entry1 = new CacheEntry(source1);
54 entry2 = new CacheEntry(source2);
55 entry3 = new CacheEntry(source3);
56 cachePartition.put(entry1);
57 cachePartition.put(entry2);
58 cachePartition.put(entry3);
59
60 when(sourceFactory.resolveUri(anyObject, 'package:p1/u1.dart'))
61 .thenReturn(source1);
62 when(sourceFactory.resolveUri(anyObject, 'package:p1/u2.dart'))
63 .thenReturn(source2);
64 when(context.sourceFactory).thenReturn(sourceFactory);
65
66 when(bundle.unlinkedUnitUris)
67 .thenReturn(<String>['package:p1/u1.dart', 'package:p1/u2.dart']);
68 when(bundle.unlinkedUnits)
69 .thenReturn(<UnlinkedUnit>[unlinkedUnit1, unlinkedUnit2]);
70 when(bundle.linkedLibraryUris).thenReturn(<String>['package:p1/u1.dart']);
71 when(bundle.linkedLibraries).thenReturn(<LinkedLibrary>[linkedLibrary]);
72 dataStore.addBundle('/p1.ds', bundle);
73
74 when(unlinkedUnit1.publicNamespace)
75 .thenReturn(_namespaceWithParts(['package:p1/u2.dart']));
76 when(unlinkedUnit2.publicNamespace).thenReturn(_namespaceWithParts([]));
77
78 provider = new _TestResynthesizerResultProvider(context, dataStore);
79 provider.sourcesWithResults.add(source1);
80 provider.sourcesWithResults.add(source2);
81 }
82
83 test_compute_CONTAINING_LIBRARIES_librarySource() {
84 bool success = provider.compute(entry1, CONTAINING_LIBRARIES);
85 expect(success, isTrue);
86 expect(entry1.getValue(CONTAINING_LIBRARIES), unorderedEquals([source1]));
87 }
88
89 test_compute_CONTAINING_LIBRARIES_partSource() {
90 bool success = provider.compute(entry2, CONTAINING_LIBRARIES);
91 expect(success, isTrue);
92 expect(entry2.getValue(CONTAINING_LIBRARIES), unorderedEquals([source1]));
93 }
94
95 test_compute_SOURCE_KIND_librarySource() {
96 bool success = provider.compute(entry1, SOURCE_KIND);
97 expect(success, isTrue);
98 expect(entry1.getValue(SOURCE_KIND), SourceKind.LIBRARY);
99 }
100
101 test_compute_SOURCE_KIND_noResults() {
102 bool success = provider.compute(entry3, SOURCE_KIND);
103 expect(success, isFalse);
104 expect(entry3.getState(SOURCE_KIND), CacheState.INVALID);
105 }
106
107 test_compute_SOURCE_KIND_partSource() {
108 bool success = provider.compute(entry2, SOURCE_KIND);
109 expect(success, isTrue);
110 expect(entry2.getValue(SOURCE_KIND), SourceKind.PART);
111 }
112 }
113
114 @reflectiveTest
115 class SummaryDataStoreTest {
116 SummaryDataStore dataStore = new SummaryDataStore(<String>[]);
117
118 PackageBundle bundle1 = new _PackageBundleMock();
119 PackageBundle bundle2 = new _PackageBundleMock();
120 UnlinkedUnit unlinkedUnit11 = new _UnlinkedUnitMock();
121 UnlinkedUnit unlinkedUnit12 = new _UnlinkedUnitMock();
122 UnlinkedUnit unlinkedUnit21 = new _UnlinkedUnitMock();
123 LinkedLibrary linkedLibrary1 = new _LinkedLibraryMock();
124 LinkedLibrary linkedLibrary2 = new _LinkedLibraryMock();
125
126 void setUp() {
127 // bundle1
128 when(unlinkedUnit11.publicNamespace)
129 .thenReturn(_namespaceWithParts(['package:p1/u2.dart']));
130 when(unlinkedUnit12.publicNamespace).thenReturn(_namespaceWithParts([]));
131 when(bundle1.unlinkedUnitUris)
132 .thenReturn(<String>['package:p1/u1.dart', 'package:p1/u2.dart']);
133 when(bundle1.unlinkedUnits)
134 .thenReturn(<UnlinkedUnit>[unlinkedUnit11, unlinkedUnit12]);
135 when(bundle1.linkedLibraryUris).thenReturn(<String>['package:p1/u1.dart']);
136 when(bundle1.linkedLibraries).thenReturn(<LinkedLibrary>[linkedLibrary1]);
137 dataStore.addBundle('/p1.ds', bundle1);
138 // bundle2
139 when(unlinkedUnit21.publicNamespace).thenReturn(_namespaceWithParts([]));
140 when(bundle2.unlinkedUnitUris).thenReturn(<String>['package:p2/u1.dart']);
141 when(bundle2.unlinkedUnits).thenReturn(<UnlinkedUnit>[unlinkedUnit21]);
142 when(bundle2.linkedLibraryUris).thenReturn(<String>['package:p2/u1.dart']);
143 when(bundle2.linkedLibraries).thenReturn(<LinkedLibrary>[linkedLibrary2]);
144 dataStore.addBundle('/p2.ds', bundle2);
145 }
146
147 test_addBundle() {
148 expect(dataStore.bundles, unorderedEquals([bundle1, bundle2]));
149 expect(dataStore.uriToSummaryPath,
150 containsPair('package:p1/u1.dart', '/p1.ds'));
151 // unlinkedMap
152 expect(dataStore.unlinkedMap, hasLength(3));
153 expect(dataStore.unlinkedMap,
154 containsPair('package:p1/u1.dart', unlinkedUnit11));
155 expect(dataStore.unlinkedMap,
156 containsPair('package:p1/u2.dart', unlinkedUnit12));
157 expect(dataStore.unlinkedMap,
158 containsPair('package:p2/u1.dart', unlinkedUnit21));
159 // linkedMap
160 expect(dataStore.linkedMap, hasLength(2));
161 expect(dataStore.linkedMap,
162 containsPair('package:p1/u1.dart', linkedLibrary1));
163 expect(dataStore.linkedMap,
164 containsPair('package:p2/u1.dart', linkedLibrary2));
165 }
166
167 test_getContainingLibraryUris_libraryUri() {
168 String partUri = 'package:p1/u1.dart';
169 List<String> uris = dataStore.getContainingLibraryUris(partUri);
170 expect(uris, unorderedEquals([partUri]));
171 }
172
173 test_getContainingLibraryUris_partUri() {
174 String partUri = 'package:p1/u2.dart';
175 List<String> uris = dataStore.getContainingLibraryUris(partUri);
176 expect(uris, unorderedEquals(['package:p1/u1.dart']));
177 }
178
179 test_getContainingLibraryUris_unknownUri() {
180 String partUri = 'package:notInStore/foo.dart';
181 List<String> uris = dataStore.getContainingLibraryUris(partUri);
182 expect(uris, isNull);
183 }
184 }
185
186 class _InternalAnalysisContextMock extends TypedMock
187 implements InternalAnalysisContext {}
188
189 class _LinkedLibraryMock extends TypedMock implements LinkedLibrary {}
190
191 class _PackageBundleMock extends TypedMock implements PackageBundle {}
192
193 class _SourceFactoryMock extends TypedMock implements SourceFactory {}
194
195 class _SourceMock implements Source {
196 final Uri uri;
197 final String fullName;
198
199 _SourceMock(String uriStr, this.fullName) : uri = FastUri.parse(uriStr);
200
201 @override
202 Source get librarySource => null;
203
204 @override
205 Source get source => this;
206
207 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
208
209 @override
210 String toString() => '$uri ($fullName)';
211 }
212
213 class _TestResynthesizerResultProvider extends ResynthesizerResultProvider {
214 final Set<Source> sourcesWithResults = new Set<Source>();
215
216 _TestResynthesizerResultProvider(
217 InternalAnalysisContext context, SummaryDataStore dataStore)
218 : super(context, dataStore);
219
220 @override
221 bool hasResultsForSource(Source source) {
222 return sourcesWithResults.contains(source);
223 }
224 }
225
226 class _UnlinkedPublicNamespaceMock extends TypedMock
227 implements UnlinkedPublicNamespace {}
228
229 class _UnlinkedUnitMock extends TypedMock implements UnlinkedUnit {}
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/package_bundle_reader.dart ('k') | pkg/analyzer/test/src/summary/test_all.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698