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

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

Issue 1567583002: Tests for SummarySdkAnalysisContext. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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 test.src.summary.summary_sdk_test;
6
7 import 'dart:io';
8
9 import 'package:analyzer/dart/element/element.dart';
10 import 'package:analyzer/src/context/cache.dart';
11 import 'package:analyzer/src/generated/engine.dart'
12 show AnalysisContext, CacheState;
13 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
14 import 'package:analyzer/src/generated/sdk.dart';
15 import 'package:analyzer/src/generated/source.dart';
16 import 'package:analyzer/src/summary/format.dart';
17 import 'package:analyzer/src/summary/summary_sdk.dart';
18 import 'package:analyzer/src/task/dart.dart';
19 import 'package:analyzer/task/dart.dart';
20 import 'package:analyzer/task/model.dart' show AnalysisContextTarget;
21 import 'package:analyzer/task/model.dart';
22 import 'package:path/path.dart' as pathos;
23 import 'package:unittest/unittest.dart';
24
25 import '../../generated/test_support.dart';
26 import '../../reflective_tests.dart';
27
28 main() {
29 groupSep = ' | ';
30 runReflectiveTests(SummarySdkAnalysisContextTest);
31 }
32
33 @reflectiveTest
34 class SummarySdkAnalysisContextTest {
35 static String _analyzerPackagePath;
36 static bool _analyzerPackagePathInitialized = false;
37
38 static SdkBundle sdkBundle;
39
40 SummarySdkAnalysisContext context;
41
42 void setUp() {
43 _initializeSdkContext();
44 }
45
46 test_libraryResults() {
47 if (context == null) {
48 return;
49 }
50 for (String uri in sdkBundle.prelinkedLibraryUris) {
51 // TODO(scheglov) breaks at _LibraryResynthesizer.buildImplicitTopLevelVar iable
52 if (uri == 'dart:io' || uri == 'dart:_isolate_helper') {
53 continue;
54 }
55 _assertLibraryResults(uri);
56 }
57 }
58
59 test_sourceKind() {
60 if (context == null) {
61 return;
62 }
63 // libraries
64 _assertHasSourceKind('dart:core', SourceKind.LIBRARY);
65 _assertHasSourceKind('dart:async', SourceKind.LIBRARY);
66 _assertHasSourceKind('dart:math', SourceKind.LIBRARY);
67 // parts
68 _assertHasSourceKind('dart:core/bool.dart', SourceKind.PART);
69 _assertHasSourceKind('dart:async/future.dart', SourceKind.PART);
70 // unknown
71 _assertHasSourceKind('dart:no_such_library.dart', null);
72 _assertHasSourceKind('dart:core/no_such_part.dart', null);
73 }
74
75 test_typeProvider() {
76 if (context == null) {
77 return;
78 }
79 AnalysisContextTarget target = AnalysisContextTarget.request;
80 CacheEntry cacheEntry = context.getCacheEntry(target);
81 bool hasResult = context.aboutToComputeResult(cacheEntry, TYPE_PROVIDER);
82 expect(hasResult, isTrue);
83 expect(cacheEntry.getState(TYPE_PROVIDER), CacheState.VALID);
84 TypeProvider typeProvider = cacheEntry.getValue(TYPE_PROVIDER);
85 expect(typeProvider.objectType, isNotNull);
86 expect(typeProvider.boolType, isNotNull);
87 expect(typeProvider.intType, isNotNull);
88 expect(typeProvider.futureType, isNotNull);
89 expect(typeProvider.futureDynamicType, isNotNull);
90 expect(typeProvider.streamType, isNotNull);
91 expect(typeProvider.streamDynamicType, isNotNull);
92 }
93
94 void _assertHasLibraryElement(CacheEntry cacheEntry,
95 ResultDescriptor<LibraryElement> resultDescriptor) {
96 bool hasResult = context.aboutToComputeResult(cacheEntry, resultDescriptor);
97 expect(hasResult, isTrue);
98 expect(cacheEntry.getState(resultDescriptor), CacheState.VALID);
99 LibraryElement library = cacheEntry.getValue(resultDescriptor);
100 expect(library, isNotNull);
101 }
102
103 void _assertHasSourceKind(String uri, SourceKind expectedValue) {
104 Source target = context.sourceFactory.forUri(uri);
105 CacheEntry cacheEntry = context.getCacheEntry(target);
106 ResultDescriptor<SourceKind> resultDescriptor = SOURCE_KIND;
107 bool hasResult = context.aboutToComputeResult(cacheEntry, resultDescriptor);
108 if (expectedValue == null) {
109 expect(hasResult, isFalse);
110 expect(cacheEntry.getState(resultDescriptor), CacheState.INVALID);
111 } else {
112 expect(hasResult, isTrue);
113 expect(cacheEntry.getState(resultDescriptor), CacheState.VALID);
114 SourceKind value = cacheEntry.getValue(resultDescriptor);
115 expect(value, expectedValue);
116 }
117 }
118
119 void _assertIsLibraryElementReady(
120 CacheEntry cacheEntry, ResultDescriptor<bool> resultDescriptor) {
121 bool hasResult = context.aboutToComputeResult(cacheEntry, resultDescriptor);
122 expect(hasResult, isTrue);
123 expect(cacheEntry.getState(resultDescriptor), CacheState.VALID);
124 bool ready = cacheEntry.getValue(resultDescriptor);
125 expect(ready, isTrue);
126 }
127
128 void _assertLibraryResults(String uri) {
129 Source target = context.sourceFactory.forUri(uri);
130 CacheEntry cacheEntry = context.getCacheEntry(target);
131 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT1);
132 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT2);
133 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT3);
134 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT4);
135 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT5);
136 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT6);
137 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT7);
138 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT8);
139 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT);
140 _assertIsLibraryElementReady(cacheEntry, READY_LIBRARY_ELEMENT2);
141 _assertIsLibraryElementReady(cacheEntry, READY_LIBRARY_ELEMENT5);
142 _assertIsLibraryElementReady(cacheEntry, READY_LIBRARY_ELEMENT6);
143 }
144
145 void _initializeSdkBundle() {
146 if (sdkBundle != null) {
147 return;
148 }
149 // prepare analyzer path
150 String analyzerPath = getAnalyzerPackagePath();
151 if (analyzerPath == null) {
152 return;
153 }
154 // prepare summary path
155 String sdkSummaryPath = pathos.join(
156 analyzerPath, 'test', 'src', 'summary', 'sdk_analysis_summary');
157 File file = new File(sdkSummaryPath);
158 if (!file.existsSync()) {
159 return;
160 }
161 // load SdkBundle
162 List<int> bytes = file.readAsBytesSync();
163 sdkBundle = new SdkBundle.fromBuffer(bytes);
164 }
165
166 void _initializeSdkContext() {
167 _initializeSdkBundle();
168 if (sdkBundle == null) {
169 return;
170 }
171 // print(sdkBundle);
Paul Berry 2016/01/06 15:46:15 Did you mean to delete these commented-out lines?
172 context = new _TestSummarySdkAnalysisContext(sdkBundle);
173 // print(context);
174 context.sourceFactory =
175 new SourceFactory([new DartUriResolver(new _TestSummaryDartSdk())]);
176 // context.sourceFactory = new SourceFactory([new _TestSdkUriResolver()]);
177 // context.sourceFactory = new _TestSourceFactory();
178 // DirectoryBasedDartSdk defaultSdk = DirectoryBasedDartSdk.defaultSdk;
179 // context.sourceFactory =
180 // new SourceFactory([new DartUriResolver(defaultSdk)]);
181 }
182
183 static String getAnalyzerPackagePath() {
184 if (!_analyzerPackagePathInitialized) {
185 _analyzerPackagePathInitialized = true;
186 _analyzerPackagePath = _computeAnalyzerPackagePath();
187 }
188 return _analyzerPackagePath;
189 }
190
191 /**
192 * Return the path to the `analyzer` package root, or `null` if it cannot
193 * be determined.
194 *
195 * This method expects that one of the `analyzer` tests was run, so
196 * [Platform.script] is inside of the `analyzer/test` folder.
197 */
198 static String _computeAnalyzerPackagePath() {
199 Uri uri = Platform.script;
200 if (uri == null || uri.scheme != 'file') {
201 return null;
202 }
203 String path = pathos.fromUri(uri);
204 List<String> segments = pathos.split(path);
205 while (segments.length > 2) {
206 if (segments[segments.length - 1] == 'test' &&
207 segments[segments.length - 2] == 'analyzer') {
208 segments.removeLast();
209 return pathos.joinAll(segments);
210 }
211 segments.removeLast();
212 }
213 return null;
214 }
215 }
216
217 class _TestSummaryDartSdk implements DartSdk {
218 @override
219 Source mapDartUri(String uriStr) {
220 Uri uri = Uri.parse(uriStr);
221 List<String> segments = uri.pathSegments;
222 if (segments.length == 1) {
223 String libraryName = segments.first;
224 String path = '/sdk/$libraryName/$libraryName.dart';
225 return new _TestSummarySdkSource(path, uri);
226 } else {
227 String path = '/sdk/' + segments.join('/');
228 return new _TestSummarySdkSource(path, uri);
229 }
230 }
231
232 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
233 }
234
235 /**
236 * [SummarySdkAnalysisContext] with simplified cache creation.
237 */
238 class _TestSummarySdkAnalysisContext extends SummarySdkAnalysisContext {
239 _TestSummarySdkAnalysisContext(SdkBundle bundle) : super(bundle);
240
241 @override
242 AnalysisCache createCacheFromSourceFactory(SourceFactory factory) {
243 return new AnalysisCache(<CachePartition>[new SdkCachePartition(this)]);
244 }
245 }
246
247 class _TestSummarySdkSource extends TestSourceWithUri {
248 _TestSummarySdkSource(String path, Uri uri) : super(path, uri);
249
250 @override
251 bool get isInSystemLibrary => true;
252
253 @override
254 Uri resolveRelativeUri(Uri relativeUri) {
255 Uri baseUri = uri;
256 if (uri.scheme == 'dart') {
257 String libraryName = uri.path;
258 baseUri = Uri.parse('dart:$libraryName/$libraryName.dart');
259 }
260 return baseUri.resolveUri(relativeUri);
261 }
262 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/summary_sdk.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