OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library test.src.context.context_test; | 5 library test.src.context.context_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:analyzer/src/cancelable_future.dart'; | 9 import 'package:analyzer/src/cancelable_future.dart'; |
10 import 'package:analyzer/src/context/cache.dart'; | 10 import 'package:analyzer/src/context/cache.dart'; |
(...skipping 13 matching lines...) Expand all Loading... |
24 AnalysisOptionsImpl, | 24 AnalysisOptionsImpl, |
25 AnalysisResult, | 25 AnalysisResult, |
26 CacheState, | 26 CacheState, |
27 ChangeNotice, | 27 ChangeNotice, |
28 ChangeSet, | 28 ChangeSet, |
29 IncrementalAnalysisCache, | 29 IncrementalAnalysisCache, |
30 TimestampedData; | 30 TimestampedData; |
31 import 'package:analyzer/src/generated/error.dart'; | 31 import 'package:analyzer/src/generated/error.dart'; |
32 import 'package:analyzer/src/generated/html.dart' as ht; | 32 import 'package:analyzer/src/generated/html.dart' as ht; |
33 import 'package:analyzer/src/generated/java_engine.dart'; | 33 import 'package:analyzer/src/generated/java_engine.dart'; |
34 import 'package:analyzer/src/generated/java_engine_io.dart'; | |
35 import 'package:analyzer/src/generated/resolver.dart'; | 34 import 'package:analyzer/src/generated/resolver.dart'; |
36 import 'package:analyzer/src/generated/scanner.dart'; | 35 import 'package:analyzer/src/generated/scanner.dart'; |
37 import 'package:analyzer/src/generated/sdk.dart'; | |
38 import 'package:analyzer/src/generated/sdk_io.dart'; | |
39 import 'package:analyzer/src/generated/source.dart'; | 36 import 'package:analyzer/src/generated/source.dart'; |
40 import 'package:analyzer/src/generated/source_io.dart'; | |
41 import 'package:analyzer/src/plugin/engine_plugin.dart'; | |
42 import 'package:analyzer/task/dart.dart'; | 37 import 'package:analyzer/task/dart.dart'; |
43 import 'package:plugin/manager.dart'; | |
44 import 'package:unittest/unittest.dart'; | 38 import 'package:unittest/unittest.dart'; |
45 import 'package:watcher/src/utils.dart'; | 39 import 'package:watcher/src/utils.dart'; |
46 | 40 |
47 import '../../generated/engine_test.dart'; | 41 import '../../generated/engine_test.dart'; |
48 import '../../generated/test_support.dart'; | 42 import '../../generated/test_support.dart'; |
49 import '../../reflective_tests.dart'; | 43 import '../../reflective_tests.dart'; |
50 import '../mock_sdk.dart'; | 44 import 'abstract_context.dart'; |
51 | 45 |
52 main() { | 46 main() { |
53 groupSep = ' | '; | 47 groupSep = ' | '; |
54 runReflectiveTests(AnalysisContextImplTest); | 48 runReflectiveTests(AnalysisContextImplTest); |
55 } | 49 } |
56 | 50 |
57 contextWithCore() { | |
58 return new AnalysisContextForTests(); | |
59 } | |
60 | |
61 /** | |
62 * An analysis context that has a fake SDK that is much smaller and faster for | |
63 * testing purposes. | |
64 */ | |
65 class AnalysisContextForTests extends AnalysisContextImpl { | |
66 AnalysisContextForTests() { | |
67 DartSdk sdk = new MockSdk(); | |
68 SourceFactory sourceFactory = | |
69 new SourceFactory([new DartUriResolver(sdk), new FileUriResolver()]); | |
70 this.sourceFactory = sourceFactory; | |
71 } | |
72 | |
73 @override | |
74 void set analysisOptions(AnalysisOptions options) { | |
75 AnalysisOptions currentOptions = analysisOptions; | |
76 bool needsRecompute = currentOptions.analyzeFunctionBodiesPredicate != | |
77 options.analyzeFunctionBodiesPredicate || | |
78 currentOptions.generateImplicitErrors != | |
79 options.generateImplicitErrors || | |
80 currentOptions.generateSdkErrors != options.generateSdkErrors || | |
81 currentOptions.dart2jsHint != options.dart2jsHint || | |
82 (currentOptions.hint && !options.hint) || | |
83 currentOptions.preserveComments != options.preserveComments || | |
84 currentOptions.enableNullAwareOperators != | |
85 options.enableNullAwareOperators || | |
86 currentOptions.enableStrictCallChecks != options.enableStrictCallChecks; | |
87 if (needsRecompute) { | |
88 fail( | |
89 "Cannot set options that cause the sources to be reanalyzed in a test
context"); | |
90 } | |
91 super.analysisOptions = options; | |
92 } | |
93 | |
94 @override | |
95 LibraryResolverFactory get libraryResolverFactory => null; | |
96 | |
97 @override | |
98 bool exists(Source source) => | |
99 super.exists(source) || sourceFactory.dartSdk.context.exists(source); | |
100 | |
101 @override | |
102 TimestampedData<String> getContents(Source source) { | |
103 if (source.isInSystemLibrary) { | |
104 return sourceFactory.dartSdk.context.getContents(source); | |
105 } | |
106 return super.getContents(source); | |
107 } | |
108 | |
109 @override | |
110 int getModificationStamp(Source source) { | |
111 if (source.isInSystemLibrary) { | |
112 return sourceFactory.dartSdk.context.getModificationStamp(source); | |
113 } | |
114 return super.getModificationStamp(source); | |
115 } | |
116 | |
117 // /** | |
118 // * Set the analysis options, even if they would force re-analysis. This meth
od should only be | |
119 // * invoked before the fake SDK is initialized. | |
120 // * | |
121 // * @param options the analysis options to be set | |
122 // */ | |
123 // void _internalSetAnalysisOptions(AnalysisOptions options) { | |
124 // super.analysisOptions = options; | |
125 // } | |
126 } | |
127 | |
128 @reflectiveTest | 51 @reflectiveTest |
129 class AnalysisContextImplTest extends EngineTestCase { | 52 class AnalysisContextImplTest extends AbstractContextTest { |
130 /** | |
131 * An analysis context whose source factory is [sourceFactory]. | |
132 */ | |
133 AnalysisContextImpl _context; | |
134 | |
135 /** | |
136 * The source factory associated with the analysis [context]. | |
137 */ | |
138 SourceFactory _sourceFactory; | |
139 | |
140 void fail_applyChanges_empty() { | 53 void fail_applyChanges_empty() { |
141 _context.applyChanges(new ChangeSet()); | 54 context.applyChanges(new ChangeSet()); |
142 expect(_context.performAnalysisTask().changeNotices, isNull); | 55 expect(context.performAnalysisTask().changeNotices, isNull); |
143 // This test appears to be flaky. If it is named "test_" it fails, if it's | 56 // This test appears to be flaky. If it is named "test_" it fails, if it's |
144 // named "fail_" it doesn't fail. I'm guessing that it's dependent on | 57 // named "fail_" it doesn't fail. I'm guessing that it's dependent on |
145 // whether some other test is run. | 58 // whether some other test is run. |
146 fail('Should have failed'); | 59 fail('Should have failed'); |
147 } | 60 } |
148 | 61 |
149 void fail_applyChanges_overriddenSource() { | 62 void fail_applyChanges_overriddenSource() { |
150 // Note: addSource adds the source to the contentCache. | 63 // Note: addSource adds the source to the contentCache. |
151 Source source = _addSource("/test.dart", "library test;"); | 64 Source source = addSource("/test.dart", "library test;"); |
152 _context.computeErrors(source); | 65 context.computeErrors(source); |
153 while (!_context.sourcesNeedingProcessing.isEmpty) { | 66 while (!context.sourcesNeedingProcessing.isEmpty) { |
154 _context.performAnalysisTask(); | 67 context.performAnalysisTask(); |
155 } | 68 } |
156 // Adding the source as a changedSource should have no effect since | 69 // Adding the source as a changedSource should have no effect since |
157 // it is already overridden in the content cache. | 70 // it is already overridden in the content cache. |
158 ChangeSet changeSet = new ChangeSet(); | 71 ChangeSet changeSet = new ChangeSet(); |
159 changeSet.changedSource(source); | 72 changeSet.changedSource(source); |
160 _context.applyChanges(changeSet); | 73 context.applyChanges(changeSet); |
161 expect(_context.sourcesNeedingProcessing, hasLength(0)); | 74 expect(context.sourcesNeedingProcessing, hasLength(0)); |
162 } | 75 } |
163 | 76 |
164 Future fail_applyChanges_remove() { | 77 Future fail_applyChanges_remove() { |
165 _context = contextWithCore(); | |
166 SourcesChangedListener listener = new SourcesChangedListener(); | 78 SourcesChangedListener listener = new SourcesChangedListener(); |
167 _context.onSourcesChanged.listen(listener.onData); | 79 context.onSourcesChanged.listen(listener.onData); |
168 _sourceFactory = _context.sourceFactory; | |
169 String libAContents = r''' | 80 String libAContents = r''' |
170 library libA; | 81 library libA; |
171 import 'libB.dart';'''; | 82 import 'libB.dart';'''; |
172 Source libA = _addSource("/libA.dart", libAContents); | 83 Source libA = addSource("/libA.dart", libAContents); |
173 String libBContents = "library libB;"; | 84 String libBContents = "library libB;"; |
174 Source libB = _addSource("/libB.dart", libBContents); | 85 Source libB = addSource("/libB.dart", libBContents); |
175 LibraryElement libAElement = _context.computeLibraryElement(libA); | 86 LibraryElement libAElement = context.computeLibraryElement(libA); |
176 expect(libAElement, isNotNull); | 87 expect(libAElement, isNotNull); |
177 List<LibraryElement> importedLibraries = libAElement.importedLibraries; | 88 List<LibraryElement> importedLibraries = libAElement.importedLibraries; |
178 expect(importedLibraries, hasLength(2)); | 89 expect(importedLibraries, hasLength(2)); |
179 _context.computeErrors(libA); | 90 context.computeErrors(libA); |
180 _context.computeErrors(libB); | 91 context.computeErrors(libB); |
181 expect(_context.sourcesNeedingProcessing, hasLength(0)); | 92 expect(context.sourcesNeedingProcessing, hasLength(0)); |
182 _context.setContents(libB, null); | 93 context.setContents(libB, null); |
183 _removeSource(libB); | 94 _removeSource(libB); |
184 List<Source> sources = _context.sourcesNeedingProcessing; | 95 List<Source> sources = context.sourcesNeedingProcessing; |
185 expect(sources, hasLength(1)); | 96 expect(sources, hasLength(1)); |
186 expect(sources[0], same(libA)); | 97 expect(sources[0], same(libA)); |
187 libAElement = _context.computeLibraryElement(libA); | 98 libAElement = context.computeLibraryElement(libA); |
188 importedLibraries = libAElement.importedLibraries; | 99 importedLibraries = libAElement.importedLibraries; |
189 expect(importedLibraries, hasLength(1)); | 100 expect(importedLibraries, hasLength(1)); |
190 return pumpEventQueue().then((_) { | 101 return pumpEventQueue().then((_) { |
191 listener.assertEvent(wereSourcesAdded: true); | 102 listener.assertEvent(wereSourcesAdded: true); |
192 listener.assertEvent(changedSources: [libA]); | 103 listener.assertEvent(changedSources: [libA]); |
193 listener.assertEvent(wereSourcesAdded: true); | 104 listener.assertEvent(wereSourcesAdded: true); |
194 listener.assertEvent(changedSources: [libB]); | 105 listener.assertEvent(changedSources: [libB]); |
195 listener.assertEvent(changedSources: [libB]); | 106 listener.assertEvent(changedSources: [libB]); |
196 listener.assertEvent(wereSourcesRemovedOrDeleted: true); | 107 listener.assertEvent(wereSourcesRemovedOrDeleted: true); |
197 listener.assertNoMoreEvents(); | 108 listener.assertNoMoreEvents(); |
198 }); | 109 }); |
199 } | 110 } |
200 | 111 |
201 Future fail_applyChanges_removeContainer() { | 112 Future fail_applyChanges_removeContainer() { |
202 _context = contextWithCore(); | |
203 SourcesChangedListener listener = new SourcesChangedListener(); | 113 SourcesChangedListener listener = new SourcesChangedListener(); |
204 _context.onSourcesChanged.listen(listener.onData); | 114 context.onSourcesChanged.listen(listener.onData); |
205 _sourceFactory = _context.sourceFactory; | |
206 String libAContents = r''' | 115 String libAContents = r''' |
207 library libA; | 116 library libA; |
208 import 'libB.dart';'''; | 117 import 'libB.dart';'''; |
209 Source libA = _addSource("/libA.dart", libAContents); | 118 Source libA = addSource("/libA.dart", libAContents); |
210 String libBContents = "library libB;"; | 119 String libBContents = "library libB;"; |
211 Source libB = _addSource("/libB.dart", libBContents); | 120 Source libB = addSource("/libB.dart", libBContents); |
212 _context.computeLibraryElement(libA); | 121 context.computeLibraryElement(libA); |
213 _context.computeErrors(libA); | 122 context.computeErrors(libA); |
214 _context.computeErrors(libB); | 123 context.computeErrors(libB); |
215 expect(_context.sourcesNeedingProcessing, hasLength(0)); | 124 expect(context.sourcesNeedingProcessing, hasLength(0)); |
216 ChangeSet changeSet = new ChangeSet(); | 125 ChangeSet changeSet = new ChangeSet(); |
217 SourceContainer removedContainer = | 126 SourceContainer removedContainer = |
218 new _AnalysisContextImplTest_test_applyChanges_removeContainer(libB); | 127 new _AnalysisContextImplTest_test_applyChanges_removeContainer(libB); |
219 changeSet.removedContainer(removedContainer); | 128 changeSet.removedContainer(removedContainer); |
220 _context.applyChanges(changeSet); | 129 context.applyChanges(changeSet); |
221 List<Source> sources = _context.sourcesNeedingProcessing; | 130 List<Source> sources = context.sourcesNeedingProcessing; |
222 expect(sources, hasLength(1)); | 131 expect(sources, hasLength(1)); |
223 expect(sources[0], same(libA)); | 132 expect(sources[0], same(libA)); |
224 return pumpEventQueue().then((_) { | 133 return pumpEventQueue().then((_) { |
225 listener.assertEvent(wereSourcesAdded: true); | 134 listener.assertEvent(wereSourcesAdded: true); |
226 listener.assertEvent(changedSources: [libA]); | 135 listener.assertEvent(changedSources: [libA]); |
227 listener.assertEvent(wereSourcesAdded: true); | 136 listener.assertEvent(wereSourcesAdded: true); |
228 listener.assertEvent(changedSources: [libB]); | 137 listener.assertEvent(changedSources: [libB]); |
229 listener.assertEvent(wereSourcesRemovedOrDeleted: true); | 138 listener.assertEvent(wereSourcesRemovedOrDeleted: true); |
230 listener.assertNoMoreEvents(); | 139 listener.assertNoMoreEvents(); |
231 }); | 140 }); |
232 } | 141 } |
233 | 142 |
234 void fail_computeErrors_dart_none() { | 143 void fail_computeErrors_dart_none() { |
235 Source source = _addSource("/lib.dart", "library lib;"); | 144 Source source = addSource("/lib.dart", "library lib;"); |
236 List<AnalysisError> errors = _context.computeErrors(source); | 145 List<AnalysisError> errors = context.computeErrors(source); |
237 expect(errors, hasLength(0)); | 146 expect(errors, hasLength(0)); |
238 } | 147 } |
239 | 148 |
240 void fail_computeErrors_dart_part() { | 149 void fail_computeErrors_dart_part() { |
241 Source librarySource = | 150 Source librarySource = |
242 _addSource("/lib.dart", "library lib; part 'part.dart';"); | 151 addSource("/lib.dart", "library lib; part 'part.dart';"); |
243 Source partSource = _addSource("/part.dart", "part of 'lib';"); | 152 Source partSource = addSource("/part.dart", "part of 'lib';"); |
244 _context.parseCompilationUnit(librarySource); | 153 context.parseCompilationUnit(librarySource); |
245 List<AnalysisError> errors = _context.computeErrors(partSource); | 154 List<AnalysisError> errors = context.computeErrors(partSource); |
246 expect(errors, isNotNull); | 155 expect(errors, isNotNull); |
247 expect(errors.length > 0, isTrue); | 156 expect(errors.length > 0, isTrue); |
248 } | 157 } |
249 | 158 |
250 void fail_computeErrors_dart_some() { | 159 void fail_computeErrors_dart_some() { |
251 Source source = _addSource("/lib.dart", "library 'lib';"); | 160 Source source = addSource("/lib.dart", "library 'lib';"); |
252 List<AnalysisError> errors = _context.computeErrors(source); | 161 List<AnalysisError> errors = context.computeErrors(source); |
253 expect(errors, isNotNull); | 162 expect(errors, isNotNull); |
254 expect(errors.length > 0, isTrue); | 163 expect(errors.length > 0, isTrue); |
255 } | 164 } |
256 | 165 |
257 void fail_computeErrors_html_none() { | 166 void fail_computeErrors_html_none() { |
258 Source source = _addSource("/test.html", "<html></html>"); | 167 Source source = addSource("/test.html", "<html></html>"); |
259 List<AnalysisError> errors = _context.computeErrors(source); | 168 List<AnalysisError> errors = context.computeErrors(source); |
260 expect(errors, hasLength(0)); | 169 expect(errors, hasLength(0)); |
261 } | 170 } |
262 | 171 |
263 void fail_computeHtmlElement_valid() { | 172 void fail_computeHtmlElement_valid() { |
264 Source source = _addSource("/test.html", "<html></html>"); | 173 Source source = addSource("/test.html", "<html></html>"); |
265 HtmlElement element = _context.computeHtmlElement(source); | 174 HtmlElement element = context.computeHtmlElement(source); |
266 expect(element, isNotNull); | 175 expect(element, isNotNull); |
267 expect(_context.computeHtmlElement(source), same(element)); | 176 expect(context.computeHtmlElement(source), same(element)); |
268 } | 177 } |
269 | 178 |
270 void fail_computeImportedLibraries_none() { | 179 void fail_computeImportedLibraries_none() { |
271 // This is failing because computeImportedLibraries now always includes | 180 // This is failing because computeImportedLibraries now always includes |
272 // dart:core, and we don't have any way of knowing whether it was explicit. | 181 // dart:core, and we don't have any way of knowing whether it was explicit. |
273 Source source = _addSource("/test.dart", "library test;"); | 182 Source source = addSource("/test.dart", "library test;"); |
274 expect(_context.computeImportedLibraries(source), hasLength(0)); | 183 expect(context.computeImportedLibraries(source), hasLength(0)); |
275 } | 184 } |
276 | 185 |
277 void fail_computeImportedLibraries_some() { | 186 void fail_computeImportedLibraries_some() { |
278 // This is failing because computeImportedLibraries now always includes | 187 // This is failing because computeImportedLibraries now always includes |
279 // dart:core, and we don't have any way of knowing whether it was explicit. | 188 // dart:core, and we don't have any way of knowing whether it was explicit. |
280 // addSource("/lib1.dart", "library lib1;"); | 189 // addSource("/lib1.dart", "library lib1;"); |
281 // addSource("/lib2.dart", "library lib2;"); | 190 // addSource("/lib2.dart", "library lib2;"); |
282 Source source = _addSource( | 191 Source source = addSource( |
283 "/test.dart", "library test; import 'lib1.dart'; import 'lib2.dart';"); | 192 "/test.dart", "library test; import 'lib1.dart'; import 'lib2.dart';"); |
284 expect(_context.computeImportedLibraries(source), hasLength(2)); | 193 expect(context.computeImportedLibraries(source), hasLength(2)); |
285 } | 194 } |
286 | 195 |
287 void fail_computeResolvableCompilationUnit_dart_exception() { | 196 void fail_computeResolvableCompilationUnit_dart_exception() { |
288 TestSource source = _addSourceWithException("/test.dart"); | 197 TestSource source = _addSourceWithException("/test.dart"); |
289 try { | 198 try { |
290 _context.computeResolvableCompilationUnit(source); | 199 context.computeResolvableCompilationUnit(source); |
291 fail("Expected AnalysisException"); | 200 fail("Expected AnalysisException"); |
292 } on AnalysisException { | 201 } on AnalysisException { |
293 // Expected | 202 // Expected |
294 } | 203 } |
295 } | 204 } |
296 | 205 |
297 void fail_computeResolvableCompilationUnit_html_exception() { | 206 void fail_computeResolvableCompilationUnit_html_exception() { |
298 Source source = _addSource("/lib.html", "<html></html>"); | 207 Source source = addSource("/lib.html", "<html></html>"); |
299 try { | 208 try { |
300 _context.computeResolvableCompilationUnit(source); | 209 context.computeResolvableCompilationUnit(source); |
301 fail("Expected AnalysisException"); | 210 fail("Expected AnalysisException"); |
302 } on AnalysisException { | 211 } on AnalysisException { |
303 // Expected | 212 // Expected |
304 } | 213 } |
305 } | 214 } |
306 | 215 |
307 void fail_computeResolvableCompilationUnit_valid() { | 216 void fail_computeResolvableCompilationUnit_valid() { |
308 Source source = _addSource("/lib.dart", "library lib;"); | 217 Source source = addSource("/lib.dart", "library lib;"); |
309 CompilationUnit parsedUnit = _context.parseCompilationUnit(source); | 218 CompilationUnit parsedUnit = context.parseCompilationUnit(source); |
310 expect(parsedUnit, isNotNull); | 219 expect(parsedUnit, isNotNull); |
311 CompilationUnit resolvedUnit = | 220 CompilationUnit resolvedUnit = |
312 _context.computeResolvableCompilationUnit(source); | 221 context.computeResolvableCompilationUnit(source); |
313 expect(resolvedUnit, isNotNull); | 222 expect(resolvedUnit, isNotNull); |
314 expect(resolvedUnit, same(parsedUnit)); | 223 expect(resolvedUnit, same(parsedUnit)); |
315 } | 224 } |
316 | 225 |
317 Future fail_computeResolvedCompilationUnitAsync_dispose() { | 226 Future fail_computeResolvedCompilationUnitAsync_dispose() { |
318 _context = contextWithCore(); | 227 Source source = addSource("/lib.dart", "library lib;"); |
319 _sourceFactory = _context.sourceFactory; | |
320 Source source = _addSource("/lib.dart", "library lib;"); | |
321 // Complete all pending analysis tasks and flush the AST so that it won't | 228 // Complete all pending analysis tasks and flush the AST so that it won't |
322 // be available immediately. | 229 // be available immediately. |
323 _performPendingAnalysisTasks(); | 230 _performPendingAnalysisTasks(); |
324 _flushAst(source); | 231 _flushAst(source); |
325 CancelableFuture<CompilationUnit> future = | 232 CancelableFuture<CompilationUnit> future = |
326 _context.computeResolvedCompilationUnitAsync(source, source); | 233 context.computeResolvedCompilationUnitAsync(source, source); |
327 bool completed = false; | 234 bool completed = false; |
328 future.then((CompilationUnit unit) { | 235 future.then((CompilationUnit unit) { |
329 fail('Future should have completed with error'); | 236 fail('Future should have completed with error'); |
330 }, onError: (error) { | 237 }, onError: (error) { |
331 expect(error, new isInstanceOf<AnalysisNotScheduledError>()); | 238 expect(error, new isInstanceOf<AnalysisNotScheduledError>()); |
332 completed = true; | 239 completed = true; |
333 }); | 240 }); |
334 expect(completed, isFalse); | 241 expect(completed, isFalse); |
335 expect(_context.pendingFutureSources_forTesting, isNotEmpty); | 242 expect(context.pendingFutureSources_forTesting, isNotEmpty); |
336 // Disposing of the context should cause all pending futures to complete | 243 // Disposing of the context should cause all pending futures to complete |
337 // with AnalysisNotScheduled, so that no clients are left hanging. | 244 // with AnalysisNotScheduled, so that no clients are left hanging. |
338 _context.dispose(); | 245 context.dispose(); |
339 expect(_context.pendingFutureSources_forTesting, isEmpty); | 246 expect(context.pendingFutureSources_forTesting, isEmpty); |
340 return pumpEventQueue().then((_) { | 247 return pumpEventQueue().then((_) { |
341 expect(completed, isTrue); | 248 expect(completed, isTrue); |
342 expect(_context.pendingFutureSources_forTesting, isEmpty); | 249 expect(context.pendingFutureSources_forTesting, isEmpty); |
343 }); | 250 }); |
344 } | 251 } |
345 | 252 |
346 Future fail_computeResolvedCompilationUnitAsync_unrelatedLibrary() { | 253 Future fail_computeResolvedCompilationUnitAsync_unrelatedLibrary() { |
347 _context = contextWithCore(); | 254 Source librarySource = addSource("/lib.dart", "library lib;"); |
348 _sourceFactory = _context.sourceFactory; | 255 Source partSource = addSource("/part.dart", "part of foo;"); |
349 Source librarySource = _addSource("/lib.dart", "library lib;"); | |
350 Source partSource = _addSource("/part.dart", "part of foo;"); | |
351 bool completed = false; | 256 bool completed = false; |
352 _context | 257 context |
353 .computeResolvedCompilationUnitAsync(partSource, librarySource) | 258 .computeResolvedCompilationUnitAsync(partSource, librarySource) |
354 .then((_) { | 259 .then((_) { |
355 fail('Expected resolution to fail'); | 260 fail('Expected resolution to fail'); |
356 }, onError: (e) { | 261 }, onError: (e) { |
357 expect(e, new isInstanceOf<AnalysisNotScheduledError>()); | 262 expect(e, new isInstanceOf<AnalysisNotScheduledError>()); |
358 completed = true; | 263 completed = true; |
359 }); | 264 }); |
360 return pumpEventQueue().then((_) { | 265 return pumpEventQueue().then((_) { |
361 expect(completed, isFalse); | 266 expect(completed, isFalse); |
362 _performPendingAnalysisTasks(); | 267 _performPendingAnalysisTasks(); |
363 }).then((_) => pumpEventQueue()).then((_) { | 268 }).then((_) => pumpEventQueue()).then((_) { |
364 expect(completed, isTrue); | 269 expect(completed, isTrue); |
365 }); | 270 }); |
366 } | 271 } |
367 | 272 |
368 void fail_extractContext() { | 273 void fail_extractContext() { |
369 fail("Implement this"); | 274 fail("Implement this"); |
370 } | 275 } |
371 | 276 |
372 void fail_getElement_constructor_named() { | 277 void test_getElement_constructor_named() { |
373 Source source = _addSource("/lib.dart", r''' | 278 Source source = addSource("/lib.dart", r''' |
374 class A { | 279 class A { |
375 A.named() {} | 280 A.named() {} |
376 }'''); | 281 }'''); |
377 _analyzeAll_assertFinished(); | 282 _analyzeAll_assertFinished(); |
378 LibraryElement library = _context.computeLibraryElement(source); | 283 LibraryElement library = context.computeLibraryElement(source); |
379 ClassElement classA = _findClass(library.definingCompilationUnit, "A"); | 284 ClassElement classA = _findClass(library.definingCompilationUnit, "A"); |
380 ConstructorElement constructor = classA.constructors[0]; | 285 ConstructorElement constructor = classA.constructors[0]; |
381 ElementLocation location = constructor.location; | 286 ElementLocation location = constructor.location; |
382 Element element = _context.getElement(location); | 287 Element element = context.getElement(location); |
383 expect(element, same(constructor)); | 288 expect(element, same(constructor)); |
384 } | 289 } |
385 | 290 |
386 void fail_getElement_constructor_unnamed() { | 291 void test_getElement_constructor_unnamed() { |
387 Source source = _addSource("/lib.dart", r''' | 292 Source source = addSource("/lib.dart", r''' |
388 class A { | 293 class A { |
389 A() {} | 294 A() {} |
390 }'''); | 295 }'''); |
391 _analyzeAll_assertFinished(); | 296 _analyzeAll_assertFinished(); |
392 LibraryElement library = _context.computeLibraryElement(source); | 297 LibraryElement library = context.computeLibraryElement(source); |
393 ClassElement classA = _findClass(library.definingCompilationUnit, "A"); | 298 ClassElement classA = _findClass(library.definingCompilationUnit, "A"); |
394 ConstructorElement constructor = classA.constructors[0]; | 299 ConstructorElement constructor = classA.constructors[0]; |
395 ElementLocation location = constructor.location; | 300 ElementLocation location = constructor.location; |
396 Element element = _context.getElement(location); | 301 Element element = context.getElement(location); |
397 expect(element, same(constructor)); | 302 expect(element, same(constructor)); |
398 } | 303 } |
399 | 304 |
400 void fail_getElement_enum() { | 305 void test_getElement_enum() { |
401 Source source = _addSource('/test.dart', 'enum MyEnum {A, B, C}'); | 306 Source source = addSource('/test.dart', 'enum MyEnum {A, B, C}'); |
402 _analyzeAll_assertFinished(); | 307 _analyzeAll_assertFinished(); |
403 LibraryElement library = _context.computeLibraryElement(source); | 308 LibraryElement library = context.computeLibraryElement(source); |
404 ClassElement myEnum = library.definingCompilationUnit.getEnum('MyEnum'); | 309 ClassElement myEnum = library.definingCompilationUnit.getEnum('MyEnum'); |
405 ElementLocation location = myEnum.location; | 310 ElementLocation location = myEnum.location; |
406 Element element = _context.getElement(location); | 311 Element element = context.getElement(location); |
407 expect(element, same(myEnum)); | 312 expect(element, same(myEnum)); |
408 } | 313 } |
409 | 314 |
410 void fail_getErrors_dart_none() { | 315 void fail_getErrors_dart_none() { |
411 Source source = _addSource("/lib.dart", "library lib;"); | 316 Source source = addSource("/lib.dart", "library lib;"); |
412 var errorInfo = _context.getErrors(source); | 317 var errorInfo = context.getErrors(source); |
413 expect(errorInfo, isNotNull); | 318 expect(errorInfo, isNotNull); |
414 List<AnalysisError> errors = errorInfo.errors; | 319 List<AnalysisError> errors = errorInfo.errors; |
415 expect(errors, hasLength(0)); | 320 expect(errors, hasLength(0)); |
416 _context.computeErrors(source); | 321 context.computeErrors(source); |
417 errors = errorInfo.errors; | 322 errors = errorInfo.errors; |
418 expect(errors, hasLength(0)); | 323 expect(errors, hasLength(0)); |
419 } | 324 } |
420 | 325 |
421 void fail_getErrors_dart_some() { | 326 void fail_getErrors_dart_some() { |
422 Source source = _addSource("/lib.dart", "library 'lib';"); | 327 Source source = addSource("/lib.dart", "library 'lib';"); |
423 var errorInfo = _context.getErrors(source); | 328 var errorInfo = context.getErrors(source); |
424 expect(errorInfo, isNotNull); | 329 expect(errorInfo, isNotNull); |
425 List<AnalysisError> errors = errorInfo.errors; | 330 List<AnalysisError> errors = errorInfo.errors; |
426 expect(errors, hasLength(0)); | 331 expect(errors, hasLength(0)); |
427 _context.computeErrors(source); | 332 context.computeErrors(source); |
428 errors = errorInfo.errors; | 333 errors = errorInfo.errors; |
429 expect(errors, hasLength(1)); | 334 expect(errors, hasLength(1)); |
430 } | 335 } |
431 | 336 |
432 void fail_getErrors_html_none() { | 337 void fail_getErrors_html_none() { |
433 Source source = _addSource("/test.html", "<html></html>"); | 338 Source source = addSource("/test.html", "<html></html>"); |
434 AnalysisErrorInfo errorInfo = _context.getErrors(source); | 339 AnalysisErrorInfo errorInfo = context.getErrors(source); |
435 expect(errorInfo, isNotNull); | 340 expect(errorInfo, isNotNull); |
436 List<AnalysisError> errors = errorInfo.errors; | 341 List<AnalysisError> errors = errorInfo.errors; |
437 expect(errors, hasLength(0)); | 342 expect(errors, hasLength(0)); |
438 _context.computeErrors(source); | 343 context.computeErrors(source); |
439 errors = errorInfo.errors; | 344 errors = errorInfo.errors; |
440 expect(errors, hasLength(0)); | 345 expect(errors, hasLength(0)); |
441 } | 346 } |
442 | 347 |
443 void fail_getErrors_html_some() { | 348 void fail_getErrors_html_some() { |
444 Source source = _addSource("/test.html", r''' | 349 Source source = addSource("/test.html", r''' |
445 <html><head> | 350 <html><head> |
446 <script type='application/dart' src='test.dart'/> | 351 <script type='application/dart' src='test.dart'/> |
447 </head></html>'''); | 352 </head></html>'''); |
448 AnalysisErrorInfo errorInfo = _context.getErrors(source); | 353 AnalysisErrorInfo errorInfo = context.getErrors(source); |
449 expect(errorInfo, isNotNull); | 354 expect(errorInfo, isNotNull); |
450 List<AnalysisError> errors = errorInfo.errors; | 355 List<AnalysisError> errors = errorInfo.errors; |
451 expect(errors, hasLength(0)); | 356 expect(errors, hasLength(0)); |
452 _context.computeErrors(source); | 357 context.computeErrors(source); |
453 errors = errorInfo.errors; | 358 errors = errorInfo.errors; |
454 expect(errors, hasLength(1)); | 359 expect(errors, hasLength(1)); |
455 } | 360 } |
456 | 361 |
457 void fail_getHtmlElement_html() { | 362 void fail_getHtmlElement_html() { |
458 Source source = _addSource("/test.html", "<html></html>"); | 363 Source source = addSource("/test.html", "<html></html>"); |
459 HtmlElement element = _context.getHtmlElement(source); | 364 HtmlElement element = context.getHtmlElement(source); |
460 expect(element, isNull); | 365 expect(element, isNull); |
461 _context.computeHtmlElement(source); | 366 context.computeHtmlElement(source); |
462 element = _context.getHtmlElement(source); | 367 element = context.getHtmlElement(source); |
463 expect(element, isNotNull); | 368 expect(element, isNotNull); |
464 } | 369 } |
465 | 370 |
466 void fail_getHtmlFilesReferencing_library() { | 371 void fail_getHtmlFilesReferencing_library() { |
467 Source htmlSource = _addSource("/test.html", r''' | 372 Source htmlSource = addSource("/test.html", r''' |
468 <html><head> | 373 <html><head> |
469 <script type='application/dart' src='test.dart'/> | 374 <script type='application/dart' src='test.dart'/> |
470 <script type='application/dart' src='test.js'/> | 375 <script type='application/dart' src='test.js'/> |
471 </head></html>'''); | 376 </head></html>'''); |
472 Source librarySource = _addSource("/test.dart", "library lib;"); | 377 Source librarySource = addSource("/test.dart", "library lib;"); |
473 List<Source> result = _context.getHtmlFilesReferencing(librarySource); | 378 List<Source> result = context.getHtmlFilesReferencing(librarySource); |
474 expect(result, hasLength(0)); | 379 expect(result, hasLength(0)); |
475 _context.parseHtmlUnit(htmlSource); | 380 context.parseHtmlUnit(htmlSource); |
476 result = _context.getHtmlFilesReferencing(librarySource); | 381 result = context.getHtmlFilesReferencing(librarySource); |
477 expect(result, hasLength(1)); | 382 expect(result, hasLength(1)); |
478 expect(result[0], htmlSource); | 383 expect(result[0], htmlSource); |
479 } | 384 } |
480 | 385 |
481 void fail_getHtmlFilesReferencing_part() { | 386 void fail_getHtmlFilesReferencing_part() { |
482 _context = contextWithCore(); | 387 Source htmlSource = addSource("/test.html", r''' |
483 _sourceFactory = _context.sourceFactory; | |
484 Source htmlSource = _addSource("/test.html", r''' | |
485 <html><head> | 388 <html><head> |
486 <script type='application/dart' src='test.dart'/> | 389 <script type='application/dart' src='test.dart'/> |
487 <script type='application/dart' src='test.js'/> | 390 <script type='application/dart' src='test.js'/> |
488 </head></html>'''); | 391 </head></html>'''); |
489 Source librarySource = | 392 Source librarySource = |
490 _addSource("/test.dart", "library lib; part 'part.dart';"); | 393 addSource("/test.dart", "library lib; part 'part.dart';"); |
491 Source partSource = _addSource("/part.dart", "part of lib;"); | 394 Source partSource = addSource("/part.dart", "part of lib;"); |
492 _context.computeLibraryElement(librarySource); | 395 context.computeLibraryElement(librarySource); |
493 List<Source> result = _context.getHtmlFilesReferencing(partSource); | 396 List<Source> result = context.getHtmlFilesReferencing(partSource); |
494 expect(result, hasLength(0)); | 397 expect(result, hasLength(0)); |
495 _context.parseHtmlUnit(htmlSource); | 398 context.parseHtmlUnit(htmlSource); |
496 result = _context.getHtmlFilesReferencing(partSource); | 399 result = context.getHtmlFilesReferencing(partSource); |
497 expect(result, hasLength(1)); | 400 expect(result, hasLength(1)); |
498 expect(result[0], htmlSource); | 401 expect(result[0], htmlSource); |
499 } | 402 } |
500 | 403 |
501 void fail_getHtmlSources() { | 404 void fail_getHtmlSources() { |
502 List<Source> sources = _context.htmlSources; | 405 List<Source> sources = context.htmlSources; |
503 expect(sources, hasLength(0)); | 406 expect(sources, hasLength(0)); |
504 Source source = _addSource("/test.html", ""); | 407 Source source = addSource("/test.html", ""); |
505 _context.computeKindOf(source); | 408 context.computeKindOf(source); |
506 sources = _context.htmlSources; | 409 sources = context.htmlSources; |
507 expect(sources, hasLength(1)); | 410 expect(sources, hasLength(1)); |
508 expect(sources[0], source); | 411 expect(sources[0], source); |
509 } | 412 } |
510 | 413 |
511 void fail_getLibrariesReferencedFromHtml() { | 414 void fail_getLibrariesReferencedFromHtml() { |
512 _context = contextWithCore(); | 415 Source htmlSource = addSource("/test.html", r''' |
513 _sourceFactory = _context.sourceFactory; | |
514 Source htmlSource = _addSource("/test.html", r''' | |
515 <html><head> | 416 <html><head> |
516 <script type='application/dart' src='test.dart'/> | 417 <script type='application/dart' src='test.dart'/> |
517 <script type='application/dart' src='test.js'/> | 418 <script type='application/dart' src='test.js'/> |
518 </head></html>'''); | 419 </head></html>'''); |
519 Source librarySource = _addSource("/test.dart", "library lib;"); | 420 Source librarySource = addSource("/test.dart", "library lib;"); |
520 _context.computeLibraryElement(librarySource); | 421 context.computeLibraryElement(librarySource); |
521 _context.parseHtmlUnit(htmlSource); | 422 context.parseHtmlUnit(htmlSource); |
522 List<Source> result = _context.getLibrariesReferencedFromHtml(htmlSource); | 423 List<Source> result = context.getLibrariesReferencedFromHtml(htmlSource); |
523 expect(result, hasLength(1)); | 424 expect(result, hasLength(1)); |
524 expect(result[0], librarySource); | 425 expect(result[0], librarySource); |
525 } | 426 } |
526 | 427 |
527 void fail_getResolvedCompilationUnit_library() { | 428 void fail_getResolvedCompilationUnit_library() { |
528 _context = contextWithCore(); | 429 Source source = addSource("/lib.dart", "library libb;"); |
529 _sourceFactory = _context.sourceFactory; | 430 LibraryElement library = context.computeLibraryElement(source); |
530 Source source = _addSource("/lib.dart", "library libb;"); | 431 expect(context.getResolvedCompilationUnit(source, library), isNotNull); |
531 LibraryElement library = _context.computeLibraryElement(source); | 432 context.setContents(source, "library lib;"); |
532 expect(_context.getResolvedCompilationUnit(source, library), isNotNull); | 433 expect(context.getResolvedCompilationUnit(source, library), isNull); |
533 _context.setContents(source, "library lib;"); | |
534 expect(_context.getResolvedCompilationUnit(source, library), isNull); | |
535 } | 434 } |
536 | 435 |
537 void fail_getResolvedHtmlUnit() { | 436 void fail_getResolvedHtmlUnit() { |
538 _context = contextWithCore(); | 437 Source source = addSource("/test.html", "<html></html>"); |
539 _sourceFactory = _context.sourceFactory; | 438 expect(context.getResolvedHtmlUnit(source), isNull); |
540 Source source = _addSource("/test.html", "<html></html>"); | 439 context.resolveHtmlUnit(source); |
541 expect(_context.getResolvedHtmlUnit(source), isNull); | 440 expect(context.getResolvedHtmlUnit(source), isNotNull); |
542 _context.resolveHtmlUnit(source); | |
543 expect(_context.getResolvedHtmlUnit(source), isNotNull); | |
544 } | 441 } |
545 | 442 |
546 void fail_mergeContext() { | 443 void fail_mergeContext() { |
547 fail("Implement this"); | 444 fail("Implement this"); |
548 } | 445 } |
549 | 446 |
550 void fail_parseHtmlUnit_noErrors() { | 447 void fail_parseHtmlUnit_noErrors() { |
551 Source source = _addSource("/lib.html", "<html></html>"); | 448 Source source = addSource("/lib.html", "<html></html>"); |
552 ht.HtmlUnit unit = _context.parseHtmlUnit(source); | 449 ht.HtmlUnit unit = context.parseHtmlUnit(source); |
553 expect(unit, isNotNull); | 450 expect(unit, isNotNull); |
554 } | 451 } |
555 | 452 |
556 void fail_parseHtmlUnit_resolveDirectives() { | 453 void fail_parseHtmlUnit_resolveDirectives() { |
557 Source libSource = _addSource("/lib.dart", r''' | 454 Source libSource = addSource("/lib.dart", r''' |
558 library lib; | 455 library lib; |
559 class ClassA {}'''); | 456 class ClassA {}'''); |
560 Source source = _addSource("/lib.html", r''' | 457 Source source = addSource("/lib.html", r''' |
561 <html> | 458 <html> |
562 <head> | 459 <head> |
563 <script type='application/dart'> | 460 <script type='application/dart'> |
564 import 'lib.dart'; | 461 import 'lib.dart'; |
565 ClassA v = null; | 462 ClassA v = null; |
566 </script> | 463 </script> |
567 </head> | 464 </head> |
568 <body> | 465 <body> |
569 </body> | 466 </body> |
570 </html>'''); | 467 </html>'''); |
571 ht.HtmlUnit unit = _context.parseHtmlUnit(source); | 468 ht.HtmlUnit unit = context.parseHtmlUnit(source); |
572 expect(unit, isNotNull); | 469 expect(unit, isNotNull); |
573 // import directive should be resolved | 470 // import directive should be resolved |
574 ht.XmlTagNode htmlNode = unit.tagNodes[0]; | 471 ht.XmlTagNode htmlNode = unit.tagNodes[0]; |
575 ht.XmlTagNode headNode = htmlNode.tagNodes[0]; | 472 ht.XmlTagNode headNode = htmlNode.tagNodes[0]; |
576 ht.HtmlScriptTagNode scriptNode = headNode.tagNodes[0]; | 473 ht.HtmlScriptTagNode scriptNode = headNode.tagNodes[0]; |
577 CompilationUnit script = scriptNode.script; | 474 CompilationUnit script = scriptNode.script; |
578 ImportDirective importNode = script.directives[0] as ImportDirective; | 475 ImportDirective importNode = script.directives[0] as ImportDirective; |
579 expect(importNode.uriContent, isNotNull); | 476 expect(importNode.uriContent, isNotNull); |
580 expect(importNode.source, libSource); | 477 expect(importNode.source, libSource); |
581 } | 478 } |
582 | 479 |
583 void fail_performAnalysisTask_addPart() { | 480 void fail_performAnalysisTask_addPart() { |
584 Source libSource = _addSource("/lib.dart", r''' | 481 Source libSource = addSource("/lib.dart", r''' |
585 library lib; | 482 library lib; |
586 part 'part.dart';'''); | 483 part 'part.dart';'''); |
587 // run all tasks without part | 484 // run all tasks without part |
588 _analyzeAll_assertFinished(); | 485 _analyzeAll_assertFinished(); |
589 // add part and run all tasks | 486 // add part and run all tasks |
590 Source partSource = _addSource("/part.dart", r''' | 487 Source partSource = addSource("/part.dart", r''' |
591 part of lib; | 488 part of lib; |
592 '''); | 489 '''); |
593 _analyzeAll_assertFinished(); | 490 _analyzeAll_assertFinished(); |
594 // "libSource" should be here | 491 // "libSource" should be here |
595 List<Source> librariesWithPart = | 492 List<Source> librariesWithPart = context.getLibrariesContaining(partSource); |
596 _context.getLibrariesContaining(partSource); | |
597 expect(librariesWithPart, unorderedEquals([libSource])); | 493 expect(librariesWithPart, unorderedEquals([libSource])); |
598 } | 494 } |
599 | 495 |
600 void fail_performAnalysisTask_changeLibraryContents() { | 496 void fail_performAnalysisTask_changeLibraryContents() { |
601 Source libSource = | 497 Source libSource = |
602 _addSource("/test.dart", "library lib; part 'test-part.dart';"); | 498 addSource("/test.dart", "library lib; part 'test-part.dart';"); |
603 Source partSource = _addSource("/test-part.dart", "part of lib;"); | 499 Source partSource = addSource("/test-part.dart", "part of lib;"); |
604 _analyzeAll_assertFinished(); | 500 _analyzeAll_assertFinished(); |
605 expect( | 501 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
606 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
607 reason: "library resolved 1"); | 502 reason: "library resolved 1"); |
608 expect( | 503 expect( |
609 _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, | 504 context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, |
610 reason: "part resolved 1"); | 505 reason: "part resolved 1"); |
611 // update and analyze #1 | 506 // update and analyze #1 |
612 _context.setContents(libSource, "library lib;"); | 507 context.setContents(libSource, "library lib;"); |
613 expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull, | 508 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull, |
614 reason: "library changed 2"); | 509 reason: "library changed 2"); |
615 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 510 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
616 reason: "part changed 2"); | 511 reason: "part changed 2"); |
617 _analyzeAll_assertFinished(); | 512 _analyzeAll_assertFinished(); |
618 expect( | 513 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
619 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
620 reason: "library resolved 2"); | 514 reason: "library resolved 2"); |
621 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 515 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
622 reason: "part resolved 2"); | 516 reason: "part resolved 2"); |
623 // update and analyze #2 | 517 // update and analyze #2 |
624 _context.setContents(libSource, "library lib; part 'test-part.dart';"); | 518 context.setContents(libSource, "library lib; part 'test-part.dart';"); |
625 expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull, | 519 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull, |
626 reason: "library changed 3"); | 520 reason: "library changed 3"); |
627 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 521 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
628 reason: "part changed 3"); | 522 reason: "part changed 3"); |
629 _analyzeAll_assertFinished(); | 523 _analyzeAll_assertFinished(); |
630 expect( | 524 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
631 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
632 reason: "library resolved 2"); | 525 reason: "library resolved 2"); |
633 expect( | 526 expect( |
634 _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, | 527 context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, |
635 reason: "part resolved 3"); | 528 reason: "part resolved 3"); |
636 } | 529 } |
637 | 530 |
638 void fail_performAnalysisTask_changeLibraryThenPartContents() { | 531 void fail_performAnalysisTask_changeLibraryThenPartContents() { |
639 Source libSource = | 532 Source libSource = |
640 _addSource("/test.dart", "library lib; part 'test-part.dart';"); | 533 addSource("/test.dart", "library lib; part 'test-part.dart';"); |
641 Source partSource = _addSource("/test-part.dart", "part of lib;"); | 534 Source partSource = addSource("/test-part.dart", "part of lib;"); |
642 _analyzeAll_assertFinished(); | 535 _analyzeAll_assertFinished(); |
643 expect( | 536 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
644 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
645 reason: "library resolved 1"); | 537 reason: "library resolved 1"); |
646 expect( | 538 expect( |
647 _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, | 539 context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, |
648 reason: "part resolved 1"); | 540 reason: "part resolved 1"); |
649 // update and analyze #1 | 541 // update and analyze #1 |
650 _context.setContents(libSource, "library lib;"); | 542 context.setContents(libSource, "library lib;"); |
651 expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull, | 543 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull, |
652 reason: "library changed 2"); | 544 reason: "library changed 2"); |
653 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 545 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
654 reason: "part changed 2"); | 546 reason: "part changed 2"); |
655 _analyzeAll_assertFinished(); | 547 _analyzeAll_assertFinished(); |
656 expect( | 548 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
657 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
658 reason: "library resolved 2"); | 549 reason: "library resolved 2"); |
659 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 550 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
660 reason: "part resolved 2"); | 551 reason: "part resolved 2"); |
661 // update and analyze #2 | 552 // update and analyze #2 |
662 _context.setContents(partSource, "part of lib; // 1"); | 553 context.setContents(partSource, "part of lib; // 1"); |
663 // Assert that changing the part's content does not effect the library | 554 // Assert that changing the part's content does not effect the library |
664 // now that it is no longer part of that library | 555 // now that it is no longer part of that library |
665 expect( | 556 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
666 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
667 reason: "library changed 3"); | 557 reason: "library changed 3"); |
668 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 558 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
669 reason: "part changed 3"); | 559 reason: "part changed 3"); |
670 _analyzeAll_assertFinished(); | 560 _analyzeAll_assertFinished(); |
671 expect( | 561 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
672 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
673 reason: "library resolved 3"); | 562 reason: "library resolved 3"); |
674 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 563 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
675 reason: "part resolved 3"); | 564 reason: "part resolved 3"); |
676 } | 565 } |
677 | 566 |
678 void fail_performAnalysisTask_changePartContents_makeItAPart() { | 567 void fail_performAnalysisTask_changePartContents_makeItAPart() { |
679 Source libSource = _addSource("/lib.dart", r''' | 568 Source libSource = addSource("/lib.dart", r''' |
680 library lib; | 569 library lib; |
681 part 'part.dart'; | 570 part 'part.dart'; |
682 void f(x) {}'''); | 571 void f(x) {}'''); |
683 Source partSource = _addSource("/part.dart", "void g() { f(null); }"); | 572 Source partSource = addSource("/part.dart", "void g() { f(null); }"); |
684 _analyzeAll_assertFinished(); | 573 _analyzeAll_assertFinished(); |
685 expect( | 574 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
686 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
687 reason: "library resolved 1"); | 575 reason: "library resolved 1"); |
688 expect( | 576 expect( |
689 _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, | 577 context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, |
690 reason: "part resolved 1"); | 578 reason: "part resolved 1"); |
691 // update and analyze | 579 // update and analyze |
692 _context.setContents(partSource, r''' | 580 context.setContents(partSource, r''' |
693 part of lib; | 581 part of lib; |
694 void g() { f(null); }'''); | 582 void g() { f(null); }'''); |
695 expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull, | 583 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull, |
696 reason: "library changed 2"); | 584 reason: "library changed 2"); |
697 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 585 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
698 reason: "part changed 2"); | 586 reason: "part changed 2"); |
699 _analyzeAll_assertFinished(); | 587 _analyzeAll_assertFinished(); |
700 expect( | 588 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
701 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
702 reason: "library resolved 2"); | 589 reason: "library resolved 2"); |
703 expect( | 590 expect( |
704 _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, | 591 context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, |
705 reason: "part resolved 2"); | 592 reason: "part resolved 2"); |
706 expect(_context.getErrors(libSource).errors, hasLength(0)); | 593 expect(context.getErrors(libSource).errors, hasLength(0)); |
707 expect(_context.getErrors(partSource).errors, hasLength(0)); | 594 expect(context.getErrors(partSource).errors, hasLength(0)); |
708 } | 595 } |
709 | 596 |
710 /** | 597 /** |
711 * https://code.google.com/p/dart/issues/detail?id=12424 | 598 * https://code.google.com/p/dart/issues/detail?id=12424 |
712 */ | 599 */ |
713 void fail_performAnalysisTask_changePartContents_makeItNotPart() { | 600 void fail_performAnalysisTask_changePartContents_makeItNotPart() { |
714 Source libSource = _addSource("/lib.dart", r''' | 601 Source libSource = addSource("/lib.dart", r''' |
715 library lib; | 602 library lib; |
716 part 'part.dart'; | 603 part 'part.dart'; |
717 void f(x) {}'''); | 604 void f(x) {}'''); |
718 Source partSource = _addSource("/part.dart", r''' | 605 Source partSource = addSource("/part.dart", r''' |
719 part of lib; | 606 part of lib; |
720 void g() { f(null); }'''); | 607 void g() { f(null); }'''); |
721 _analyzeAll_assertFinished(); | 608 _analyzeAll_assertFinished(); |
722 expect(_context.getErrors(libSource).errors, hasLength(0)); | 609 expect(context.getErrors(libSource).errors, hasLength(0)); |
723 expect(_context.getErrors(partSource).errors, hasLength(0)); | 610 expect(context.getErrors(partSource).errors, hasLength(0)); |
724 // Remove 'part' directive, which should make "f(null)" an error. | 611 // Remove 'part' directive, which should make "f(null)" an error. |
725 _context.setContents(partSource, r''' | 612 context.setContents(partSource, r''' |
726 //part of lib; | 613 //part of lib; |
727 void g() { f(null); }'''); | 614 void g() { f(null); }'''); |
728 _analyzeAll_assertFinished(); | 615 _analyzeAll_assertFinished(); |
729 expect(_context.getErrors(libSource).errors.length != 0, isTrue); | 616 expect(context.getErrors(libSource).errors.length != 0, isTrue); |
730 } | 617 } |
731 | 618 |
732 void fail_performAnalysisTask_changePartContents_noSemanticChanges() { | 619 void fail_performAnalysisTask_changePartContents_noSemanticChanges() { |
733 Source libSource = | 620 Source libSource = |
734 _addSource("/test.dart", "library lib; part 'test-part.dart';"); | 621 addSource("/test.dart", "library lib; part 'test-part.dart';"); |
735 Source partSource = _addSource("/test-part.dart", "part of lib;"); | 622 Source partSource = addSource("/test-part.dart", "part of lib;"); |
736 _analyzeAll_assertFinished(); | 623 _analyzeAll_assertFinished(); |
737 expect( | 624 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
738 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
739 reason: "library resolved 1"); | 625 reason: "library resolved 1"); |
740 expect( | 626 expect( |
741 _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, | 627 context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, |
742 reason: "part resolved 1"); | 628 reason: "part resolved 1"); |
743 // update and analyze #1 | 629 // update and analyze #1 |
744 _context.setContents(partSource, "part of lib; // 1"); | 630 context.setContents(partSource, "part of lib; // 1"); |
745 expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull, | 631 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull, |
746 reason: "library changed 2"); | 632 reason: "library changed 2"); |
747 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 633 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
748 reason: "part changed 2"); | 634 reason: "part changed 2"); |
749 _analyzeAll_assertFinished(); | 635 _analyzeAll_assertFinished(); |
750 expect( | 636 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
751 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
752 reason: "library resolved 2"); | 637 reason: "library resolved 2"); |
753 expect( | 638 expect( |
754 _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, | 639 context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, |
755 reason: "part resolved 2"); | 640 reason: "part resolved 2"); |
756 // update and analyze #2 | 641 // update and analyze #2 |
757 _context.setContents(partSource, "part of lib; // 12"); | 642 context.setContents(partSource, "part of lib; // 12"); |
758 expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull, | 643 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull, |
759 reason: "library changed 3"); | 644 reason: "library changed 3"); |
760 expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull, | 645 expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull, |
761 reason: "part changed 3"); | 646 reason: "part changed 3"); |
762 _analyzeAll_assertFinished(); | 647 _analyzeAll_assertFinished(); |
763 expect( | 648 expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, |
764 _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, | |
765 reason: "library resolved 3"); | 649 reason: "library resolved 3"); |
766 expect( | 650 expect( |
767 _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, | 651 context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, |
768 reason: "part resolved 3"); | 652 reason: "part resolved 3"); |
769 } | 653 } |
770 | 654 |
771 void fail_performAnalysisTask_getContentException_dart() { | 655 void fail_performAnalysisTask_getContentException_dart() { |
772 // add source that throw an exception on "get content" | 656 // add source that throw an exception on "get content" |
773 Source source = new _Source_getContent_throwException('test.dart'); | 657 Source source = new _Source_getContent_throwException('test.dart'); |
774 { | 658 { |
775 ChangeSet changeSet = new ChangeSet(); | 659 ChangeSet changeSet = new ChangeSet(); |
776 changeSet.addedSource(source); | 660 changeSet.addedSource(source); |
777 _context.applyChanges(changeSet); | 661 context.applyChanges(changeSet); |
778 } | 662 } |
779 // prepare errors | 663 // prepare errors |
780 _analyzeAll_assertFinished(); | 664 _analyzeAll_assertFinished(); |
781 List<AnalysisError> errors = _context.getErrors(source).errors; | 665 List<AnalysisError> errors = context.getErrors(source).errors; |
782 // validate errors | 666 // validate errors |
783 expect(errors, hasLength(1)); | 667 expect(errors, hasLength(1)); |
784 AnalysisError error = errors[0]; | 668 AnalysisError error = errors[0]; |
785 expect(error.source, same(source)); | 669 expect(error.source, same(source)); |
786 expect(error.errorCode, ScannerErrorCode.UNABLE_GET_CONTENT); | 670 expect(error.errorCode, ScannerErrorCode.UNABLE_GET_CONTENT); |
787 } | 671 } |
788 | 672 |
789 void fail_performAnalysisTask_getContentException_html() { | 673 void fail_performAnalysisTask_getContentException_html() { |
790 // add source that throw an exception on "get content" | 674 // add source that throw an exception on "get content" |
791 Source source = new _Source_getContent_throwException('test.html'); | 675 Source source = new _Source_getContent_throwException('test.html'); |
792 { | 676 { |
793 ChangeSet changeSet = new ChangeSet(); | 677 ChangeSet changeSet = new ChangeSet(); |
794 changeSet.addedSource(source); | 678 changeSet.addedSource(source); |
795 _context.applyChanges(changeSet); | 679 context.applyChanges(changeSet); |
796 } | 680 } |
797 // prepare errors | 681 // prepare errors |
798 _analyzeAll_assertFinished(); | 682 _analyzeAll_assertFinished(); |
799 List<AnalysisError> errors = _context.getErrors(source).errors; | 683 List<AnalysisError> errors = context.getErrors(source).errors; |
800 // validate errors | 684 // validate errors |
801 expect(errors, hasLength(1)); | 685 expect(errors, hasLength(1)); |
802 AnalysisError error = errors[0]; | 686 AnalysisError error = errors[0]; |
803 expect(error.source, same(source)); | 687 expect(error.source, same(source)); |
804 expect(error.errorCode, ScannerErrorCode.UNABLE_GET_CONTENT); | 688 expect(error.errorCode, ScannerErrorCode.UNABLE_GET_CONTENT); |
805 } | 689 } |
806 | 690 |
807 void fail_performAnalysisTask_importedLibraryAdd() { | 691 void fail_performAnalysisTask_importedLibraryAdd() { |
808 Source libASource = | 692 Source libASource = |
809 _addSource("/libA.dart", "library libA; import 'libB.dart';"); | 693 addSource("/libA.dart", "library libA; import 'libB.dart';"); |
810 _analyzeAll_assertFinished(); | 694 _analyzeAll_assertFinished(); |
811 expect( | 695 expect( |
812 _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, | 696 context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, |
813 reason: "libA resolved 1"); | 697 reason: "libA resolved 1"); |
814 expect(_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)), | 698 expect(_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)), |
815 isTrue, reason: "libA has an error"); | 699 isTrue, reason: "libA has an error"); |
816 // add libB.dart and analyze | 700 // add libB.dart and analyze |
817 Source libBSource = _addSource("/libB.dart", "library libB;"); | 701 Source libBSource = addSource("/libB.dart", "library libB;"); |
818 _analyzeAll_assertFinished(); | 702 _analyzeAll_assertFinished(); |
819 expect( | 703 expect( |
820 _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, | 704 context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, |
821 reason: "libA resolved 2"); | 705 reason: "libA resolved 2"); |
822 expect( | 706 expect( |
823 _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, | 707 context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, |
824 reason: "libB resolved 2"); | 708 reason: "libB resolved 2"); |
825 expect(!_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)), | 709 expect(!_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)), |
826 isTrue, reason: "libA doesn't have errors"); | 710 isTrue, reason: "libA doesn't have errors"); |
827 } | 711 } |
828 | 712 |
829 void fail_performAnalysisTask_importedLibraryAdd_html() { | 713 void fail_performAnalysisTask_importedLibraryAdd_html() { |
830 Source htmlSource = _addSource("/page.html", r''' | 714 Source htmlSource = addSource("/page.html", r''' |
831 <html><body><script type="application/dart"> | 715 <html><body><script type="application/dart"> |
832 import '/libB.dart'; | 716 import '/libB.dart'; |
833 main() {print('hello dart');} | 717 main() {print('hello dart');} |
834 </script></body></html>'''); | 718 </script></body></html>'''); |
835 _analyzeAll_assertFinished(); | 719 _analyzeAll_assertFinished(); |
836 expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull, | 720 expect(context.getResolvedHtmlUnit(htmlSource), isNotNull, |
837 reason: "htmlUnit resolved 1"); | 721 reason: "htmlUnit resolved 1"); |
838 expect(_hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)), | 722 expect(_hasAnalysisErrorWithErrorSeverity(context.getErrors(htmlSource)), |
839 isTrue, reason: "htmlSource has an error"); | 723 isTrue, reason: "htmlSource has an error"); |
840 // add libB.dart and analyze | 724 // add libB.dart and analyze |
841 Source libBSource = _addSource("/libB.dart", "library libB;"); | 725 Source libBSource = addSource("/libB.dart", "library libB;"); |
842 _analyzeAll_assertFinished(); | 726 _analyzeAll_assertFinished(); |
843 expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull, | 727 expect(context.getResolvedHtmlUnit(htmlSource), isNotNull, |
844 reason: "htmlUnit resolved 1"); | 728 reason: "htmlUnit resolved 1"); |
845 expect( | 729 expect( |
846 _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, | 730 context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, |
847 reason: "libB resolved 2"); | 731 reason: "libB resolved 2"); |
848 // TODO (danrubel) commented out to fix red bots | 732 // TODO (danrubel) commented out to fix red bots |
849 // AnalysisErrorInfo errors = _context.getErrors(htmlSource); | 733 // AnalysisErrorInfo errors = _context.getErrors(htmlSource); |
850 // expect( | 734 // expect( |
851 // !_hasAnalysisErrorWithErrorSeverity(errors), | 735 // !_hasAnalysisErrorWithErrorSeverity(errors), |
852 // isTrue, | 736 // isTrue, |
853 // reason: "htmlSource doesn't have errors"); | 737 // reason: "htmlSource doesn't have errors"); |
854 } | 738 } |
855 | 739 |
856 void fail_performAnalysisTask_importedLibraryDelete() { | 740 void fail_performAnalysisTask_importedLibraryDelete() { |
857 Source libASource = | 741 Source libASource = |
858 _addSource("/libA.dart", "library libA; import 'libB.dart';"); | 742 addSource("/libA.dart", "library libA; import 'libB.dart';"); |
859 Source libBSource = _addSource("/libB.dart", "library libB;"); | 743 Source libBSource = addSource("/libB.dart", "library libB;"); |
860 _analyzeAll_assertFinished(); | 744 _analyzeAll_assertFinished(); |
861 expect( | 745 expect( |
862 _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, | 746 context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, |
863 reason: "libA resolved 1"); | 747 reason: "libA resolved 1"); |
864 expect( | 748 expect( |
865 _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, | 749 context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, |
866 reason: "libB resolved 1"); | 750 reason: "libB resolved 1"); |
867 expect(!_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)), | 751 expect(!_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)), |
868 isTrue, reason: "libA doesn't have errors"); | 752 isTrue, reason: "libA doesn't have errors"); |
869 // remove libB.dart content and analyze | 753 // remove libB.dart content and analyze |
870 _context.setContents(libBSource, null); | 754 context.setContents(libBSource, null); |
871 _analyzeAll_assertFinished(); | 755 _analyzeAll_assertFinished(); |
872 expect( | 756 expect( |
873 _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, | 757 context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, |
874 reason: "libA resolved 2"); | 758 reason: "libA resolved 2"); |
875 expect(_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)), | 759 expect(_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)), |
876 isTrue, reason: "libA has an error"); | 760 isTrue, reason: "libA has an error"); |
877 } | 761 } |
878 | 762 |
879 void fail_performAnalysisTask_importedLibraryDelete_html() { | 763 void fail_performAnalysisTask_importedLibraryDelete_html() { |
880 // NOTE: This was failing before converting to the new task model. | 764 // NOTE: This was failing before converting to the new task model. |
881 Source htmlSource = _addSource("/page.html", r''' | 765 Source htmlSource = addSource("/page.html", r''' |
882 <html><body><script type="application/dart"> | 766 <html><body><script type="application/dart"> |
883 import 'libB.dart'; | 767 import 'libB.dart'; |
884 main() {print('hello dart');} | 768 main() {print('hello dart');} |
885 </script></body></html>'''); | 769 </script></body></html>'''); |
886 Source libBSource = _addSource("/libB.dart", "library libB;"); | 770 Source libBSource = addSource("/libB.dart", "library libB;"); |
887 _analyzeAll_assertFinished(); | 771 _analyzeAll_assertFinished(); |
888 expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull, | 772 expect(context.getResolvedHtmlUnit(htmlSource), isNotNull, |
889 reason: "htmlUnit resolved 1"); | 773 reason: "htmlUnit resolved 1"); |
890 expect( | 774 expect( |
891 _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, | 775 context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, |
892 reason: "libB resolved 1"); | 776 reason: "libB resolved 1"); |
893 expect(!_hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)), | 777 expect(!_hasAnalysisErrorWithErrorSeverity(context.getErrors(htmlSource)), |
894 isTrue, reason: "htmlSource doesn't have errors"); | 778 isTrue, reason: "htmlSource doesn't have errors"); |
895 // remove libB.dart content and analyze | 779 // remove libB.dart content and analyze |
896 _context.setContents(libBSource, null); | 780 context.setContents(libBSource, null); |
897 _analyzeAll_assertFinished(); | 781 _analyzeAll_assertFinished(); |
898 expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull, | 782 expect(context.getResolvedHtmlUnit(htmlSource), isNotNull, |
899 reason: "htmlUnit resolved 1"); | 783 reason: "htmlUnit resolved 1"); |
900 AnalysisErrorInfo errors = _context.getErrors(htmlSource); | 784 AnalysisErrorInfo errors = context.getErrors(htmlSource); |
901 expect(_hasAnalysisErrorWithErrorSeverity(errors), isTrue, | 785 expect(_hasAnalysisErrorWithErrorSeverity(errors), isTrue, |
902 reason: "htmlSource has an error"); | 786 reason: "htmlSource has an error"); |
903 } | 787 } |
904 | 788 |
905 void fail_performAnalysisTask_IOException() { | 789 void fail_performAnalysisTask_IOException() { |
906 TestSource source = _addSourceWithException2("/test.dart", "library test;"); | 790 TestSource source = _addSourceWithException2("/test.dart", "library test;"); |
907 int oldTimestamp = _context.getModificationStamp(source); | 791 int oldTimestamp = context.getModificationStamp(source); |
908 source.generateExceptionOnRead = false; | 792 source.generateExceptionOnRead = false; |
909 _analyzeAll_assertFinished(); | 793 _analyzeAll_assertFinished(); |
910 expect(source.readCount, 1); | 794 expect(source.readCount, 1); |
911 source.generateExceptionOnRead = true; | 795 source.generateExceptionOnRead = true; |
912 do { | 796 do { |
913 _changeSource(source, ""); | 797 _changeSource(source, ""); |
914 // Ensure that the timestamp differs, | 798 // Ensure that the timestamp differs, |
915 // so that analysis engine notices the change | 799 // so that analysis engine notices the change |
916 } while (oldTimestamp == _context.getModificationStamp(source)); | 800 } while (oldTimestamp == context.getModificationStamp(source)); |
917 _analyzeAll_assertFinished(); | 801 _analyzeAll_assertFinished(); |
918 expect(source.readCount, 2); | 802 expect(source.readCount, 2); |
919 } | 803 } |
920 | 804 |
921 void fail_performAnalysisTask_missingPart() { | 805 void fail_performAnalysisTask_missingPart() { |
922 Source source = | 806 Source source = |
923 _addSource("/test.dart", "library lib; part 'no-such-file.dart';"); | 807 addSource("/test.dart", "library lib; part 'no-such-file.dart';"); |
924 _analyzeAll_assertFinished(); | 808 _analyzeAll_assertFinished(); |
925 expect(_context.getLibraryElement(source), isNotNull, | 809 expect(context.getLibraryElement(source), isNotNull, |
926 reason: "performAnalysisTask failed to compute an element model"); | 810 reason: "performAnalysisTask failed to compute an element model"); |
927 } | 811 } |
928 | 812 |
929 void fail_recordLibraryElements() { | 813 void fail_recordLibraryElements() { |
930 fail("Implement this"); | 814 fail("Implement this"); |
931 } | 815 } |
932 | 816 |
933 void fail_resolveCompilationUnit_import_relative() { | 817 void fail_resolveCompilationUnit_import_relative() { |
934 _context = contextWithCore(); | |
935 Source sourceA = | 818 Source sourceA = |
936 _addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}"); | 819 addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}"); |
937 _addSource("/libB.dart", "library libB; class B{}"); | 820 addSource("/libB.dart", "library libB; class B{}"); |
938 CompilationUnit compilationUnit = | 821 CompilationUnit compilationUnit = |
939 _context.resolveCompilationUnit2(sourceA, sourceA); | 822 context.resolveCompilationUnit2(sourceA, sourceA); |
940 expect(compilationUnit, isNotNull); | 823 expect(compilationUnit, isNotNull); |
941 LibraryElement library = compilationUnit.element.library; | 824 LibraryElement library = compilationUnit.element.library; |
942 List<LibraryElement> importedLibraries = library.importedLibraries; | 825 List<LibraryElement> importedLibraries = library.importedLibraries; |
943 assertNamedElements(importedLibraries, ["dart.core", "libB"]); | 826 assertNamedElements(importedLibraries, ["dart.core", "libB"]); |
944 List<LibraryElement> visibleLibraries = library.visibleLibraries; | 827 List<LibraryElement> visibleLibraries = library.visibleLibraries; |
945 assertNamedElements(visibleLibraries, ["dart.core", "libA", "libB"]); | 828 assertNamedElements(visibleLibraries, ["dart.core", "libA", "libB"]); |
946 } | 829 } |
947 | 830 |
948 void fail_resolveCompilationUnit_import_relative_cyclic() { | 831 void fail_resolveCompilationUnit_import_relative_cyclic() { |
949 _context = contextWithCore(); | |
950 Source sourceA = | 832 Source sourceA = |
951 _addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}"); | 833 addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}"); |
952 _addSource("/libB.dart", "library libB; import 'libA.dart'; class B{}"); | 834 addSource("/libB.dart", "library libB; import 'libA.dart'; class B{}"); |
953 CompilationUnit compilationUnit = | 835 CompilationUnit compilationUnit = |
954 _context.resolveCompilationUnit2(sourceA, sourceA); | 836 context.resolveCompilationUnit2(sourceA, sourceA); |
955 expect(compilationUnit, isNotNull); | 837 expect(compilationUnit, isNotNull); |
956 LibraryElement library = compilationUnit.element.library; | 838 LibraryElement library = compilationUnit.element.library; |
957 List<LibraryElement> importedLibraries = library.importedLibraries; | 839 List<LibraryElement> importedLibraries = library.importedLibraries; |
958 assertNamedElements(importedLibraries, ["dart.core", "libB"]); | 840 assertNamedElements(importedLibraries, ["dart.core", "libB"]); |
959 List<LibraryElement> visibleLibraries = library.visibleLibraries; | 841 List<LibraryElement> visibleLibraries = library.visibleLibraries; |
960 assertNamedElements(visibleLibraries, ["dart.core", "libA", "libB"]); | 842 assertNamedElements(visibleLibraries, ["dart.core", "libA", "libB"]); |
961 } | 843 } |
962 | 844 |
963 void fail_resolveHtmlUnit() { | 845 void fail_resolveHtmlUnit() { |
964 Source source = _addSource("/lib.html", "<html></html>"); | 846 Source source = addSource("/lib.html", "<html></html>"); |
965 ht.HtmlUnit unit = _context.resolveHtmlUnit(source); | 847 ht.HtmlUnit unit = context.resolveHtmlUnit(source); |
966 expect(unit, isNotNull); | 848 expect(unit, isNotNull); |
967 } | 849 } |
968 | 850 |
969 void fail_setAnalysisOptions_reduceAnalysisPriorityOrder() { | 851 void fail_setAnalysisOptions_reduceAnalysisPriorityOrder() { |
970 AnalysisOptionsImpl options = | 852 AnalysisOptionsImpl options = |
971 new AnalysisOptionsImpl.con1(_context.analysisOptions); | 853 new AnalysisOptionsImpl.con1(context.analysisOptions); |
972 List<Source> sources = new List<Source>(); | 854 List<Source> sources = new List<Source>(); |
973 for (int index = 0; index < options.cacheSize; index++) { | 855 for (int index = 0; index < options.cacheSize; index++) { |
974 sources.add(_addSource("/lib.dart$index", "")); | 856 sources.add(addSource("/lib.dart$index", "")); |
975 } | 857 } |
976 _context.analysisPriorityOrder = sources; | 858 context.analysisPriorityOrder = sources; |
977 int oldPriorityOrderSize = _getPriorityOrder(_context).length; | 859 int oldPriorityOrderSize = _getPriorityOrder(context).length; |
978 options.cacheSize = options.cacheSize - 10; | 860 options.cacheSize = options.cacheSize - 10; |
979 _context.analysisOptions = options; | 861 context.analysisOptions = options; |
980 expect(oldPriorityOrderSize > _getPriorityOrder(_context).length, isTrue); | 862 expect(oldPriorityOrderSize > _getPriorityOrder(context).length, isTrue); |
981 } | 863 } |
982 | 864 |
983 void fail_setAnalysisPriorityOrder_lessThanCacheSize() { | 865 void fail_setAnalysisPriorityOrder_lessThanCacheSize() { |
984 AnalysisOptions options = _context.analysisOptions; | 866 AnalysisOptions options = context.analysisOptions; |
985 List<Source> sources = new List<Source>(); | 867 List<Source> sources = new List<Source>(); |
986 for (int index = 0; index < options.cacheSize; index++) { | 868 for (int index = 0; index < options.cacheSize; index++) { |
987 sources.add(_addSource("/lib.dart$index", "")); | 869 sources.add(addSource("/lib.dart$index", "")); |
988 } | 870 } |
989 _context.analysisPriorityOrder = sources; | 871 context.analysisPriorityOrder = sources; |
990 expect(options.cacheSize > _getPriorityOrder(_context).length, isTrue); | 872 expect(options.cacheSize > _getPriorityOrder(context).length, isTrue); |
991 } | 873 } |
992 | 874 |
993 Future fail_setChangedContents_libraryWithPart() { | 875 Future fail_setChangedContents_libraryWithPart() { |
994 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); | 876 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); |
995 options.incremental = true; | 877 options.incremental = true; |
996 _context = new AnalysisContextForTests(); | 878 context.analysisOptions = options; |
997 _context.analysisOptions = options; | |
998 SourcesChangedListener listener = new SourcesChangedListener(); | 879 SourcesChangedListener listener = new SourcesChangedListener(); |
999 _context.onSourcesChanged.listen(listener.onData); | 880 context.onSourcesChanged.listen(listener.onData); |
1000 _sourceFactory = _context.sourceFactory; | |
1001 String oldCode = r''' | 881 String oldCode = r''' |
1002 library lib; | 882 library lib; |
1003 part 'part.dart'; | 883 part 'part.dart'; |
1004 int a = 0;'''; | 884 int a = 0;'''; |
1005 Source librarySource = _addSource("/lib.dart", oldCode); | 885 Source librarySource = addSource("/lib.dart", oldCode); |
1006 String partContents = r''' | 886 String partContents = r''' |
1007 part of lib; | 887 part of lib; |
1008 int b = a;'''; | 888 int b = a;'''; |
1009 Source partSource = _addSource("/part.dart", partContents); | 889 Source partSource = addSource("/part.dart", partContents); |
1010 LibraryElement element = _context.computeLibraryElement(librarySource); | 890 LibraryElement element = context.computeLibraryElement(librarySource); |
1011 CompilationUnit unit = | 891 CompilationUnit unit = |
1012 _context.getResolvedCompilationUnit(librarySource, element); | 892 context.getResolvedCompilationUnit(librarySource, element); |
1013 expect(unit, isNotNull); | 893 expect(unit, isNotNull); |
1014 int offset = oldCode.indexOf("int a") + 4; | 894 int offset = oldCode.indexOf("int a") + 4; |
1015 String newCode = r''' | 895 String newCode = r''' |
1016 library lib; | 896 library lib; |
1017 part 'part.dart'; | 897 part 'part.dart'; |
1018 int ya = 0;'''; | 898 int ya = 0;'''; |
1019 expect(_getIncrementalAnalysisCache(_context), isNull); | 899 expect(_getIncrementalAnalysisCache(context), isNull); |
1020 _context.setChangedContents(librarySource, newCode, offset, 0, 1); | 900 context.setChangedContents(librarySource, newCode, offset, 0, 1); |
1021 expect(_context.getContents(librarySource).data, newCode); | 901 expect(context.getContents(librarySource).data, newCode); |
1022 IncrementalAnalysisCache incrementalCache = | 902 IncrementalAnalysisCache incrementalCache = |
1023 _getIncrementalAnalysisCache(_context); | 903 _getIncrementalAnalysisCache(context); |
1024 expect(incrementalCache.librarySource, librarySource); | 904 expect(incrementalCache.librarySource, librarySource); |
1025 expect(incrementalCache.resolvedUnit, same(unit)); | 905 expect(incrementalCache.resolvedUnit, same(unit)); |
1026 expect(_context.getResolvedCompilationUnit2(partSource, librarySource), | 906 expect( |
1027 isNull); | 907 context.getResolvedCompilationUnit2(partSource, librarySource), isNull); |
1028 expect(incrementalCache.newContents, newCode); | 908 expect(incrementalCache.newContents, newCode); |
1029 return pumpEventQueue().then((_) { | 909 return pumpEventQueue().then((_) { |
1030 listener.assertEvent(wereSourcesAdded: true); | 910 listener.assertEvent(wereSourcesAdded: true); |
1031 listener.assertEvent(changedSources: [librarySource]); | 911 listener.assertEvent(changedSources: [librarySource]); |
1032 listener.assertEvent(wereSourcesAdded: true); | 912 listener.assertEvent(wereSourcesAdded: true); |
1033 listener.assertEvent(changedSources: [partSource]); | 913 listener.assertEvent(changedSources: [partSource]); |
1034 listener.assertEvent(changedSources: [librarySource]); | 914 listener.assertEvent(changedSources: [librarySource]); |
1035 listener.assertNoMoreEvents(); | 915 listener.assertNoMoreEvents(); |
1036 }); | 916 }); |
1037 } | 917 } |
1038 | 918 |
1039 void fail_setContents_unchanged_consistentModificationTime() { | 919 void test_setContents_unchanged_consistentModificationTime() { |
1040 String contents = "// foo"; | 920 String contents = "// foo"; |
1041 Source source = _addSource("/test.dart", contents); | 921 Source source = addSource("/test.dart", contents); |
1042 // do all, no tasks | 922 // do all, no tasks |
1043 _analyzeAll_assertFinished(); | 923 _analyzeAll_assertFinished(); |
1044 { | 924 { |
1045 AnalysisResult result = _context.performAnalysisTask(); | 925 AnalysisResult result = context.performAnalysisTask(); |
1046 expect(result.changeNotices, isNull); | 926 expect(result.changeNotices, isNull); |
1047 } | 927 } |
1048 // set the same contents, still no tasks | 928 // set the same contents, still no tasks |
1049 _context.setContents(source, contents); | 929 context.setContents(source, contents); |
1050 { | 930 { |
1051 AnalysisResult result = _context.performAnalysisTask(); | 931 AnalysisResult result = context.performAnalysisTask(); |
1052 expect(result.changeNotices, isNull); | 932 expect(result.changeNotices, isNull); |
1053 } | 933 } |
1054 } | 934 } |
1055 | 935 |
1056 void fail_unreadableSource() { | 936 void fail_unreadableSource() { |
1057 _context = contextWithCore(); | 937 Source test1 = addSource("/test1.dart", r''' |
1058 _sourceFactory = _context.sourceFactory; | |
1059 Source test1 = _addSource("/test1.dart", r''' | |
1060 import 'test2.dart'; | 938 import 'test2.dart'; |
1061 library test1;'''); | 939 library test1;'''); |
1062 Source test2 = _addSource("/test2.dart", r''' | 940 Source test2 = addSource("/test2.dart", r''' |
1063 import 'test1.dart'; | 941 import 'test1.dart'; |
1064 import 'test3.dart'; | 942 import 'test3.dart'; |
1065 library test2;'''); | 943 library test2;'''); |
1066 Source test3 = _addSourceWithException("/test3.dart"); | 944 Source test3 = _addSourceWithException("/test3.dart"); |
1067 _analyzeAll_assertFinished(); | 945 _analyzeAll_assertFinished(); |
1068 // test1 and test2 should have been successfully analyzed | 946 // test1 and test2 should have been successfully analyzed |
1069 // despite the fact that test3 couldn't be read. | 947 // despite the fact that test3 couldn't be read. |
1070 expect(_context.computeLibraryElement(test1), isNotNull); | 948 expect(context.computeLibraryElement(test1), isNotNull); |
1071 expect(_context.computeLibraryElement(test2), isNotNull); | 949 expect(context.computeLibraryElement(test2), isNotNull); |
1072 expect(_context.computeLibraryElement(test3), isNull); | 950 expect(context.computeLibraryElement(test3), isNull); |
1073 } | |
1074 | |
1075 @override | |
1076 void setUp() { | |
1077 EnginePlugin enginePlugin = AnalysisEngine.instance.enginePlugin; | |
1078 if (enginePlugin.taskExtensionPoint == null) { | |
1079 ExtensionManager manager = new ExtensionManager(); | |
1080 manager.processPlugins([enginePlugin]); | |
1081 } | |
1082 | |
1083 _context = new AnalysisContextImpl(); | |
1084 _sourceFactory = new SourceFactory([ | |
1085 new DartUriResolver(DirectoryBasedDartSdk.defaultSdk), | |
1086 new FileUriResolver() | |
1087 ]); | |
1088 _context.sourceFactory = _sourceFactory; | |
1089 AnalysisOptionsImpl options = | |
1090 new AnalysisOptionsImpl.con1(_context.analysisOptions); | |
1091 options.cacheSize = 256; | |
1092 _context.analysisOptions = options; | |
1093 } | |
1094 | |
1095 void test_applyChanges_change_flush_element() { | |
1096 _context = contextWithCore(); | |
1097 _sourceFactory = _context.sourceFactory; | |
1098 Source librarySource = _addSource("/lib.dart", r''' | |
1099 library lib; | |
1100 int a = 0;'''); | |
1101 expect(_context.computeLibraryElement(librarySource), isNotNull); | |
1102 _context.setContents(librarySource, r''' | |
1103 library lib; | |
1104 int aa = 0;'''); | |
1105 expect(_context.getLibraryElement(librarySource), isNull); | |
1106 } | 951 } |
1107 | 952 |
1108 @override | 953 @override |
1109 void tearDown() { | 954 void tearDown() { |
1110 _context = null; | 955 context = null; |
1111 _sourceFactory = null; | 956 sourceFactory = null; |
1112 super.tearDown(); | 957 super.tearDown(); |
1113 } | 958 } |
1114 | 959 |
1115 Future test_applyChanges_add() { | 960 Future test_applyChanges_add() { |
1116 SourcesChangedListener listener = new SourcesChangedListener(); | 961 SourcesChangedListener listener = new SourcesChangedListener(); |
1117 _context.onSourcesChanged.listen(listener.onData); | 962 context.onSourcesChanged.listen(listener.onData); |
1118 expect(_context.sourcesNeedingProcessing, isEmpty); | 963 expect(context.sourcesNeedingProcessing, isEmpty); |
1119 Source source = | 964 Source source = newSource('/test.dart'); |
1120 new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); | |
1121 ChangeSet changeSet = new ChangeSet(); | 965 ChangeSet changeSet = new ChangeSet(); |
1122 changeSet.addedSource(source); | 966 changeSet.addedSource(source); |
1123 _context.applyChanges(changeSet); | 967 context.applyChanges(changeSet); |
1124 expect(_context.sourcesNeedingProcessing, contains(source)); | 968 expect(context.sourcesNeedingProcessing, contains(source)); |
1125 return pumpEventQueue().then((_) { | 969 return pumpEventQueue().then((_) { |
1126 listener.assertEvent(wereSourcesAdded: true); | 970 listener.assertEvent(wereSourcesAdded: true); |
1127 listener.assertNoMoreEvents(); | 971 listener.assertNoMoreEvents(); |
1128 }); | 972 }); |
1129 } | 973 } |
1130 | 974 |
1131 Future test_applyChanges_change() { | 975 Future test_applyChanges_change() { |
1132 SourcesChangedListener listener = new SourcesChangedListener(); | 976 SourcesChangedListener listener = new SourcesChangedListener(); |
1133 _context.onSourcesChanged.listen(listener.onData); | 977 context.onSourcesChanged.listen(listener.onData); |
1134 expect(_context.sourcesNeedingProcessing, isEmpty); | 978 expect(context.sourcesNeedingProcessing, isEmpty); |
1135 Source source = | 979 Source source = newSource('/test.dart'); |
1136 new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); | |
1137 ChangeSet changeSet1 = new ChangeSet(); | 980 ChangeSet changeSet1 = new ChangeSet(); |
1138 changeSet1.addedSource(source); | 981 changeSet1.addedSource(source); |
1139 _context.applyChanges(changeSet1); | 982 context.applyChanges(changeSet1); |
1140 expect(_context.sourcesNeedingProcessing, contains(source)); | 983 expect(context.sourcesNeedingProcessing, contains(source)); |
1141 Source source2 = | 984 Source source2 = newSource('/test2.dart'); |
1142 new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart")); | |
1143 ChangeSet changeSet2 = new ChangeSet(); | 985 ChangeSet changeSet2 = new ChangeSet(); |
1144 changeSet2.addedSource(source2); | 986 changeSet2.addedSource(source2); |
1145 changeSet2.changedSource(source); | 987 changeSet2.changedSource(source); |
1146 _context.applyChanges(changeSet2); | 988 context.applyChanges(changeSet2); |
1147 return pumpEventQueue().then((_) { | 989 return pumpEventQueue().then((_) { |
1148 listener.assertEvent(wereSourcesAdded: true); | 990 listener.assertEvent(wereSourcesAdded: true); |
1149 listener.assertEvent(wereSourcesAdded: true, changedSources: [source]); | 991 listener.assertEvent(wereSourcesAdded: true, changedSources: [source]); |
1150 listener.assertNoMoreEvents(); | 992 listener.assertNoMoreEvents(); |
1151 }); | 993 }); |
1152 } | 994 } |
1153 | 995 |
1154 Future test_applyChanges_change_content() { | 996 Future test_applyChanges_change_content() { |
1155 SourcesChangedListener listener = new SourcesChangedListener(); | 997 SourcesChangedListener listener = new SourcesChangedListener(); |
1156 _context.onSourcesChanged.listen(listener.onData); | 998 context.onSourcesChanged.listen(listener.onData); |
1157 expect(_context.sourcesNeedingProcessing, isEmpty); | 999 expect(context.sourcesNeedingProcessing, isEmpty); |
1158 Source source = | 1000 Source source = newSource('/test.dart'); |
1159 new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); | |
1160 ChangeSet changeSet1 = new ChangeSet(); | 1001 ChangeSet changeSet1 = new ChangeSet(); |
1161 changeSet1.addedSource(source); | 1002 changeSet1.addedSource(source); |
1162 _context.applyChanges(changeSet1); | 1003 context.applyChanges(changeSet1); |
1163 expect(_context.sourcesNeedingProcessing, contains(source)); | 1004 expect(context.sourcesNeedingProcessing, contains(source)); |
1164 Source source2 = | 1005 Source source2 = newSource('/test2.dart'); |
1165 new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart")); | |
1166 ChangeSet changeSet2 = new ChangeSet(); | 1006 ChangeSet changeSet2 = new ChangeSet(); |
1167 changeSet2.addedSource(source2); | 1007 changeSet2.addedSource(source2); |
1168 changeSet2.changedContent(source, 'library test;'); | 1008 changeSet2.changedContent(source, 'library test;'); |
1169 _context.applyChanges(changeSet2); | 1009 context.applyChanges(changeSet2); |
1170 return pumpEventQueue().then((_) { | 1010 return pumpEventQueue().then((_) { |
1171 listener.assertEvent(wereSourcesAdded: true); | 1011 listener.assertEvent(wereSourcesAdded: true); |
1172 listener.assertEvent(wereSourcesAdded: true, changedSources: [source]); | 1012 listener.assertEvent(wereSourcesAdded: true, changedSources: [source]); |
1173 listener.assertNoMoreEvents(); | 1013 listener.assertNoMoreEvents(); |
1174 }); | 1014 }); |
1175 } | 1015 } |
1176 | 1016 |
| 1017 void test_applyChanges_change_flush_element() { |
| 1018 Source librarySource = addSource("/lib.dart", r''' |
| 1019 library lib; |
| 1020 int a = 0;'''); |
| 1021 expect(context.computeLibraryElement(librarySource), isNotNull); |
| 1022 context.setContents(librarySource, r''' |
| 1023 library lib; |
| 1024 int aa = 0;'''); |
| 1025 expect(context.getLibraryElement(librarySource), isNull); |
| 1026 } |
| 1027 |
1177 Future test_applyChanges_change_multiple() { | 1028 Future test_applyChanges_change_multiple() { |
1178 _context = contextWithCore(); | |
1179 SourcesChangedListener listener = new SourcesChangedListener(); | 1029 SourcesChangedListener listener = new SourcesChangedListener(); |
1180 _context.onSourcesChanged.listen(listener.onData); | 1030 context.onSourcesChanged.listen(listener.onData); |
1181 _sourceFactory = _context.sourceFactory; | |
1182 String libraryContents1 = r''' | 1031 String libraryContents1 = r''' |
1183 library lib; | 1032 library lib; |
1184 part 'part.dart'; | 1033 part 'part.dart'; |
1185 int a = 0;'''; | 1034 int a = 0;'''; |
1186 Source librarySource = _addSource("/lib.dart", libraryContents1); | 1035 Source librarySource = addSource("/lib.dart", libraryContents1); |
1187 String partContents1 = r''' | 1036 String partContents1 = r''' |
1188 part of lib; | 1037 part of lib; |
1189 int b = a;'''; | 1038 int b = a;'''; |
1190 Source partSource = _addSource("/part.dart", partContents1); | 1039 Source partSource = addSource("/part.dart", partContents1); |
1191 _context.computeLibraryElement(librarySource); | 1040 context.computeLibraryElement(librarySource); |
1192 String libraryContents2 = r''' | 1041 String libraryContents2 = r''' |
1193 library lib; | 1042 library lib; |
1194 part 'part.dart'; | 1043 part 'part.dart'; |
1195 int aa = 0;'''; | 1044 int aa = 0;'''; |
1196 _context.setContents(librarySource, libraryContents2); | 1045 context.setContents(librarySource, libraryContents2); |
1197 String partContents2 = r''' | 1046 String partContents2 = r''' |
1198 part of lib; | 1047 part of lib; |
1199 int b = aa;'''; | 1048 int b = aa;'''; |
1200 _context.setContents(partSource, partContents2); | 1049 context.setContents(partSource, partContents2); |
1201 _context.computeLibraryElement(librarySource); | 1050 context.computeLibraryElement(librarySource); |
1202 CompilationUnit libraryUnit = | 1051 CompilationUnit libraryUnit = |
1203 _context.resolveCompilationUnit2(librarySource, librarySource); | 1052 context.resolveCompilationUnit2(librarySource, librarySource); |
1204 expect(libraryUnit, isNotNull); | 1053 expect(libraryUnit, isNotNull); |
1205 CompilationUnit partUnit = | 1054 CompilationUnit partUnit = |
1206 _context.resolveCompilationUnit2(partSource, librarySource); | 1055 context.resolveCompilationUnit2(partSource, librarySource); |
1207 expect(partUnit, isNotNull); | 1056 expect(partUnit, isNotNull); |
1208 TopLevelVariableDeclaration declaration = | 1057 TopLevelVariableDeclaration declaration = |
1209 libraryUnit.declarations[0] as TopLevelVariableDeclaration; | 1058 libraryUnit.declarations[0] as TopLevelVariableDeclaration; |
1210 Element declarationElement = declaration.variables.variables[0].element; | 1059 Element declarationElement = declaration.variables.variables[0].element; |
1211 TopLevelVariableDeclaration use = | 1060 TopLevelVariableDeclaration use = |
1212 partUnit.declarations[0] as TopLevelVariableDeclaration; | 1061 partUnit.declarations[0] as TopLevelVariableDeclaration; |
1213 Element useElement = (use.variables.variables[ | 1062 Element useElement = (use.variables.variables[ |
1214 0].initializer as SimpleIdentifier).staticElement; | 1063 0].initializer as SimpleIdentifier).staticElement; |
1215 expect((useElement as PropertyAccessorElement).variable, | 1064 expect((useElement as PropertyAccessorElement).variable, |
1216 same(declarationElement)); | 1065 same(declarationElement)); |
1217 return pumpEventQueue().then((_) { | 1066 return pumpEventQueue().then((_) { |
1218 listener.assertEvent(wereSourcesAdded: true); | 1067 listener.assertEvent(wereSourcesAdded: true); |
1219 listener.assertEvent(changedSources: [librarySource]); | 1068 listener.assertEvent(changedSources: [librarySource]); |
1220 listener.assertEvent(wereSourcesAdded: true); | 1069 listener.assertEvent(wereSourcesAdded: true); |
1221 listener.assertEvent(changedSources: [partSource]); | 1070 listener.assertEvent(changedSources: [partSource]); |
1222 listener.assertEvent(changedSources: [librarySource]); | 1071 listener.assertEvent(changedSources: [librarySource]); |
1223 listener.assertEvent(changedSources: [partSource]); | 1072 listener.assertEvent(changedSources: [partSource]); |
1224 listener.assertNoMoreEvents(); | 1073 listener.assertNoMoreEvents(); |
1225 }); | 1074 }); |
1226 } | 1075 } |
1227 | 1076 |
1228 Future test_applyChanges_change_range() { | 1077 Future test_applyChanges_change_range() { |
1229 SourcesChangedListener listener = new SourcesChangedListener(); | 1078 SourcesChangedListener listener = new SourcesChangedListener(); |
1230 _context.onSourcesChanged.listen(listener.onData); | 1079 context.onSourcesChanged.listen(listener.onData); |
1231 expect(_context.sourcesNeedingProcessing, isEmpty); | 1080 expect(context.sourcesNeedingProcessing, isEmpty); |
1232 Source source = | 1081 Source source = newSource('/test.dart'); |
1233 new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); | |
1234 ChangeSet changeSet1 = new ChangeSet(); | 1082 ChangeSet changeSet1 = new ChangeSet(); |
1235 changeSet1.addedSource(source); | 1083 changeSet1.addedSource(source); |
1236 _context.applyChanges(changeSet1); | 1084 context.applyChanges(changeSet1); |
1237 expect(_context.sourcesNeedingProcessing, contains(source)); | 1085 expect(context.sourcesNeedingProcessing, contains(source)); |
1238 Source source2 = | 1086 Source source2 = newSource('/test2.dart'); |
1239 new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart")); | |
1240 ChangeSet changeSet2 = new ChangeSet(); | 1087 ChangeSet changeSet2 = new ChangeSet(); |
1241 changeSet2.addedSource(source2); | 1088 changeSet2.addedSource(source2); |
1242 changeSet2.changedRange(source, 'library test;', 0, 0, 13); | 1089 changeSet2.changedRange(source, 'library test;', 0, 0, 13); |
1243 _context.applyChanges(changeSet2); | 1090 context.applyChanges(changeSet2); |
1244 return pumpEventQueue().then((_) { | 1091 return pumpEventQueue().then((_) { |
1245 listener.assertEvent(wereSourcesAdded: true); | 1092 listener.assertEvent(wereSourcesAdded: true); |
1246 listener.assertEvent(wereSourcesAdded: true, changedSources: [source]); | 1093 listener.assertEvent(wereSourcesAdded: true, changedSources: [source]); |
1247 listener.assertNoMoreEvents(); | 1094 listener.assertNoMoreEvents(); |
1248 }); | 1095 }); |
1249 } | 1096 } |
1250 | 1097 |
1251 void test_computeDocumentationComment_block() { | 1098 void test_computeDocumentationComment_block() { |
1252 _context = contextWithCore(); | |
1253 _sourceFactory = _context.sourceFactory; | |
1254 String comment = "/** Comment */"; | 1099 String comment = "/** Comment */"; |
1255 Source source = _addSource("/test.dart", """ | 1100 Source source = addSource("/test.dart", """ |
1256 $comment | 1101 $comment |
1257 class A {}"""); | 1102 class A {}"""); |
1258 LibraryElement libraryElement = _context.computeLibraryElement(source); | 1103 LibraryElement libraryElement = context.computeLibraryElement(source); |
1259 expect(libraryElement, isNotNull); | 1104 expect(libraryElement, isNotNull); |
1260 ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; | 1105 ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; |
1261 expect(libraryElement, isNotNull); | 1106 expect(libraryElement, isNotNull); |
1262 expect(_context.computeDocumentationComment(classElement), comment); | 1107 expect(context.computeDocumentationComment(classElement), comment); |
1263 } | 1108 } |
1264 | 1109 |
1265 void test_computeDocumentationComment_none() { | 1110 void test_computeDocumentationComment_none() { |
1266 _context = contextWithCore(); | 1111 Source source = addSource("/test.dart", "class A {}"); |
1267 _sourceFactory = _context.sourceFactory; | 1112 LibraryElement libraryElement = context.computeLibraryElement(source); |
1268 Source source = _addSource("/test.dart", "class A {}"); | |
1269 LibraryElement libraryElement = _context.computeLibraryElement(source); | |
1270 expect(libraryElement, isNotNull); | 1113 expect(libraryElement, isNotNull); |
1271 ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; | 1114 ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; |
1272 expect(libraryElement, isNotNull); | 1115 expect(libraryElement, isNotNull); |
1273 expect(_context.computeDocumentationComment(classElement), isNull); | 1116 expect(context.computeDocumentationComment(classElement), isNull); |
1274 } | 1117 } |
1275 | 1118 |
1276 void test_computeDocumentationComment_null() { | 1119 void test_computeDocumentationComment_null() { |
1277 expect(_context.computeDocumentationComment(null), isNull); | 1120 expect(context.computeDocumentationComment(null), isNull); |
1278 } | 1121 } |
1279 | 1122 |
1280 void test_computeDocumentationComment_singleLine_multiple_EOL_n() { | 1123 void test_computeDocumentationComment_singleLine_multiple_EOL_n() { |
1281 _context = contextWithCore(); | |
1282 _sourceFactory = _context.sourceFactory; | |
1283 String comment = "/// line 1\n/// line 2\n/// line 3\n"; | 1124 String comment = "/// line 1\n/// line 2\n/// line 3\n"; |
1284 Source source = _addSource("/test.dart", "${comment}class A {}"); | 1125 Source source = addSource("/test.dart", "${comment}class A {}"); |
1285 LibraryElement libraryElement = _context.computeLibraryElement(source); | 1126 LibraryElement libraryElement = context.computeLibraryElement(source); |
1286 expect(libraryElement, isNotNull); | 1127 expect(libraryElement, isNotNull); |
1287 ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; | 1128 ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; |
1288 expect(libraryElement, isNotNull); | 1129 expect(libraryElement, isNotNull); |
1289 String actual = _context.computeDocumentationComment(classElement); | 1130 String actual = context.computeDocumentationComment(classElement); |
1290 expect(actual, "/// line 1\n/// line 2\n/// line 3"); | 1131 expect(actual, "/// line 1\n/// line 2\n/// line 3"); |
1291 } | 1132 } |
1292 | 1133 |
1293 void test_computeDocumentationComment_singleLine_multiple_EOL_rn() { | 1134 void test_computeDocumentationComment_singleLine_multiple_EOL_rn() { |
1294 _context = contextWithCore(); | |
1295 _sourceFactory = _context.sourceFactory; | |
1296 String comment = "/// line 1\r\n/// line 2\r\n/// line 3\r\n"; | 1135 String comment = "/// line 1\r\n/// line 2\r\n/// line 3\r\n"; |
1297 Source source = _addSource("/test.dart", "${comment}class A {}"); | 1136 Source source = addSource("/test.dart", "${comment}class A {}"); |
1298 LibraryElement libraryElement = _context.computeLibraryElement(source); | 1137 LibraryElement libraryElement = context.computeLibraryElement(source); |
1299 expect(libraryElement, isNotNull); | 1138 expect(libraryElement, isNotNull); |
1300 ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; | 1139 ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; |
1301 expect(libraryElement, isNotNull); | 1140 expect(libraryElement, isNotNull); |
1302 String actual = _context.computeDocumentationComment(classElement); | 1141 String actual = context.computeDocumentationComment(classElement); |
1303 expect(actual, "/// line 1\n/// line 2\n/// line 3"); | 1142 expect(actual, "/// line 1\n/// line 2\n/// line 3"); |
1304 } | 1143 } |
1305 | 1144 |
1306 void test_computeExportedLibraries_none() { | 1145 void test_computeExportedLibraries_none() { |
1307 Source source = _addSource("/test.dart", "library test;"); | 1146 Source source = addSource("/test.dart", "library test;"); |
1308 expect(_context.computeExportedLibraries(source), hasLength(0)); | 1147 expect(context.computeExportedLibraries(source), hasLength(0)); |
1309 } | 1148 } |
1310 | 1149 |
1311 void test_computeExportedLibraries_some() { | 1150 void test_computeExportedLibraries_some() { |
1312 // addSource("/lib1.dart", "library lib1;"); | 1151 // addSource("/lib1.dart", "library lib1;"); |
1313 // addSource("/lib2.dart", "library lib2;"); | 1152 // addSource("/lib2.dart", "library lib2;"); |
1314 Source source = _addSource( | 1153 Source source = addSource( |
1315 "/test.dart", "library test; export 'lib1.dart'; export 'lib2.dart';"); | 1154 "/test.dart", "library test; export 'lib1.dart'; export 'lib2.dart';"); |
1316 expect(_context.computeExportedLibraries(source), hasLength(2)); | 1155 expect(context.computeExportedLibraries(source), hasLength(2)); |
1317 } | 1156 } |
1318 | 1157 |
1319 void test_computeHtmlElement_nonHtml() { | 1158 void test_computeHtmlElement_nonHtml() { |
1320 Source source = _addSource("/test.dart", "library test;"); | 1159 Source source = addSource("/test.dart", "library test;"); |
1321 expect(_context.computeHtmlElement(source), isNull); | 1160 expect(context.computeHtmlElement(source), isNull); |
1322 } | 1161 } |
1323 | 1162 |
1324 void test_computeKindOf_html() { | 1163 void test_computeKindOf_html() { |
1325 Source source = _addSource("/test.html", ""); | 1164 Source source = addSource("/test.html", ""); |
1326 expect(_context.computeKindOf(source), same(SourceKind.HTML)); | 1165 expect(context.computeKindOf(source), same(SourceKind.HTML)); |
1327 } | 1166 } |
1328 | 1167 |
1329 void test_computeKindOf_library() { | 1168 void test_computeKindOf_library() { |
1330 Source source = _addSource("/test.dart", "library lib;"); | 1169 Source source = addSource("/test.dart", "library lib;"); |
1331 expect(_context.computeKindOf(source), same(SourceKind.LIBRARY)); | 1170 expect(context.computeKindOf(source), same(SourceKind.LIBRARY)); |
1332 } | 1171 } |
1333 | 1172 |
1334 void test_computeKindOf_libraryAndPart() { | 1173 void test_computeKindOf_libraryAndPart() { |
1335 Source source = _addSource("/test.dart", "library lib; part of lib;"); | 1174 Source source = addSource("/test.dart", "library lib; part of lib;"); |
1336 expect(_context.computeKindOf(source), same(SourceKind.LIBRARY)); | 1175 expect(context.computeKindOf(source), same(SourceKind.LIBRARY)); |
1337 } | 1176 } |
1338 | 1177 |
1339 void test_computeKindOf_part() { | 1178 void test_computeKindOf_part() { |
1340 Source source = _addSource("/test.dart", "part of lib;"); | 1179 Source source = addSource("/test.dart", "part of lib;"); |
1341 expect(_context.computeKindOf(source), same(SourceKind.PART)); | 1180 expect(context.computeKindOf(source), same(SourceKind.PART)); |
1342 } | 1181 } |
1343 | 1182 |
1344 void test_computeLibraryElement() { | 1183 void test_computeLibraryElement() { |
1345 _context = contextWithCore(); | 1184 Source source = addSource("/test.dart", "library lib;"); |
1346 _sourceFactory = _context.sourceFactory; | 1185 LibraryElement element = context.computeLibraryElement(source); |
1347 Source source = _addSource("/test.dart", "library lib;"); | |
1348 LibraryElement element = _context.computeLibraryElement(source); | |
1349 expect(element, isNotNull); | 1186 expect(element, isNotNull); |
1350 } | 1187 } |
1351 | 1188 |
1352 void test_computeLineInfo_dart() { | 1189 void test_computeLineInfo_dart() { |
1353 Source source = _addSource("/test.dart", r''' | 1190 Source source = addSource("/test.dart", r''' |
1354 library lib; | 1191 library lib; |
1355 | 1192 |
1356 main() {}'''); | 1193 main() {}'''); |
1357 LineInfo info = _context.computeLineInfo(source); | 1194 LineInfo info = context.computeLineInfo(source); |
1358 expect(info, isNotNull); | 1195 expect(info, isNotNull); |
1359 } | 1196 } |
1360 | 1197 |
1361 void test_computeLineInfo_html() { | 1198 void test_computeLineInfo_html() { |
1362 Source source = _addSource("/test.html", r''' | 1199 Source source = addSource("/test.html", r''' |
1363 <html> | 1200 <html> |
1364 <body> | 1201 <body> |
1365 <h1>A</h1> | 1202 <h1>A</h1> |
1366 </body> | 1203 </body> |
1367 </html>'''); | 1204 </html>'''); |
1368 LineInfo info = _context.computeLineInfo(source); | 1205 LineInfo info = context.computeLineInfo(source); |
1369 expect(info, isNotNull); | 1206 expect(info, isNotNull); |
1370 } | 1207 } |
1371 | 1208 |
1372 Future test_computeResolvedCompilationUnitAsync_afterDispose() { | 1209 Future test_computeResolvedCompilationUnitAsync_afterDispose() { |
1373 _context = contextWithCore(); | 1210 Source source = addSource("/lib.dart", "library lib;"); |
1374 _sourceFactory = _context.sourceFactory; | |
1375 Source source = _addSource("/lib.dart", "library lib;"); | |
1376 // Complete all pending analysis tasks and flush the AST so that it won't | 1211 // Complete all pending analysis tasks and flush the AST so that it won't |
1377 // be available immediately. | 1212 // be available immediately. |
1378 _performPendingAnalysisTasks(); | 1213 _performPendingAnalysisTasks(); |
1379 _flushAst(source); | 1214 _flushAst(source); |
1380 // Dispose of the context. | 1215 // Dispose of the context. |
1381 _context.dispose(); | 1216 context.dispose(); |
1382 // Any attempt to start an asynchronous computation should return a future | 1217 // Any attempt to start an asynchronous computation should return a future |
1383 // which completes with error. | 1218 // which completes with error. |
1384 CancelableFuture<CompilationUnit> future = | 1219 CancelableFuture<CompilationUnit> future = |
1385 _context.computeResolvedCompilationUnitAsync(source, source); | 1220 context.computeResolvedCompilationUnitAsync(source, source); |
1386 bool completed = false; | 1221 bool completed = false; |
1387 future.then((CompilationUnit unit) { | 1222 future.then((CompilationUnit unit) { |
1388 fail('Future should have completed with error'); | 1223 fail('Future should have completed with error'); |
1389 }, onError: (error) { | 1224 }, onError: (error) { |
1390 expect(error, new isInstanceOf<AnalysisNotScheduledError>()); | 1225 expect(error, new isInstanceOf<AnalysisNotScheduledError>()); |
1391 completed = true; | 1226 completed = true; |
1392 }); | 1227 }); |
1393 return pumpEventQueue().then((_) { | 1228 return pumpEventQueue().then((_) { |
1394 expect(completed, isTrue); | 1229 expect(completed, isTrue); |
1395 }); | 1230 }); |
1396 } | 1231 } |
1397 | 1232 |
1398 void test_dispose() { | 1233 void test_dispose() { |
1399 expect(_context.isDisposed, isFalse); | 1234 expect(context.isDisposed, isFalse); |
1400 _context.dispose(); | 1235 context.dispose(); |
1401 expect(_context.isDisposed, isTrue); | 1236 expect(context.isDisposed, isTrue); |
1402 } | 1237 } |
1403 | 1238 |
1404 void test_exists_false() { | 1239 void test_exists_false() { |
1405 TestSource source = new TestSource(); | 1240 TestSource source = new TestSource(); |
1406 source.exists2 = false; | 1241 source.exists2 = false; |
1407 expect(_context.exists(source), isFalse); | 1242 expect(context.exists(source), isFalse); |
1408 } | 1243 } |
1409 | 1244 |
1410 void test_exists_null() { | 1245 void test_exists_null() { |
1411 expect(_context.exists(null), isFalse); | 1246 expect(context.exists(null), isFalse); |
1412 } | 1247 } |
1413 | 1248 |
1414 void test_exists_overridden() { | 1249 void test_exists_overridden() { |
1415 Source source = new TestSource(); | 1250 Source source = new TestSource(); |
1416 _context.setContents(source, ""); | 1251 context.setContents(source, ""); |
1417 expect(_context.exists(source), isTrue); | 1252 expect(context.exists(source), isTrue); |
1418 } | 1253 } |
1419 | 1254 |
1420 void test_exists_true() { | 1255 void test_exists_true() { |
1421 expect(_context.exists(new AnalysisContextImplTest_Source_exists_true()), | 1256 expect(context.exists(new AnalysisContextImplTest_Source_exists_true()), |
1422 isTrue); | 1257 isTrue); |
1423 } | 1258 } |
1424 | 1259 |
1425 void test_getAnalysisOptions() { | 1260 void test_getAnalysisOptions() { |
1426 expect(_context.analysisOptions, isNotNull); | 1261 expect(context.analysisOptions, isNotNull); |
1427 } | 1262 } |
1428 | 1263 |
1429 void test_getContents_fromSource() { | 1264 void test_getContents_fromSource() { |
1430 String content = "library lib;"; | 1265 String content = "library lib;"; |
1431 TimestampedData<String> contents = | 1266 TimestampedData<String> contents = |
1432 _context.getContents(new TestSource('/test.dart', content)); | 1267 context.getContents(new TestSource('/test.dart', content)); |
1433 expect(contents.data.toString(), content); | 1268 expect(contents.data.toString(), content); |
1434 } | 1269 } |
1435 | 1270 |
1436 void test_getContents_overridden() { | 1271 void test_getContents_overridden() { |
1437 String content = "library lib;"; | 1272 String content = "library lib;"; |
1438 Source source = new TestSource(); | 1273 Source source = new TestSource(); |
1439 _context.setContents(source, content); | 1274 context.setContents(source, content); |
1440 TimestampedData<String> contents = _context.getContents(source); | 1275 TimestampedData<String> contents = context.getContents(source); |
1441 expect(contents.data.toString(), content); | 1276 expect(contents.data.toString(), content); |
1442 } | 1277 } |
1443 | 1278 |
1444 void test_getContents_unoverridden() { | 1279 void test_getContents_unoverridden() { |
1445 String content = "library lib;"; | 1280 String content = "library lib;"; |
1446 Source source = new TestSource('/test.dart', content); | 1281 Source source = new TestSource('/test.dart', content); |
1447 _context.setContents(source, "part of lib;"); | 1282 context.setContents(source, "part of lib;"); |
1448 _context.setContents(source, null); | 1283 context.setContents(source, null); |
1449 TimestampedData<String> contents = _context.getContents(source); | 1284 TimestampedData<String> contents = context.getContents(source); |
1450 expect(contents.data.toString(), content); | 1285 expect(contents.data.toString(), content); |
1451 } | 1286 } |
1452 | 1287 |
1453 void test_getDeclaredVariables() { | 1288 void test_getDeclaredVariables() { |
1454 _context = contextWithCore(); | 1289 expect(context.declaredVariables, isNotNull); |
1455 expect(_context.declaredVariables, isNotNull); | |
1456 } | 1290 } |
1457 | 1291 |
1458 void test_getElement() { | 1292 void test_getElement() { |
1459 _context = contextWithCore(); | |
1460 _sourceFactory = _context.sourceFactory; | |
1461 LibraryElement core = | 1293 LibraryElement core = |
1462 _context.computeLibraryElement(_sourceFactory.forUri("dart:core")); | 1294 context.computeLibraryElement(sourceFactory.forUri("dart:core")); |
1463 expect(core, isNotNull); | 1295 expect(core, isNotNull); |
1464 ClassElement classObject = | 1296 ClassElement classObject = |
1465 _findClass(core.definingCompilationUnit, "Object"); | 1297 _findClass(core.definingCompilationUnit, "Object"); |
1466 expect(classObject, isNotNull); | 1298 expect(classObject, isNotNull); |
1467 ElementLocation location = classObject.location; | 1299 ElementLocation location = classObject.location; |
1468 Element element = _context.getElement(location); | 1300 Element element = context.getElement(location); |
1469 expect(element, same(classObject)); | 1301 expect(element, same(classObject)); |
1470 } | 1302 } |
1471 | 1303 |
1472 void test_getHtmlElement_dart() { | 1304 void test_getHtmlElement_dart() { |
1473 Source source = _addSource("/test.dart", ""); | 1305 Source source = addSource("/test.dart", ""); |
1474 expect(_context.getHtmlElement(source), isNull); | 1306 expect(context.getHtmlElement(source), isNull); |
1475 expect(_context.computeHtmlElement(source), isNull); | 1307 expect(context.computeHtmlElement(source), isNull); |
1476 expect(_context.getHtmlElement(source), isNull); | 1308 expect(context.getHtmlElement(source), isNull); |
1477 } | 1309 } |
1478 | 1310 |
1479 void test_getHtmlFilesReferencing_html() { | 1311 void test_getHtmlFilesReferencing_html() { |
1480 _context = contextWithCore(); | 1312 Source htmlSource = addSource("/test.html", r''' |
1481 _sourceFactory = _context.sourceFactory; | |
1482 Source htmlSource = _addSource("/test.html", r''' | |
1483 <html><head> | 1313 <html><head> |
1484 <script type='application/dart' src='test.dart'/> | 1314 <script type='application/dart' src='test.dart'/> |
1485 <script type='application/dart' src='test.js'/> | 1315 <script type='application/dart' src='test.js'/> |
1486 </head></html>'''); | 1316 </head></html>'''); |
1487 Source librarySource = _addSource("/test.dart", "library lib;"); | 1317 Source librarySource = addSource("/test.dart", "library lib;"); |
1488 Source secondHtmlSource = _addSource("/test.html", "<html></html>"); | 1318 Source secondHtmlSource = addSource("/test.html", "<html></html>"); |
1489 _context.computeLibraryElement(librarySource); | 1319 context.computeLibraryElement(librarySource); |
1490 List<Source> result = _context.getHtmlFilesReferencing(secondHtmlSource); | 1320 List<Source> result = context.getHtmlFilesReferencing(secondHtmlSource); |
1491 expect(result, hasLength(0)); | 1321 expect(result, hasLength(0)); |
1492 _context.parseHtmlUnit(htmlSource); | 1322 context.parseHtmlUnit(htmlSource); |
1493 result = _context.getHtmlFilesReferencing(secondHtmlSource); | 1323 result = context.getHtmlFilesReferencing(secondHtmlSource); |
1494 expect(result, hasLength(0)); | 1324 expect(result, hasLength(0)); |
1495 } | 1325 } |
1496 | 1326 |
1497 void test_getKindOf_html() { | 1327 void test_getKindOf_html() { |
1498 Source source = _addSource("/test.html", ""); | 1328 Source source = addSource("/test.html", ""); |
1499 expect(_context.getKindOf(source), same(SourceKind.HTML)); | 1329 expect(context.getKindOf(source), same(SourceKind.HTML)); |
1500 } | 1330 } |
1501 | 1331 |
1502 void test_getKindOf_library() { | 1332 void test_getKindOf_library() { |
1503 Source source = _addSource("/test.dart", "library lib;"); | 1333 Source source = addSource("/test.dart", "library lib;"); |
1504 expect(_context.getKindOf(source), same(SourceKind.UNKNOWN)); | 1334 expect(context.getKindOf(source), same(SourceKind.UNKNOWN)); |
1505 _context.computeKindOf(source); | 1335 context.computeKindOf(source); |
1506 expect(_context.getKindOf(source), same(SourceKind.LIBRARY)); | 1336 expect(context.getKindOf(source), same(SourceKind.LIBRARY)); |
1507 } | 1337 } |
1508 | 1338 |
1509 void test_getKindOf_part() { | 1339 void test_getKindOf_part() { |
1510 Source source = _addSource("/test.dart", "part of lib;"); | 1340 Source source = addSource("/test.dart", "part of lib;"); |
1511 expect(_context.getKindOf(source), same(SourceKind.UNKNOWN)); | 1341 expect(context.getKindOf(source), same(SourceKind.UNKNOWN)); |
1512 _context.computeKindOf(source); | 1342 context.computeKindOf(source); |
1513 expect(_context.getKindOf(source), same(SourceKind.PART)); | 1343 expect(context.getKindOf(source), same(SourceKind.PART)); |
1514 } | 1344 } |
1515 | 1345 |
1516 void test_getKindOf_unknown() { | 1346 void test_getKindOf_unknown() { |
1517 Source source = _addSource("/test.css", ""); | 1347 Source source = addSource("/test.css", ""); |
1518 expect(_context.getKindOf(source), same(SourceKind.UNKNOWN)); | 1348 expect(context.getKindOf(source), same(SourceKind.UNKNOWN)); |
1519 } | 1349 } |
1520 | 1350 |
1521 void test_getLaunchableClientLibrarySources_doesNotImportHtml() { | 1351 void test_getLaunchableClientLibrarySources_doesNotImportHtml() { |
1522 _context = contextWithCore(); | 1352 Source source = addSource("/test.dart", r''' |
1523 _sourceFactory = _context.sourceFactory; | 1353 main() {}'''); |
1524 Source source = _addSource("/test.dart", r''' | 1354 context.computeLibraryElement(source); |
1525 main() {}'''); | 1355 List<Source> sources = context.launchableClientLibrarySources; |
1526 _context.computeLibraryElement(source); | |
1527 List<Source> sources = _context.launchableClientLibrarySources; | |
1528 expect(sources, isEmpty); | 1356 expect(sources, isEmpty); |
1529 } | 1357 } |
1530 | 1358 |
1531 void test_getLaunchableClientLibrarySources_importsHtml_explicitly() { | 1359 void test_getLaunchableClientLibrarySources_importsHtml_explicitly() { |
1532 _context = contextWithCore(); | 1360 List<Source> sources = context.launchableClientLibrarySources; |
1533 _sourceFactory = _context.sourceFactory; | 1361 expect(sources, isEmpty); |
1534 List<Source> sources = _context.launchableClientLibrarySources; | 1362 Source source = addSource("/test.dart", r''' |
1535 expect(sources, isEmpty); | 1363 import 'dart:html'; |
1536 Source source = _addSource("/test.dart", r''' | 1364 main() {}'''); |
1537 import 'dart:html'; | 1365 context.computeLibraryElement(source); |
1538 main() {}'''); | 1366 sources = context.launchableClientLibrarySources; |
1539 _context.computeLibraryElement(source); | |
1540 sources = _context.launchableClientLibrarySources; | |
1541 expect(sources, unorderedEquals([source])); | 1367 expect(sources, unorderedEquals([source])); |
1542 } | 1368 } |
1543 | 1369 |
1544 void test_getLaunchableClientLibrarySources_importsHtml_implicitly() { | 1370 void test_getLaunchableClientLibrarySources_importsHtml_implicitly() { |
1545 _context = contextWithCore(); | 1371 List<Source> sources = context.launchableClientLibrarySources; |
1546 _sourceFactory = _context.sourceFactory; | 1372 expect(sources, isEmpty); |
1547 List<Source> sources = _context.launchableClientLibrarySources; | 1373 addSource("/a.dart", r''' |
1548 expect(sources, isEmpty); | 1374 import 'dart:html'; |
1549 _addSource("/a.dart", r''' | 1375 '''); |
1550 import 'dart:html'; | 1376 Source source = addSource("/test.dart", r''' |
1551 '''); | |
1552 Source source = _addSource("/test.dart", r''' | |
1553 import 'a.dart'; | 1377 import 'a.dart'; |
1554 main() {}'''); | 1378 main() {}'''); |
1555 _context.computeLibraryElement(source); | 1379 context.computeLibraryElement(source); |
1556 sources = _context.launchableClientLibrarySources; | 1380 sources = context.launchableClientLibrarySources; |
1557 expect(sources, unorderedEquals([source])); | 1381 expect(sources, unorderedEquals([source])); |
1558 } | 1382 } |
1559 | 1383 |
1560 void test_getLaunchableClientLibrarySources_importsHtml_implicitly2() { | 1384 void test_getLaunchableClientLibrarySources_importsHtml_implicitly2() { |
1561 _context = contextWithCore(); | 1385 List<Source> sources = context.launchableClientLibrarySources; |
1562 _sourceFactory = _context.sourceFactory; | 1386 expect(sources, isEmpty); |
1563 List<Source> sources = _context.launchableClientLibrarySources; | 1387 addSource("/a.dart", r''' |
1564 expect(sources, isEmpty); | |
1565 _addSource("/a.dart", r''' | |
1566 export 'dart:html'; | 1388 export 'dart:html'; |
1567 '''); | 1389 '''); |
1568 Source source = _addSource("/test.dart", r''' | 1390 Source source = addSource("/test.dart", r''' |
1569 import 'a.dart'; | 1391 import 'a.dart'; |
1570 main() {}'''); | 1392 main() {}'''); |
1571 _context.computeLibraryElement(source); | 1393 context.computeLibraryElement(source); |
1572 sources = _context.launchableClientLibrarySources; | 1394 sources = context.launchableClientLibrarySources; |
1573 expect(sources, unorderedEquals([source])); | 1395 expect(sources, unorderedEquals([source])); |
1574 } | 1396 } |
1575 | 1397 |
1576 void test_getLaunchableServerLibrarySources() { | 1398 void test_getLaunchableServerLibrarySources() { |
1577 _context = contextWithCore(); | 1399 expect(context.launchableServerLibrarySources, isEmpty); |
1578 _sourceFactory = _context.sourceFactory; | 1400 Source source = addSource("/test.dart", "main() {}"); |
1579 expect(_context.launchableServerLibrarySources, isEmpty); | 1401 context.computeLibraryElement(source); |
1580 Source source = _addSource("/test.dart", "main() {}"); | 1402 expect(context.launchableServerLibrarySources, unorderedEquals([source])); |
1581 _context.computeLibraryElement(source); | |
1582 expect(_context.launchableServerLibrarySources, unorderedEquals([source])); | |
1583 } | 1403 } |
1584 | 1404 |
1585 void test_getLaunchableServerLibrarySources_importsHtml_explicitly() { | 1405 void test_getLaunchableServerLibrarySources_importsHtml_explicitly() { |
1586 _context = contextWithCore(); | 1406 Source source = addSource("/test.dart", r''' |
1587 _sourceFactory = _context.sourceFactory; | |
1588 Source source = _addSource("/test.dart", r''' | |
1589 import 'dart:html'; | 1407 import 'dart:html'; |
1590 main() {} | 1408 main() {} |
1591 '''); | 1409 '''); |
1592 _context.computeLibraryElement(source); | 1410 context.computeLibraryElement(source); |
1593 expect(_context.launchableServerLibrarySources, isEmpty); | 1411 expect(context.launchableServerLibrarySources, isEmpty); |
1594 } | 1412 } |
1595 | 1413 |
1596 void test_getLaunchableServerLibrarySources_importsHtml_implicitly() { | 1414 void test_getLaunchableServerLibrarySources_importsHtml_implicitly() { |
1597 _context = contextWithCore(); | 1415 addSource("/imports_html.dart", r''' |
1598 _sourceFactory = _context.sourceFactory; | 1416 import 'dart:html'; |
1599 _addSource("/imports_html.dart", r''' | 1417 '''); |
1600 import 'dart:html'; | 1418 Source source = addSource("/test.dart", r''' |
1601 '''); | |
1602 Source source = _addSource("/test.dart", r''' | |
1603 import 'imports_html.dart'; | 1419 import 'imports_html.dart'; |
1604 main() {}'''); | 1420 main() {}'''); |
1605 _context.computeLibraryElement(source); | 1421 context.computeLibraryElement(source); |
1606 expect(_context.launchableServerLibrarySources, isEmpty); | 1422 expect(context.launchableServerLibrarySources, isEmpty); |
1607 } | 1423 } |
1608 | 1424 |
1609 void test_getLaunchableServerLibrarySources_noMain() { | 1425 void test_getLaunchableServerLibrarySources_noMain() { |
1610 _context = contextWithCore(); | 1426 Source source = addSource("/test.dart", ''); |
1611 _sourceFactory = _context.sourceFactory; | 1427 context.computeLibraryElement(source); |
1612 Source source = _addSource("/test.dart", ''); | 1428 expect(context.launchableServerLibrarySources, isEmpty); |
1613 _context.computeLibraryElement(source); | |
1614 expect(_context.launchableServerLibrarySources, isEmpty); | |
1615 } | 1429 } |
1616 | 1430 |
1617 void test_getLibrariesContaining() { | 1431 void test_getLibrariesContaining() { |
1618 _context = contextWithCore(); | 1432 Source librarySource = addSource("/lib.dart", r''' |
1619 _sourceFactory = _context.sourceFactory; | |
1620 Source librarySource = _addSource("/lib.dart", r''' | |
1621 library lib; | 1433 library lib; |
1622 part 'part.dart';'''); | 1434 part 'part.dart';'''); |
1623 Source partSource = _addSource("/part.dart", "part of lib;"); | 1435 Source partSource = addSource("/part.dart", "part of lib;"); |
1624 _context.computeLibraryElement(librarySource); | 1436 context.computeLibraryElement(librarySource); |
1625 List<Source> result = _context.getLibrariesContaining(librarySource); | 1437 List<Source> result = context.getLibrariesContaining(librarySource); |
1626 expect(result, hasLength(1)); | 1438 expect(result, hasLength(1)); |
1627 expect(result[0], librarySource); | 1439 expect(result[0], librarySource); |
1628 result = _context.getLibrariesContaining(partSource); | 1440 result = context.getLibrariesContaining(partSource); |
1629 expect(result, hasLength(1)); | 1441 expect(result, hasLength(1)); |
1630 expect(result[0], librarySource); | 1442 expect(result[0], librarySource); |
1631 } | 1443 } |
1632 | 1444 |
1633 void test_getLibrariesDependingOn() { | 1445 void test_getLibrariesDependingOn() { |
1634 _context = contextWithCore(); | 1446 Source libASource = addSource("/libA.dart", "library libA;"); |
1635 _sourceFactory = _context.sourceFactory; | 1447 addSource("/libB.dart", "library libB;"); |
1636 Source libASource = _addSource("/libA.dart", "library libA;"); | 1448 Source lib1Source = addSource("/lib1.dart", r''' |
1637 _addSource("/libB.dart", "library libB;"); | |
1638 Source lib1Source = _addSource("/lib1.dart", r''' | |
1639 library lib1; | 1449 library lib1; |
1640 import 'libA.dart'; | 1450 import 'libA.dart'; |
1641 export 'libB.dart';'''); | 1451 export 'libB.dart';'''); |
1642 Source lib2Source = _addSource("/lib2.dart", r''' | 1452 Source lib2Source = addSource("/lib2.dart", r''' |
1643 library lib2; | 1453 library lib2; |
1644 import 'libB.dart'; | 1454 import 'libB.dart'; |
1645 export 'libA.dart';'''); | 1455 export 'libA.dart';'''); |
1646 _context.computeLibraryElement(lib1Source); | 1456 context.computeLibraryElement(lib1Source); |
1647 _context.computeLibraryElement(lib2Source); | 1457 context.computeLibraryElement(lib2Source); |
1648 List<Source> result = _context.getLibrariesDependingOn(libASource); | 1458 List<Source> result = context.getLibrariesDependingOn(libASource); |
1649 expect(result, unorderedEquals([lib1Source, lib2Source])); | 1459 expect(result, unorderedEquals([lib1Source, lib2Source])); |
1650 } | 1460 } |
1651 | 1461 |
1652 void test_getLibrariesReferencedFromHtml_no() { | 1462 void test_getLibrariesReferencedFromHtml_no() { |
1653 _context = contextWithCore(); | 1463 Source htmlSource = addSource("/test.html", r''' |
1654 _sourceFactory = _context.sourceFactory; | |
1655 Source htmlSource = _addSource("/test.html", r''' | |
1656 <html><head> | 1464 <html><head> |
1657 <script type='application/dart' src='test.js'/> | 1465 <script type='application/dart' src='test.js'/> |
1658 </head></html>'''); | 1466 </head></html>'''); |
1659 _addSource("/test.dart", "library lib;"); | 1467 addSource("/test.dart", "library lib;"); |
1660 _context.parseHtmlUnit(htmlSource); | 1468 context.parseHtmlUnit(htmlSource); |
1661 List<Source> result = _context.getLibrariesReferencedFromHtml(htmlSource); | 1469 List<Source> result = context.getLibrariesReferencedFromHtml(htmlSource); |
1662 expect(result, hasLength(0)); | 1470 expect(result, hasLength(0)); |
1663 } | 1471 } |
1664 | 1472 |
1665 void test_getLibraryElement() { | 1473 void test_getLibraryElement() { |
1666 _context = contextWithCore(); | 1474 Source source = addSource("/test.dart", "library lib;"); |
1667 _sourceFactory = _context.sourceFactory; | 1475 LibraryElement element = context.getLibraryElement(source); |
1668 Source source = _addSource("/test.dart", "library lib;"); | |
1669 LibraryElement element = _context.getLibraryElement(source); | |
1670 expect(element, isNull); | 1476 expect(element, isNull); |
1671 _context.computeLibraryElement(source); | 1477 context.computeLibraryElement(source); |
1672 element = _context.getLibraryElement(source); | 1478 element = context.getLibraryElement(source); |
1673 expect(element, isNotNull); | 1479 expect(element, isNotNull); |
1674 } | 1480 } |
1675 | 1481 |
1676 void test_getLibrarySources() { | 1482 void test_getLibrarySources() { |
1677 List<Source> sources = _context.librarySources; | 1483 List<Source> sources = context.librarySources; |
1678 int originalLength = sources.length; | 1484 int originalLength = sources.length; |
1679 Source source = _addSource("/test.dart", "library lib;"); | 1485 Source source = addSource("/test.dart", "library lib;"); |
1680 _context.computeKindOf(source); | 1486 context.computeKindOf(source); |
1681 sources = _context.librarySources; | 1487 sources = context.librarySources; |
1682 expect(sources, hasLength(originalLength + 1)); | 1488 expect(sources, hasLength(originalLength + 1)); |
1683 for (Source returnedSource in sources) { | 1489 for (Source returnedSource in sources) { |
1684 if (returnedSource == source) { | 1490 if (returnedSource == source) { |
1685 return; | 1491 return; |
1686 } | 1492 } |
1687 } | 1493 } |
1688 fail("The added source was not in the list of library sources"); | 1494 fail("The added source was not in the list of library sources"); |
1689 } | 1495 } |
1690 | 1496 |
1691 void test_getLineInfo() { | 1497 void test_getLineInfo() { |
1692 Source source = _addSource("/test.dart", r''' | 1498 Source source = addSource("/test.dart", r''' |
1693 library lib; | 1499 library lib; |
1694 | 1500 |
1695 main() {}'''); | 1501 main() {}'''); |
1696 LineInfo info = _context.getLineInfo(source); | 1502 LineInfo info = context.getLineInfo(source); |
1697 expect(info, isNull); | 1503 expect(info, isNull); |
1698 _context.parseCompilationUnit(source); | 1504 context.parseCompilationUnit(source); |
1699 info = _context.getLineInfo(source); | 1505 info = context.getLineInfo(source); |
1700 expect(info, isNotNull); | 1506 expect(info, isNotNull); |
1701 } | 1507 } |
1702 | 1508 |
1703 void test_getModificationStamp_fromSource() { | 1509 void test_getModificationStamp_fromSource() { |
1704 int stamp = 42; | 1510 int stamp = 42; |
1705 expect(_context.getModificationStamp( | 1511 expect(context.getModificationStamp( |
1706 new AnalysisContextImplTest_Source_getModificationStamp_fromSource( | 1512 new AnalysisContextImplTest_Source_getModificationStamp_fromSource( |
1707 stamp)), stamp); | 1513 stamp)), stamp); |
1708 } | 1514 } |
1709 | 1515 |
1710 void test_getModificationStamp_overridden() { | 1516 void test_getModificationStamp_overridden() { |
1711 int stamp = 42; | 1517 int stamp = 42; |
1712 Source source = | 1518 Source source = |
1713 new AnalysisContextImplTest_Source_getModificationStamp_overridden( | 1519 new AnalysisContextImplTest_Source_getModificationStamp_overridden( |
1714 stamp); | 1520 stamp); |
1715 _context.setContents(source, ""); | 1521 context.setContents(source, ""); |
1716 expect(stamp != _context.getModificationStamp(source), isTrue); | 1522 expect(stamp != context.getModificationStamp(source), isTrue); |
1717 } | 1523 } |
1718 | 1524 |
1719 void test_getPublicNamespace_element() { | 1525 void test_getPublicNamespace_element() { |
1720 _context = contextWithCore(); | 1526 Source source = addSource("/test.dart", "class A {}"); |
1721 _sourceFactory = _context.sourceFactory; | 1527 LibraryElement library = context.computeLibraryElement(source); |
1722 Source source = _addSource("/test.dart", "class A {}"); | |
1723 LibraryElement library = _context.computeLibraryElement(source); | |
1724 expect(library, isNotNull); | 1528 expect(library, isNotNull); |
1725 Namespace namespace = _context.getPublicNamespace(library); | 1529 Namespace namespace = context.getPublicNamespace(library); |
1726 expect(namespace, isNotNull); | 1530 expect(namespace, isNotNull); |
1727 EngineTestCase.assertInstanceOf( | 1531 EngineTestCase.assertInstanceOf( |
1728 (obj) => obj is ClassElement, ClassElement, namespace.get("A")); | 1532 (obj) => obj is ClassElement, ClassElement, namespace.get("A")); |
1729 } | 1533 } |
1730 | 1534 |
1731 void test_getResolvedCompilationUnit_library_null() { | 1535 void test_getResolvedCompilationUnit_library_null() { |
1732 _context = contextWithCore(); | 1536 Source source = addSource("/lib.dart", "library lib;"); |
1733 _sourceFactory = _context.sourceFactory; | 1537 expect(context.getResolvedCompilationUnit(source, null), isNull); |
1734 Source source = _addSource("/lib.dart", "library lib;"); | |
1735 expect(_context.getResolvedCompilationUnit(source, null), isNull); | |
1736 } | 1538 } |
1737 | 1539 |
1738 void test_getResolvedCompilationUnit_source_dart() { | 1540 void test_getResolvedCompilationUnit_source_dart() { |
1739 _context = contextWithCore(); | 1541 Source source = addSource("/lib.dart", "library lib;"); |
1740 _sourceFactory = _context.sourceFactory; | 1542 expect(context.getResolvedCompilationUnit2(source, source), isNull); |
1741 Source source = _addSource("/lib.dart", "library lib;"); | 1543 context.resolveCompilationUnit2(source, source); |
1742 expect(_context.getResolvedCompilationUnit2(source, source), isNull); | 1544 expect(context.getResolvedCompilationUnit2(source, source), isNotNull); |
1743 _context.resolveCompilationUnit2(source, source); | |
1744 expect(_context.getResolvedCompilationUnit2(source, source), isNotNull); | |
1745 } | 1545 } |
1746 | 1546 |
1747 void test_getResolvedCompilationUnit_source_html() { | 1547 void test_getResolvedCompilationUnit_source_html() { |
1748 _context = contextWithCore(); | 1548 Source source = addSource("/test.html", "<html></html>"); |
1749 _sourceFactory = _context.sourceFactory; | 1549 expect(context.getResolvedCompilationUnit2(source, source), isNull); |
1750 Source source = _addSource("/test.html", "<html></html>"); | 1550 expect(context.resolveCompilationUnit2(source, source), isNull); |
1751 expect(_context.getResolvedCompilationUnit2(source, source), isNull); | 1551 expect(context.getResolvedCompilationUnit2(source, source), isNull); |
1752 expect(_context.resolveCompilationUnit2(source, source), isNull); | |
1753 expect(_context.getResolvedCompilationUnit2(source, source), isNull); | |
1754 } | 1552 } |
1755 | 1553 |
1756 void test_getSourceFactory() { | 1554 void test_getSourceFactory() { |
1757 expect(_context.sourceFactory, same(_sourceFactory)); | 1555 expect(context.sourceFactory, same(sourceFactory)); |
1758 } | 1556 } |
1759 | 1557 |
1760 void test_getSourcesWithFullName() { | 1558 void test_getSourcesWithFullName() { |
1761 String filePath = '/foo/lib/file.dart'; | 1559 String filePath = '/foo/lib/file.dart'; |
1762 List<Source> expected = <Source>[]; | 1560 List<Source> expected = <Source>[]; |
1763 ChangeSet changeSet = new ChangeSet(); | 1561 ChangeSet changeSet = new ChangeSet(); |
1764 | 1562 |
1765 TestSourceWithUri source1 = | 1563 TestSourceWithUri source1 = |
1766 new TestSourceWithUri(filePath, Uri.parse('file://$filePath')); | 1564 new TestSourceWithUri(filePath, Uri.parse('file://$filePath')); |
1767 expected.add(source1); | 1565 expected.add(source1); |
1768 changeSet.addedSource(source1); | 1566 changeSet.addedSource(source1); |
1769 | 1567 |
1770 TestSourceWithUri source2 = | 1568 TestSourceWithUri source2 = |
1771 new TestSourceWithUri(filePath, Uri.parse('package:foo/file.dart')); | 1569 new TestSourceWithUri(filePath, Uri.parse('package:foo/file.dart')); |
1772 expected.add(source2); | 1570 expected.add(source2); |
1773 changeSet.addedSource(source2); | 1571 changeSet.addedSource(source2); |
1774 | 1572 |
1775 _context.applyChanges(changeSet); | 1573 context.applyChanges(changeSet); |
1776 expect( | 1574 expect(context.getSourcesWithFullName(filePath), unorderedEquals(expected)); |
1777 _context.getSourcesWithFullName(filePath), unorderedEquals(expected)); | |
1778 } | 1575 } |
1779 | 1576 |
1780 void test_getStatistics() { | 1577 void test_getStatistics() { |
1781 AnalysisContextStatistics statistics = _context.statistics; | 1578 AnalysisContextStatistics statistics = context.statistics; |
1782 expect(statistics, isNotNull); | 1579 expect(statistics, isNotNull); |
1783 // The following lines are fragile. | 1580 // The following lines are fragile. |
1784 // The values depend on the number of libraries in the SDK. | 1581 // The values depend on the number of libraries in the SDK. |
1785 // assertLength(0, statistics.getCacheRows()); | 1582 // assertLength(0, statistics.getCacheRows()); |
1786 // assertLength(0, statistics.getExceptions()); | 1583 // assertLength(0, statistics.getExceptions()); |
1787 // assertLength(0, statistics.getSources()); | 1584 // assertLength(0, statistics.getSources()); |
1788 } | 1585 } |
1789 | 1586 |
1790 void test_isClientLibrary_dart() { | 1587 void test_isClientLibrary_dart() { |
1791 _context = contextWithCore(); | 1588 Source source = addSource("/test.dart", r''' |
1792 _sourceFactory = _context.sourceFactory; | |
1793 Source source = _addSource("/test.dart", r''' | |
1794 import 'dart:html'; | 1589 import 'dart:html'; |
1795 | 1590 |
1796 main() {}'''); | 1591 main() {}'''); |
1797 expect(_context.isClientLibrary(source), isFalse); | 1592 expect(context.isClientLibrary(source), isFalse); |
1798 expect(_context.isServerLibrary(source), isFalse); | 1593 expect(context.isServerLibrary(source), isFalse); |
1799 _context.computeLibraryElement(source); | 1594 context.computeLibraryElement(source); |
1800 expect(_context.isClientLibrary(source), isTrue); | 1595 expect(context.isClientLibrary(source), isTrue); |
1801 expect(_context.isServerLibrary(source), isFalse); | 1596 expect(context.isServerLibrary(source), isFalse); |
1802 } | 1597 } |
1803 | 1598 |
1804 void test_isClientLibrary_html() { | 1599 void test_isClientLibrary_html() { |
1805 Source source = _addSource("/test.html", "<html></html>"); | 1600 Source source = addSource("/test.html", "<html></html>"); |
1806 expect(_context.isClientLibrary(source), isFalse); | 1601 expect(context.isClientLibrary(source), isFalse); |
1807 } | 1602 } |
1808 | 1603 |
1809 void test_isServerLibrary_dart() { | 1604 void test_isServerLibrary_dart() { |
1810 _context = contextWithCore(); | 1605 Source source = addSource("/test.dart", r''' |
1811 _sourceFactory = _context.sourceFactory; | |
1812 Source source = _addSource("/test.dart", r''' | |
1813 library lib; | 1606 library lib; |
1814 | 1607 |
1815 main() {}'''); | 1608 main() {}'''); |
1816 expect(_context.isClientLibrary(source), isFalse); | 1609 expect(context.isClientLibrary(source), isFalse); |
1817 expect(_context.isServerLibrary(source), isFalse); | 1610 expect(context.isServerLibrary(source), isFalse); |
1818 _context.computeLibraryElement(source); | 1611 context.computeLibraryElement(source); |
1819 expect(_context.isClientLibrary(source), isFalse); | 1612 expect(context.isClientLibrary(source), isFalse); |
1820 expect(_context.isServerLibrary(source), isTrue); | 1613 expect(context.isServerLibrary(source), isTrue); |
1821 } | 1614 } |
1822 | 1615 |
1823 void test_isServerLibrary_html() { | 1616 void test_isServerLibrary_html() { |
1824 Source source = _addSource("/test.html", "<html></html>"); | 1617 Source source = addSource("/test.html", "<html></html>"); |
1825 expect(_context.isServerLibrary(source), isFalse); | 1618 expect(context.isServerLibrary(source), isFalse); |
1826 } | 1619 } |
1827 | 1620 |
1828 void test_parseCompilationUnit_errors() { | 1621 void test_parseCompilationUnit_errors() { |
1829 Source source = _addSource("/lib.dart", "library {"); | 1622 Source source = addSource("/lib.dart", "library {"); |
1830 CompilationUnit compilationUnit = _context.parseCompilationUnit(source); | 1623 CompilationUnit compilationUnit = context.parseCompilationUnit(source); |
1831 expect(compilationUnit, isNotNull); | 1624 expect(compilationUnit, isNotNull); |
1832 var errorInfo = _context.getErrors(source); | 1625 var errorInfo = context.getErrors(source); |
1833 expect(errorInfo, isNotNull); | 1626 expect(errorInfo, isNotNull); |
1834 List<AnalysisError> errors = errorInfo.errors; | 1627 List<AnalysisError> errors = errorInfo.errors; |
1835 expect(errors, isNotNull); | 1628 expect(errors, isNotNull); |
1836 expect(errors.length > 0, isTrue); | 1629 expect(errors.length > 0, isTrue); |
1837 } | 1630 } |
1838 | 1631 |
1839 void test_parseCompilationUnit_exception() { | 1632 void test_parseCompilationUnit_exception() { |
1840 Source source = _addSourceWithException("/test.dart"); | 1633 Source source = _addSourceWithException("/test.dart"); |
1841 try { | 1634 try { |
1842 _context.parseCompilationUnit(source); | 1635 context.parseCompilationUnit(source); |
1843 fail("Expected AnalysisException"); | 1636 fail("Expected AnalysisException"); |
1844 } on AnalysisException { | 1637 } on AnalysisException { |
1845 // Expected | 1638 // Expected |
1846 } | 1639 } |
1847 } | 1640 } |
1848 | 1641 |
1849 void test_parseCompilationUnit_html() { | 1642 void test_parseCompilationUnit_html() { |
1850 Source source = _addSource("/test.html", "<html></html>"); | 1643 Source source = addSource("/test.html", "<html></html>"); |
1851 expect(_context.parseCompilationUnit(source), isNull); | 1644 expect(context.parseCompilationUnit(source), isNull); |
1852 } | 1645 } |
1853 | 1646 |
1854 void test_parseCompilationUnit_noErrors() { | 1647 void test_parseCompilationUnit_noErrors() { |
1855 Source source = _addSource("/lib.dart", "library lib;"); | 1648 Source source = addSource("/lib.dart", "library lib;"); |
1856 CompilationUnit compilationUnit = _context.parseCompilationUnit(source); | 1649 CompilationUnit compilationUnit = context.parseCompilationUnit(source); |
1857 expect(compilationUnit, isNotNull); | 1650 expect(compilationUnit, isNotNull); |
1858 AnalysisErrorInfo errorInfo = _context.getErrors(source); | 1651 AnalysisErrorInfo errorInfo = context.getErrors(source); |
1859 expect(errorInfo, isNotNull); | 1652 expect(errorInfo, isNotNull); |
1860 expect(errorInfo.errors, hasLength(0)); | 1653 expect(errorInfo.errors, hasLength(0)); |
1861 } | 1654 } |
1862 | 1655 |
1863 void test_parseCompilationUnit_nonExistentSource() { | 1656 void test_parseCompilationUnit_nonExistentSource() { |
1864 Source source = | 1657 Source source = newSource('/test.dart'); |
1865 new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); | 1658 resourceProvider.deleteFile('/test.dart'); |
1866 try { | 1659 try { |
1867 _context.parseCompilationUnit(source); | 1660 context.parseCompilationUnit(source); |
1868 fail("Expected AnalysisException because file does not exist"); | 1661 fail("Expected AnalysisException because file does not exist"); |
1869 } on AnalysisException { | 1662 } on AnalysisException { |
1870 // Expected result | 1663 // Expected result |
1871 } | 1664 } |
1872 } | 1665 } |
1873 | 1666 |
1874 // void test_resolveCompilationUnit_sourceChangeDuringResolution() { | 1667 // void test_resolveCompilationUnit_sourceChangeDuringResolution() { |
1875 // _context = new _AnalysisContext_sourceChangeDuringResolution(); | 1668 // _context = new _AnalysisContext_sourceChangeDuringResolution(); |
1876 // AnalysisContextFactory.initContextWithCore(_context); | 1669 // AnalysisContextFactory.initContextWithCore(_context); |
1877 // _sourceFactory = _context.sourceFactory; | 1670 // _sourceFactory = _context.sourceFactory; |
(...skipping 16 matching lines...) Expand all Loading... |
1894 // Thread.sleep(1); | 1687 // Thread.sleep(1); |
1895 // // Force the modification time to be different. | 1688 // // Force the modification time to be different. |
1896 // } | 1689 // } |
1897 // _context.setContents(source, "library test;"); | 1690 // _context.setContents(source, "library test;"); |
1898 // JUnitTestCase.assertTrue(initialTime != _context.getModificationStamp(sour
ce)); | 1691 // JUnitTestCase.assertTrue(initialTime != _context.getModificationStamp(sour
ce)); |
1899 // _analyzeAll_assertFinished(); | 1692 // _analyzeAll_assertFinished(); |
1900 // JUnitTestCase.assertNotNullMsg("performAnalysisTask failed to compute an e
lement model", _context.getLibraryElement(source)); | 1693 // JUnitTestCase.assertNotNullMsg("performAnalysisTask failed to compute an e
lement model", _context.getLibraryElement(source)); |
1901 } | 1694 } |
1902 | 1695 |
1903 void test_resolveCompilationUnit_library() { | 1696 void test_resolveCompilationUnit_library() { |
1904 _context = contextWithCore(); | 1697 Source source = addSource("/lib.dart", "library lib;"); |
1905 _sourceFactory = _context.sourceFactory; | 1698 LibraryElement library = context.computeLibraryElement(source); |
1906 Source source = _addSource("/lib.dart", "library lib;"); | |
1907 LibraryElement library = _context.computeLibraryElement(source); | |
1908 CompilationUnit compilationUnit = | 1699 CompilationUnit compilationUnit = |
1909 _context.resolveCompilationUnit(source, library); | 1700 context.resolveCompilationUnit(source, library); |
1910 expect(compilationUnit, isNotNull); | 1701 expect(compilationUnit, isNotNull); |
1911 expect(compilationUnit.element, isNotNull); | 1702 expect(compilationUnit.element, isNotNull); |
1912 } | 1703 } |
1913 | 1704 |
1914 void test_resolveCompilationUnit_source() { | 1705 void test_resolveCompilationUnit_source() { |
1915 _context = contextWithCore(); | 1706 Source source = addSource("/lib.dart", "library lib;"); |
1916 _sourceFactory = _context.sourceFactory; | |
1917 Source source = _addSource("/lib.dart", "library lib;"); | |
1918 CompilationUnit compilationUnit = | 1707 CompilationUnit compilationUnit = |
1919 _context.resolveCompilationUnit2(source, source); | 1708 context.resolveCompilationUnit2(source, source); |
1920 expect(compilationUnit, isNotNull); | 1709 expect(compilationUnit, isNotNull); |
1921 } | 1710 } |
1922 | 1711 |
1923 void test_setAnalysisOptions() { | 1712 void test_setAnalysisOptions() { |
1924 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); | 1713 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); |
1925 options.cacheSize = 42; | 1714 options.cacheSize = 42; |
1926 options.dart2jsHint = false; | 1715 options.dart2jsHint = false; |
1927 options.hint = false; | 1716 options.hint = false; |
1928 _context.analysisOptions = options; | 1717 context.analysisOptions = options; |
1929 AnalysisOptions result = _context.analysisOptions; | 1718 AnalysisOptions result = context.analysisOptions; |
1930 expect(result.cacheSize, options.cacheSize); | 1719 expect(result.cacheSize, options.cacheSize); |
1931 expect(result.dart2jsHint, options.dart2jsHint); | 1720 expect(result.dart2jsHint, options.dart2jsHint); |
1932 expect(result.hint, options.hint); | 1721 expect(result.hint, options.hint); |
1933 } | 1722 } |
1934 | 1723 |
1935 void test_setAnalysisPriorityOrder_empty() { | 1724 void test_setAnalysisPriorityOrder_empty() { |
1936 _context.analysisPriorityOrder = new List<Source>(); | 1725 context.analysisPriorityOrder = new List<Source>(); |
1937 } | 1726 } |
1938 | 1727 |
1939 void test_setAnalysisPriorityOrder_nonEmpty() { | 1728 void test_setAnalysisPriorityOrder_nonEmpty() { |
1940 List<Source> sources = new List<Source>(); | 1729 List<Source> sources = new List<Source>(); |
1941 sources.add(_addSource("/lib.dart", "library lib;")); | 1730 sources.add(addSource("/lib.dart", "library lib;")); |
1942 _context.analysisPriorityOrder = sources; | 1731 context.analysisPriorityOrder = sources; |
1943 } | 1732 } |
1944 | 1733 |
1945 void test_setChangedContents_notResolved() { | 1734 void test_setChangedContents_notResolved() { |
1946 _context = contextWithCore(); | |
1947 AnalysisOptionsImpl options = | 1735 AnalysisOptionsImpl options = |
1948 new AnalysisOptionsImpl.con1(_context.analysisOptions); | 1736 new AnalysisOptionsImpl.con1(context.analysisOptions); |
1949 options.incremental = true; | 1737 options.incremental = true; |
1950 _context.analysisOptions = options; | 1738 context.analysisOptions = options; |
1951 _sourceFactory = _context.sourceFactory; | |
1952 String oldCode = r''' | 1739 String oldCode = r''' |
1953 library lib; | 1740 library lib; |
1954 int a = 0;'''; | 1741 int a = 0;'''; |
1955 Source librarySource = _addSource("/lib.dart", oldCode); | 1742 Source librarySource = addSource("/lib.dart", oldCode); |
1956 int offset = oldCode.indexOf("int a") + 4; | 1743 int offset = oldCode.indexOf("int a") + 4; |
1957 String newCode = r''' | 1744 String newCode = r''' |
1958 library lib; | 1745 library lib; |
1959 int ya = 0;'''; | 1746 int ya = 0;'''; |
1960 _context.setChangedContents(librarySource, newCode, offset, 0, 1); | 1747 context.setChangedContents(librarySource, newCode, offset, 0, 1); |
1961 expect(_context.getContents(librarySource).data, newCode); | 1748 expect(context.getContents(librarySource).data, newCode); |
1962 expect(_getIncrementalAnalysisCache(_context), isNull); | 1749 expect(_getIncrementalAnalysisCache(context), isNull); |
1963 } | 1750 } |
1964 | 1751 |
1965 Future test_setContents_libraryWithPart() { | 1752 Future test_setContents_libraryWithPart() { |
1966 _context = contextWithCore(); | |
1967 SourcesChangedListener listener = new SourcesChangedListener(); | 1753 SourcesChangedListener listener = new SourcesChangedListener(); |
1968 _context.onSourcesChanged.listen(listener.onData); | 1754 context.onSourcesChanged.listen(listener.onData); |
1969 _sourceFactory = _context.sourceFactory; | |
1970 String libraryContents1 = r''' | 1755 String libraryContents1 = r''' |
1971 library lib; | 1756 library lib; |
1972 part 'part.dart'; | 1757 part 'part.dart'; |
1973 int a = 0;'''; | 1758 int a = 0;'''; |
1974 Source librarySource = _addSource("/lib.dart", libraryContents1); | 1759 Source librarySource = addSource("/lib.dart", libraryContents1); |
1975 String partContents1 = r''' | 1760 String partContents1 = r''' |
1976 part of lib; | 1761 part of lib; |
1977 int b = a;'''; | 1762 int b = a;'''; |
1978 Source partSource = _addSource("/part.dart", partContents1); | 1763 Source partSource = addSource("/part.dart", partContents1); |
1979 _context.computeLibraryElement(librarySource); | 1764 context.computeLibraryElement(librarySource); |
1980 IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache( | 1765 IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache( |
1981 librarySource, librarySource, null, null, null, 0, 0, 0); | 1766 librarySource, librarySource, null, null, null, 0, 0, 0); |
1982 _setIncrementalAnalysisCache(_context, incrementalCache); | 1767 _setIncrementalAnalysisCache(context, incrementalCache); |
1983 expect(_getIncrementalAnalysisCache(_context), same(incrementalCache)); | 1768 expect(_getIncrementalAnalysisCache(context), same(incrementalCache)); |
1984 String libraryContents2 = r''' | 1769 String libraryContents2 = r''' |
1985 library lib; | 1770 library lib; |
1986 part 'part.dart'; | 1771 part 'part.dart'; |
1987 int aa = 0;'''; | 1772 int aa = 0;'''; |
1988 _context.setContents(librarySource, libraryContents2); | 1773 context.setContents(librarySource, libraryContents2); |
1989 expect(_context.getResolvedCompilationUnit2(partSource, librarySource), | 1774 expect( |
1990 isNull); | 1775 context.getResolvedCompilationUnit2(partSource, librarySource), isNull); |
1991 expect(_getIncrementalAnalysisCache(_context), isNull); | 1776 expect(_getIncrementalAnalysisCache(context), isNull); |
1992 return pumpEventQueue().then((_) { | 1777 return pumpEventQueue().then((_) { |
1993 listener.assertEvent(wereSourcesAdded: true); | 1778 listener.assertEvent(wereSourcesAdded: true); |
1994 listener.assertEvent(changedSources: [librarySource]); | 1779 listener.assertEvent(changedSources: [librarySource]); |
1995 listener.assertEvent(wereSourcesAdded: true); | 1780 listener.assertEvent(wereSourcesAdded: true); |
1996 listener.assertEvent(changedSources: [partSource]); | 1781 listener.assertEvent(changedSources: [partSource]); |
1997 listener.assertEvent(changedSources: [librarySource]); | 1782 listener.assertEvent(changedSources: [librarySource]); |
1998 listener.assertNoMoreEvents(); | 1783 listener.assertNoMoreEvents(); |
1999 }); | 1784 }); |
2000 } | 1785 } |
2001 | 1786 |
2002 void test_setContents_null() { | 1787 void test_setContents_null() { |
2003 _context = contextWithCore(); | 1788 Source librarySource = addSource("/lib.dart", r''' |
2004 _sourceFactory = _context.sourceFactory; | |
2005 Source librarySource = _addSource("/lib.dart", r''' | |
2006 library lib; | 1789 library lib; |
2007 int a = 0;'''); | 1790 int a = 0;'''); |
2008 _context.computeLibraryElement(librarySource); | 1791 context.computeLibraryElement(librarySource); |
2009 IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache( | 1792 IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache( |
2010 librarySource, librarySource, null, null, null, 0, 0, 0); | 1793 librarySource, librarySource, null, null, null, 0, 0, 0); |
2011 _setIncrementalAnalysisCache(_context, incrementalCache); | 1794 _setIncrementalAnalysisCache(context, incrementalCache); |
2012 expect(_getIncrementalAnalysisCache(_context), same(incrementalCache)); | 1795 expect(_getIncrementalAnalysisCache(context), same(incrementalCache)); |
2013 _context.setContents(librarySource, null); | 1796 context.setContents(librarySource, null); |
2014 expect(_context.getResolvedCompilationUnit2(librarySource, librarySource), | 1797 expect(context.getResolvedCompilationUnit2(librarySource, librarySource), |
2015 isNull); | 1798 isNull); |
2016 expect(_getIncrementalAnalysisCache(_context), isNull); | 1799 expect(_getIncrementalAnalysisCache(context), isNull); |
2017 } | 1800 } |
2018 | 1801 |
2019 void test_setSourceFactory() { | 1802 void test_setSourceFactory() { |
2020 expect(_context.sourceFactory, _sourceFactory); | 1803 expect(context.sourceFactory, sourceFactory); |
2021 SourceFactory factory = new SourceFactory([]); | 1804 SourceFactory factory = new SourceFactory([]); |
2022 _context.sourceFactory = factory; | 1805 context.sourceFactory = factory; |
2023 expect(_context.sourceFactory, factory); | 1806 expect(context.sourceFactory, factory); |
2024 } | 1807 } |
2025 | 1808 |
2026 void test_updateAnalysis() { | 1809 void test_updateAnalysis() { |
2027 expect(_context.sourcesNeedingProcessing, isEmpty); | 1810 expect(context.sourcesNeedingProcessing, isEmpty); |
2028 Source source = | 1811 Source source = newSource('/test.dart'); |
2029 new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); | |
2030 AnalysisDelta delta = new AnalysisDelta(); | 1812 AnalysisDelta delta = new AnalysisDelta(); |
2031 delta.setAnalysisLevel(source, AnalysisLevel.ALL); | 1813 delta.setAnalysisLevel(source, AnalysisLevel.ALL); |
2032 _context.applyAnalysisDelta(delta); | 1814 context.applyAnalysisDelta(delta); |
2033 expect(_context.sourcesNeedingProcessing, contains(source)); | 1815 expect(context.sourcesNeedingProcessing, contains(source)); |
2034 delta = new AnalysisDelta(); | 1816 delta = new AnalysisDelta(); |
2035 delta.setAnalysisLevel(source, AnalysisLevel.NONE); | 1817 delta.setAnalysisLevel(source, AnalysisLevel.NONE); |
2036 _context.applyAnalysisDelta(delta); | 1818 context.applyAnalysisDelta(delta); |
2037 expect(_context.sourcesNeedingProcessing.contains(source), isFalse); | 1819 expect(context.sourcesNeedingProcessing.contains(source), isFalse); |
2038 } | 1820 } |
2039 | 1821 |
2040 Future xtest_computeResolvedCompilationUnitAsync() { | 1822 Future xtest_computeResolvedCompilationUnitAsync() { |
2041 _context = contextWithCore(); | 1823 Source source = addSource("/lib.dart", "library lib;"); |
2042 _sourceFactory = _context.sourceFactory; | |
2043 Source source = _addSource("/lib.dart", "library lib;"); | |
2044 // Complete all pending analysis tasks and flush the AST so that it won't | 1824 // Complete all pending analysis tasks and flush the AST so that it won't |
2045 // be available immediately. | 1825 // be available immediately. |
2046 _performPendingAnalysisTasks(); | 1826 _performPendingAnalysisTasks(); |
2047 _flushAst(source); | 1827 _flushAst(source); |
2048 bool completed = false; | 1828 bool completed = false; |
2049 _context | 1829 context |
2050 .computeResolvedCompilationUnitAsync(source, source) | 1830 .computeResolvedCompilationUnitAsync(source, source) |
2051 .then((CompilationUnit unit) { | 1831 .then((CompilationUnit unit) { |
2052 expect(unit, isNotNull); | 1832 expect(unit, isNotNull); |
2053 completed = true; | 1833 completed = true; |
2054 }); | 1834 }); |
2055 return pumpEventQueue().then((_) { | 1835 return pumpEventQueue().then((_) { |
2056 expect(completed, isFalse); | 1836 expect(completed, isFalse); |
2057 _performPendingAnalysisTasks(); | 1837 _performPendingAnalysisTasks(); |
2058 }).then((_) => pumpEventQueue()).then((_) { | 1838 }).then((_) => pumpEventQueue()).then((_) { |
2059 expect(completed, isTrue); | 1839 expect(completed, isTrue); |
2060 }); | 1840 }); |
2061 } | 1841 } |
2062 | 1842 |
2063 Future xtest_computeResolvedCompilationUnitAsync_cancel() { | 1843 Future xtest_computeResolvedCompilationUnitAsync_cancel() { |
2064 _context = contextWithCore(); | 1844 Source source = addSource("/lib.dart", "library lib;"); |
2065 _sourceFactory = _context.sourceFactory; | |
2066 Source source = _addSource("/lib.dart", "library lib;"); | |
2067 // Complete all pending analysis tasks and flush the AST so that it won't | 1845 // Complete all pending analysis tasks and flush the AST so that it won't |
2068 // be available immediately. | 1846 // be available immediately. |
2069 _performPendingAnalysisTasks(); | 1847 _performPendingAnalysisTasks(); |
2070 _flushAst(source); | 1848 _flushAst(source); |
2071 CancelableFuture<CompilationUnit> future = | 1849 CancelableFuture<CompilationUnit> future = |
2072 _context.computeResolvedCompilationUnitAsync(source, source); | 1850 context.computeResolvedCompilationUnitAsync(source, source); |
2073 bool completed = false; | 1851 bool completed = false; |
2074 future.then((CompilationUnit unit) { | 1852 future.then((CompilationUnit unit) { |
2075 fail('Future should have been canceled'); | 1853 fail('Future should have been canceled'); |
2076 }, onError: (error) { | 1854 }, onError: (error) { |
2077 expect(error, new isInstanceOf<FutureCanceledError>()); | 1855 expect(error, new isInstanceOf<FutureCanceledError>()); |
2078 completed = true; | 1856 completed = true; |
2079 }); | 1857 }); |
2080 expect(completed, isFalse); | 1858 expect(completed, isFalse); |
2081 expect(_context.pendingFutureSources_forTesting, isNotEmpty); | 1859 expect(context.pendingFutureSources_forTesting, isNotEmpty); |
2082 future.cancel(); | 1860 future.cancel(); |
2083 expect(_context.pendingFutureSources_forTesting, isEmpty); | 1861 expect(context.pendingFutureSources_forTesting, isEmpty); |
2084 return pumpEventQueue().then((_) { | 1862 return pumpEventQueue().then((_) { |
2085 expect(completed, isTrue); | 1863 expect(completed, isTrue); |
2086 expect(_context.pendingFutureSources_forTesting, isEmpty); | 1864 expect(context.pendingFutureSources_forTesting, isEmpty); |
2087 }); | 1865 }); |
2088 } | 1866 } |
2089 | 1867 |
2090 void xtest_performAnalysisTask_stress() { | 1868 void xtest_performAnalysisTask_stress() { |
2091 int maxCacheSize = 4; | 1869 int maxCacheSize = 4; |
2092 AnalysisOptionsImpl options = | 1870 AnalysisOptionsImpl options = |
2093 new AnalysisOptionsImpl.con1(_context.analysisOptions); | 1871 new AnalysisOptionsImpl.con1(context.analysisOptions); |
2094 options.cacheSize = maxCacheSize; | 1872 options.cacheSize = maxCacheSize; |
2095 _context.analysisOptions = options; | 1873 context.analysisOptions = options; |
2096 int sourceCount = maxCacheSize + 2; | 1874 int sourceCount = maxCacheSize + 2; |
2097 List<Source> sources = new List<Source>(); | 1875 List<Source> sources = new List<Source>(); |
2098 ChangeSet changeSet = new ChangeSet(); | 1876 ChangeSet changeSet = new ChangeSet(); |
2099 for (int i = 0; i < sourceCount; i++) { | 1877 for (int i = 0; i < sourceCount; i++) { |
2100 Source source = _addSource("/lib$i.dart", "library lib$i;"); | 1878 Source source = addSource("/lib$i.dart", "library lib$i;"); |
2101 sources.add(source); | 1879 sources.add(source); |
2102 changeSet.addedSource(source); | 1880 changeSet.addedSource(source); |
2103 } | 1881 } |
2104 _context.applyChanges(changeSet); | 1882 context.applyChanges(changeSet); |
2105 _context.analysisPriorityOrder = sources; | 1883 context.analysisPriorityOrder = sources; |
2106 for (int i = 0; i < 1000; i++) { | 1884 for (int i = 0; i < 1000; i++) { |
2107 List<ChangeNotice> notice = _context.performAnalysisTask().changeNotices; | 1885 List<ChangeNotice> notice = context.performAnalysisTask().changeNotices; |
2108 if (notice == null) { | 1886 if (notice == null) { |
2109 //System.out.println("test_performAnalysisTask_stress: " + i); | 1887 //System.out.println("test_performAnalysisTask_stress: " + i); |
2110 break; | 1888 break; |
2111 } | 1889 } |
2112 } | 1890 } |
2113 List<ChangeNotice> notice = _context.performAnalysisTask().changeNotices; | 1891 List<ChangeNotice> notice = context.performAnalysisTask().changeNotices; |
2114 if (notice != null) { | 1892 if (notice != null) { |
2115 fail( | 1893 fail( |
2116 "performAnalysisTask failed to terminate after analyzing all sources")
; | 1894 "performAnalysisTask failed to terminate after analyzing all sources")
; |
2117 } | 1895 } |
2118 } | 1896 } |
2119 | 1897 |
2120 Source _addSource(String fileName, String contents) { | |
2121 Source source = | |
2122 new FileBasedSource.con1(FileUtilities2.createFile(fileName)); | |
2123 ChangeSet changeSet = new ChangeSet(); | |
2124 changeSet.addedSource(source); | |
2125 _context.applyChanges(changeSet); | |
2126 _context.setContents(source, contents); | |
2127 return source; | |
2128 } | |
2129 | |
2130 TestSource _addSourceWithException(String fileName) { | 1898 TestSource _addSourceWithException(String fileName) { |
2131 return _addSourceWithException2(fileName, ""); | 1899 return _addSourceWithException2(fileName, ""); |
2132 } | 1900 } |
2133 | 1901 |
2134 TestSource _addSourceWithException2(String fileName, String contents) { | 1902 TestSource _addSourceWithException2(String fileName, String contents) { |
2135 TestSource source = new TestSource(fileName, contents); | 1903 TestSource source = new TestSource(fileName, contents); |
2136 source.generateExceptionOnRead = true; | 1904 source.generateExceptionOnRead = true; |
2137 ChangeSet changeSet = new ChangeSet(); | 1905 ChangeSet changeSet = new ChangeSet(); |
2138 changeSet.addedSource(source); | 1906 changeSet.addedSource(source); |
2139 _context.applyChanges(changeSet); | 1907 context.applyChanges(changeSet); |
2140 return source; | 1908 return source; |
2141 } | 1909 } |
2142 | 1910 |
2143 /** | 1911 /** |
2144 * Perform analysis tasks up to 512 times and asserts that that was enough. | 1912 * Perform analysis tasks up to 512 times and asserts that that was enough. |
2145 */ | 1913 */ |
2146 void _analyzeAll_assertFinished() { | 1914 void _analyzeAll_assertFinished() { |
2147 _analyzeAll_assertFinished2(512); | 1915 _analyzeAll_assertFinished2(512); |
2148 } | 1916 } |
2149 | 1917 |
2150 /** | 1918 /** |
2151 * Perform analysis tasks up to the given number of times and asserts that tha
t was enough. | 1919 * Perform analysis tasks up to the given number of times and asserts that tha
t was enough. |
2152 * | 1920 * |
2153 * @param maxIterations the maximum number of tasks to perform | 1921 * @param maxIterations the maximum number of tasks to perform |
2154 */ | 1922 */ |
2155 void _analyzeAll_assertFinished2(int maxIterations) { | 1923 void _analyzeAll_assertFinished2(int maxIterations) { |
2156 for (int i = 0; i < maxIterations; i++) { | 1924 for (int i = 0; i < maxIterations; i++) { |
2157 List<ChangeNotice> notice = _context.performAnalysisTask().changeNotices; | 1925 List<ChangeNotice> notice = context.performAnalysisTask().changeNotices; |
2158 if (notice == null) { | 1926 if (notice == null) { |
2159 return; | 1927 return; |
2160 } | 1928 } |
2161 } | 1929 } |
2162 fail("performAnalysisTask failed to terminate after analyzing all sources"); | 1930 fail("performAnalysisTask failed to terminate after analyzing all sources"); |
2163 } | 1931 } |
2164 | 1932 |
2165 void _changeSource(TestSource source, String contents) { | 1933 void _changeSource(TestSource source, String contents) { |
2166 source.setContents(contents); | 1934 source.setContents(contents); |
2167 ChangeSet changeSet = new ChangeSet(); | 1935 ChangeSet changeSet = new ChangeSet(); |
2168 changeSet.changedSource(source); | 1936 changeSet.changedSource(source); |
2169 _context.applyChanges(changeSet); | 1937 context.applyChanges(changeSet); |
2170 } | 1938 } |
2171 | 1939 |
2172 /** | 1940 /** |
2173 * Search the given compilation unit for a class with the given name. Return t
he class with the | 1941 * Search the given compilation unit for a class with the given name. Return t
he class with the |
2174 * given name, or `null` if the class cannot be found. | 1942 * given name, or `null` if the class cannot be found. |
2175 * | 1943 * |
2176 * @param unit the compilation unit being searched | 1944 * @param unit the compilation unit being searched |
2177 * @param className the name of the class being searched for | 1945 * @param className the name of the class being searched for |
2178 * @return the class with the given name | 1946 * @return the class with the given name |
2179 */ | 1947 */ |
2180 ClassElement _findClass(CompilationUnitElement unit, String className) { | 1948 ClassElement _findClass(CompilationUnitElement unit, String className) { |
2181 for (ClassElement classElement in unit.types) { | 1949 for (ClassElement classElement in unit.types) { |
2182 if (classElement.displayName == className) { | 1950 if (classElement.displayName == className) { |
2183 return classElement; | 1951 return classElement; |
2184 } | 1952 } |
2185 } | 1953 } |
2186 return null; | 1954 return null; |
2187 } | 1955 } |
2188 | 1956 |
2189 void _flushAst(Source source) { | 1957 void _flushAst(Source source) { |
2190 CacheEntry entry = _context.getReadableSourceEntryOrNull(source); | 1958 CacheEntry entry = context.getReadableSourceEntryOrNull(source); |
2191 entry.setState(RESOLVED_UNIT, CacheState.FLUSHED); | 1959 entry.setState(RESOLVED_UNIT, CacheState.FLUSHED); |
2192 } | 1960 } |
2193 | 1961 |
2194 IncrementalAnalysisCache _getIncrementalAnalysisCache( | 1962 IncrementalAnalysisCache _getIncrementalAnalysisCache( |
2195 AnalysisContextImpl context2) { | 1963 AnalysisContextImpl context2) { |
2196 return context2.test_incrementalAnalysisCache; | 1964 return context2.test_incrementalAnalysisCache; |
2197 } | 1965 } |
2198 | 1966 |
2199 List<Source> _getPriorityOrder(AnalysisContextImpl context2) { | 1967 List<Source> _getPriorityOrder(AnalysisContextImpl context2) { |
2200 return context2.test_priorityOrder; | 1968 return context2.test_priorityOrder; |
2201 } | 1969 } |
2202 | 1970 |
2203 void _performPendingAnalysisTasks([int maxTasks = 20]) { | 1971 void _performPendingAnalysisTasks([int maxTasks = 20]) { |
2204 for (int i = 0; _context.performAnalysisTask().hasMoreWork; i++) { | 1972 for (int i = 0; context.performAnalysisTask().hasMoreWork; i++) { |
2205 if (i > maxTasks) { | 1973 if (i > maxTasks) { |
2206 fail('Analysis did not terminate.'); | 1974 fail('Analysis did not terminate.'); |
2207 } | 1975 } |
2208 } | 1976 } |
2209 } | 1977 } |
2210 | 1978 |
2211 void _removeSource(Source source) { | 1979 void _removeSource(Source source) { |
2212 ChangeSet changeSet = new ChangeSet(); | 1980 ChangeSet changeSet = new ChangeSet(); |
2213 changeSet.removedSource(source); | 1981 changeSet.removedSource(source); |
2214 _context.applyChanges(changeSet); | 1982 context.applyChanges(changeSet); |
2215 } | 1983 } |
2216 | 1984 |
2217 void _setIncrementalAnalysisCache( | 1985 void _setIncrementalAnalysisCache( |
2218 AnalysisContextImpl context, IncrementalAnalysisCache incrementalCache) { | 1986 AnalysisContextImpl context, IncrementalAnalysisCache incrementalCache) { |
2219 context.test_incrementalAnalysisCache = incrementalCache; | 1987 context.test_incrementalAnalysisCache = incrementalCache; |
2220 } | 1988 } |
2221 | 1989 |
2222 /** | 1990 /** |
2223 * Returns `true` if there is an [AnalysisError] with [ErrorSeverity.ERROR] in | 1991 * Returns `true` if there is an [AnalysisError] with [ErrorSeverity.ERROR] in |
2224 * the given [AnalysisErrorInfo]. | 1992 * the given [AnalysisErrorInfo]. |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2272 : super(name, UriKind.FILE_URI); | 2040 : super(name, UriKind.FILE_URI); |
2273 | 2041 |
2274 @override | 2042 @override |
2275 TimestampedData<String> get contents { | 2043 TimestampedData<String> get contents { |
2276 throw 'Read error'; | 2044 throw 'Read error'; |
2277 } | 2045 } |
2278 | 2046 |
2279 @override | 2047 @override |
2280 bool exists() => true; | 2048 bool exists() => true; |
2281 } | 2049 } |
OLD | NEW |