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

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

Issue 1591483002: Prepare for chaining resynthesizers from AC to SDK AC. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Fallback to the SDK. 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 // verify that there are at least some interesting libraries in the bundle
51 expect(sdkBundle.prelinkedLibraryUris, contains('dart:core'));
52 expect(sdkBundle.prelinkedLibraryUris, contains('dart:async'));
53 expect(sdkBundle.prelinkedLibraryUris, contains('dart:html'));
54 // verify every library
55 for (String uri in sdkBundle.prelinkedLibraryUris) {
56 // TODO(scheglov) breaks at _LibraryResynthesizer.buildImplicitTopLevelVar iable
57 if (uri == 'dart:io' || uri == 'dart:_isolate_helper') {
58 continue;
59 }
60 _assertLibraryResults(uri);
61 }
62 }
63
64 test_sourceKind() {
65 if (context == null) {
66 return;
67 }
68 // libraries
69 _assertHasSourceKind('dart:core', SourceKind.LIBRARY);
70 _assertHasSourceKind('dart:async', SourceKind.LIBRARY);
71 _assertHasSourceKind('dart:math', SourceKind.LIBRARY);
72 // parts
73 _assertHasSourceKind('dart:core/bool.dart', SourceKind.PART);
74 _assertHasSourceKind('dart:async/future.dart', SourceKind.PART);
75 // unknown
76 _assertHasSourceKind('dart:no_such_library.dart', null);
77 _assertHasSourceKind('dart:core/no_such_part.dart', null);
78 }
79
80 test_typeProvider() {
81 if (context == null) {
82 return;
83 }
84 AnalysisContextTarget target = AnalysisContextTarget.request;
85 CacheEntry cacheEntry = context.getCacheEntry(target);
86 bool hasResult = context.aboutToComputeResult(cacheEntry, TYPE_PROVIDER);
87 expect(hasResult, isTrue);
88 expect(cacheEntry.getState(TYPE_PROVIDER), CacheState.VALID);
89 TypeProvider typeProvider = cacheEntry.getValue(TYPE_PROVIDER);
90 expect(typeProvider.objectType, isNotNull);
91 expect(typeProvider.boolType, isNotNull);
92 expect(typeProvider.intType, isNotNull);
93 expect(typeProvider.futureType, isNotNull);
94 expect(typeProvider.futureDynamicType, isNotNull);
95 expect(typeProvider.streamType, isNotNull);
96 expect(typeProvider.streamDynamicType, isNotNull);
97 }
98
99 void _assertHasLibraryElement(CacheEntry cacheEntry,
100 ResultDescriptor<LibraryElement> resultDescriptor) {
101 bool hasResult = context.aboutToComputeResult(cacheEntry, resultDescriptor);
102 expect(hasResult, isTrue);
103 expect(cacheEntry.getState(resultDescriptor), CacheState.VALID);
104 LibraryElement library = cacheEntry.getValue(resultDescriptor);
105 expect(library, isNotNull);
106 }
107
108 void _assertHasSourceKind(String uri, SourceKind expectedValue) {
109 Source target = context.sourceFactory.forUri(uri);
110 CacheEntry cacheEntry = context.getCacheEntry(target);
111 ResultDescriptor<SourceKind> resultDescriptor = SOURCE_KIND;
112 bool hasResult = context.aboutToComputeResult(cacheEntry, resultDescriptor);
113 if (expectedValue == null) {
114 expect(hasResult, isFalse);
115 expect(cacheEntry.getState(resultDescriptor), CacheState.INVALID);
116 } else {
117 expect(hasResult, isTrue);
118 expect(cacheEntry.getState(resultDescriptor), CacheState.VALID);
119 SourceKind value = cacheEntry.getValue(resultDescriptor);
120 expect(value, expectedValue);
121 }
122 }
123
124 void _assertIsLibraryElementReady(
125 CacheEntry cacheEntry, ResultDescriptor<bool> resultDescriptor) {
126 bool hasResult = context.aboutToComputeResult(cacheEntry, resultDescriptor);
127 expect(hasResult, isTrue);
128 expect(cacheEntry.getState(resultDescriptor), CacheState.VALID);
129 bool ready = cacheEntry.getValue(resultDescriptor);
130 expect(ready, isTrue);
131 }
132
133 void _assertLibraryResults(String uri) {
134 Source target = context.sourceFactory.forUri(uri);
135 CacheEntry cacheEntry = context.getCacheEntry(target);
136 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT1);
137 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT2);
138 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT3);
139 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT4);
140 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT5);
141 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT6);
142 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT7);
143 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT8);
144 _assertHasLibraryElement(cacheEntry, LIBRARY_ELEMENT);
145 _assertIsLibraryElementReady(cacheEntry, READY_LIBRARY_ELEMENT2);
146 _assertIsLibraryElementReady(cacheEntry, READY_LIBRARY_ELEMENT5);
147 _assertIsLibraryElementReady(cacheEntry, READY_LIBRARY_ELEMENT6);
148 }
149
150 void _initializeSdkBundle() {
151 if (sdkBundle != null) {
152 return;
153 }
154 // prepare analyzer path
155 String analyzerPath = getAnalyzerPackagePath();
156 if (analyzerPath == null) {
157 return;
158 }
159 // prepare summary path
160 String sdkSummaryPath = pathos.join(
161 analyzerPath, 'test', 'src', 'summary', 'sdk_analysis_summary');
162 File file = new File(sdkSummaryPath);
163 if (!file.existsSync()) {
164 return;
165 }
166 // load SdkBundle
167 List<int> bytes = file.readAsBytesSync();
168 sdkBundle = new SdkBundle.fromBuffer(bytes);
169 }
170
171 void _initializeSdkContext() {
172 _initializeSdkBundle();
173 if (sdkBundle == null) {
174 return;
175 }
176 context = new _TestSummarySdkAnalysisContext(sdkBundle);
177 DartSdk sdk = new _TestSummaryDartSdk();
178 context.sourceFactory = new SourceFactory([new DartUriResolver(sdk)]);
179 }
180
181 static String getAnalyzerPackagePath() {
182 if (!_analyzerPackagePathInitialized) {
183 _analyzerPackagePathInitialized = true;
184 _analyzerPackagePath = _computeAnalyzerPackagePath();
185 }
186 return _analyzerPackagePath;
187 }
188
189 /**
190 * Return the path to the `analyzer` package root, or `null` if it cannot
191 * be determined.
192 *
193 * This method expects that one of the `analyzer` tests was run, so
194 * [Platform.script] is inside of the `analyzer/test` folder.
195 */
196 static String _computeAnalyzerPackagePath() {
197 Uri uri = Platform.script;
198 if (uri == null || uri.scheme != 'file') {
199 return null;
200 }
201 String path = pathos.fromUri(uri);
202 List<String> segments = pathos.split(path);
203 while (segments.length > 2) {
204 if (segments[segments.length - 1] == 'test' &&
205 segments[segments.length - 2] == 'analyzer') {
206 segments.removeLast();
207 return pathos.joinAll(segments);
208 }
209 segments.removeLast();
210 }
211 return null;
212 }
213 }
214
215 class _TestSummaryDartSdk implements DartSdk {
216 @override
217 Source mapDartUri(String uriStr) {
218 Uri uri = Uri.parse(uriStr);
219 List<String> segments = uri.pathSegments;
220 if (segments.length == 1) {
221 String libraryName = segments.first;
222 String path = '/sdk/$libraryName/$libraryName.dart';
223 return new _TestSummarySdkSource(path, uri);
224 } else {
225 String path = '/sdk/' + segments.join('/');
226 return new _TestSummarySdkSource(path, uri);
227 }
228 }
229
230 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
231 }
232
233 /**
234 * [SummarySdkAnalysisContext] with simplified cache creation.
235 */
236 class _TestSummarySdkAnalysisContext extends SummarySdkAnalysisContext {
237 _TestSummarySdkAnalysisContext(SdkBundle bundle) : super(bundle);
238
239 @override
240 AnalysisCache createCacheFromSourceFactory(SourceFactory factory) {
241 return new AnalysisCache(<CachePartition>[new SdkCachePartition(this)]);
242 }
243 }
244
245 class _TestSummarySdkSource extends TestSourceWithUri {
246 _TestSummarySdkSource(String path, Uri uri) : super(path, uri);
247
248 @override
249 bool get isInSystemLibrary => true;
250
251 @override
252 Uri resolveRelativeUri(Uri relativeUri) {
253 Uri baseUri = uri;
254 if (uri.scheme == 'dart') {
255 String libraryName = uri.path;
256 baseUri = Uri.parse('dart:$libraryName/$libraryName.dart');
257 }
258 return baseUri.resolveUri(relativeUri);
259 }
260 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/src/summary/resynthesize_test.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