OLD | NEW |
| (Empty) |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 import 'dart:core'; | |
6 | |
7 import 'package:analysis_server/src/single_context_manager.dart'; | |
8 import 'package:analysis_server/src/utilities/null_string_sink.dart'; | |
9 import 'package:analyzer/file_system/memory_file_system.dart'; | |
10 import 'package:analyzer/src/dart/analysis/driver.dart'; | |
11 import 'package:analyzer/src/generated/engine.dart'; | |
12 import 'package:analyzer/src/generated/sdk.dart'; | |
13 import 'package:analyzer/src/generated/source.dart'; | |
14 import 'package:analyzer/src/generated/source_io.dart'; | |
15 import 'package:analyzer/src/util/glob.dart'; | |
16 import 'package:front_end/src/base/performace_logger.dart'; | |
17 import 'package:path/path.dart' as path; | |
18 import 'package:plugin/manager.dart'; | |
19 import 'package:plugin/plugin.dart'; | |
20 import 'package:test/test.dart'; | |
21 import 'package:test_reflective_loader/test_reflective_loader.dart'; | |
22 | |
23 import 'context_manager_test.dart' show TestContextManagerCallbacks; | |
24 import 'mocks.dart'; | |
25 | |
26 main() { | |
27 defineReflectiveSuite(() { | |
28 defineReflectiveTests(SingleContextManagerTest); | |
29 }); | |
30 } | |
31 | |
32 @reflectiveTest | |
33 class SingleContextManagerTest { | |
34 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); | |
35 | |
36 TestUriResolver packageResolver; | |
37 TestContextManagerCallbacks callbacks; | |
38 SingleContextManager manager; | |
39 | |
40 List<Glob> get analysisFilesGlobs { | |
41 List<String> patterns = <String>[ | |
42 '**/*.${AnalysisEngine.SUFFIX_DART}', | |
43 '**/*.${AnalysisEngine.SUFFIX_HTML}', | |
44 ]; | |
45 return patterns | |
46 .map((pattern) => new Glob(path.posix.separator, pattern)) | |
47 .toList(); | |
48 } | |
49 | |
50 String newFile(List<String> pathComponents, [String content = '']) { | |
51 String filePath = path.posix.joinAll(pathComponents); | |
52 resourceProvider.newFile(filePath, content); | |
53 return filePath; | |
54 } | |
55 | |
56 String newFolder(List<String> pathComponents) { | |
57 String folderPath = path.posix.joinAll(pathComponents); | |
58 resourceProvider.newFolder(folderPath); | |
59 return folderPath; | |
60 } | |
61 | |
62 void setUp() { | |
63 packageResolver = new TestUriResolver(); | |
64 | |
65 _processRequiredPlugins(); | |
66 DartSdkManager sdkManager = new DartSdkManager('/', false); | |
67 manager = new SingleContextManager(resourceProvider, sdkManager, | |
68 (_) => packageResolver, analysisFilesGlobs, new AnalysisOptionsImpl()); | |
69 PerformanceLog logger = new PerformanceLog(new NullStringSink()); | |
70 AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(logger); | |
71 callbacks = new TestContextManagerCallbacks( | |
72 resourceProvider, sdkManager, logger, scheduler); | |
73 manager.callbacks = callbacks; | |
74 } | |
75 | |
76 void test_isIgnored_false() { | |
77 String project = '/project'; | |
78 resourceProvider.newFolder(project); | |
79 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
80 expect(manager.isIgnored('$project/file.dart'), isFalse); | |
81 } | |
82 | |
83 void test_isIgnored_true_inDotFolder() { | |
84 String project = '/project'; | |
85 resourceProvider.newFolder(project); | |
86 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
87 expect(manager.isIgnored('$project/foo/.bar/file.dart'), isTrue); | |
88 } | |
89 | |
90 void test_isIgnored_true_inExcludedPath() { | |
91 String project = '/project'; | |
92 String excludedPath = '/project/excluded'; | |
93 resourceProvider.newFolder(project); | |
94 manager.setRoots( | |
95 <String>[project], <String>[excludedPath], <String, String>{}); | |
96 expect(manager.isIgnored('$excludedPath/file.dart'), isTrue); | |
97 } | |
98 | |
99 void test_isIgnored_true_notInRoot() { | |
100 String root1 = '/context/root1'; | |
101 String root2 = '/context/root2'; | |
102 resourceProvider.newFolder(root1); | |
103 resourceProvider.newFolder(root2); | |
104 manager.setRoots(<String>[root1, root2], <String>[], <String, String>{}); | |
105 expect(manager.isIgnored('/context/root3/file.dart'), isTrue); | |
106 } | |
107 | |
108 void test_isInAnalysisRoot_false_inExcludedPath() { | |
109 String project = '/project'; | |
110 String excludedPath = '/project/excluded'; | |
111 resourceProvider.newFolder(project); | |
112 manager.setRoots( | |
113 <String>[project], <String>[excludedPath], <String, String>{}); | |
114 expect(manager.isInAnalysisRoot('$excludedPath/file.dart'), isFalse); | |
115 } | |
116 | |
117 void test_isInAnalysisRoot_false_notInRoot() { | |
118 String root1 = '/context/root1'; | |
119 String root2 = '/context/root2'; | |
120 resourceProvider.newFolder(root1); | |
121 resourceProvider.newFolder(root2); | |
122 manager.setRoots(<String>[root1, root2], <String>[], <String, String>{}); | |
123 expect(manager.isInAnalysisRoot('/context/root3/file.dart'), isFalse); | |
124 } | |
125 | |
126 void test_isInAnalysisRoot_true() { | |
127 String project = '/project'; | |
128 resourceProvider.newFolder(project); | |
129 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
130 expect(manager.isInAnalysisRoot('$project/file.dart'), isTrue); | |
131 } | |
132 | |
133 void test_refresh() { | |
134 String project = '/project'; | |
135 String file1 = '$project/file1.dart'; | |
136 String file2 = '$project/file2.dart'; | |
137 // create files | |
138 resourceProvider.newFile(file1, ''); | |
139 resourceProvider.newFile(file2, ''); | |
140 // set roots | |
141 manager.setRoots(<String>[project], <String>[file2], <String, String>{}); | |
142 callbacks.assertContextPaths([project]); | |
143 callbacks.assertContextFiles(project, [file1]); | |
144 // refresh | |
145 manager.refresh([]); | |
146 callbacks.assertContextPaths([project]); | |
147 callbacks.assertContextFiles(project, [file1]); | |
148 } | |
149 | |
150 void test_setRoots_addFolderWithDartFile() { | |
151 String project = '/project'; | |
152 String file = '$project/lib/foo.dart'; | |
153 resourceProvider.newFile(file, ''); | |
154 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
155 // verify | |
156 callbacks.assertContextPaths([project]); | |
157 callbacks.assertContextFiles(project, [file]); | |
158 } | |
159 | |
160 void test_setRoots_addFolderWithDartFileInSubfolder() { | |
161 String project = '/project'; | |
162 String file = '$project/foo/bar.dart'; | |
163 resourceProvider.newFile(file, ''); | |
164 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
165 // verify | |
166 callbacks.assertContextFiles(project, [file]); | |
167 } | |
168 | |
169 void test_setRoots_addFolderWithDummyLink() { | |
170 String project = '/project'; | |
171 String file = '$project/foo.dart'; | |
172 resourceProvider.newDummyLink(file); | |
173 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
174 // verify | |
175 callbacks.assertContextFiles(project, []); | |
176 } | |
177 | |
178 void test_setRoots_exclude_newRoot_withExcludedFile() { | |
179 String project = '/project'; | |
180 String file1 = '$project/file1.dart'; | |
181 String file2 = '$project/file2.dart'; | |
182 // create files | |
183 resourceProvider.newFile(file1, ''); | |
184 resourceProvider.newFile(file2, ''); | |
185 // set roots | |
186 manager.setRoots(<String>[project], <String>[file1], <String, String>{}); | |
187 callbacks.assertContextPaths([project]); | |
188 callbacks.assertContextFiles(project, [file2]); | |
189 } | |
190 | |
191 void test_setRoots_exclude_newRoot_withExcludedFolder() { | |
192 String project = '/project'; | |
193 String folderA = '$project/aaa'; | |
194 String folderB = '$project/bbb'; | |
195 String fileA = '$folderA/a.dart'; | |
196 String fileB = '$folderB/b.dart'; | |
197 // create files | |
198 resourceProvider.newFile(fileA, ''); | |
199 resourceProvider.newFile(fileB, ''); | |
200 // set roots | |
201 manager.setRoots(<String>[project], <String>[folderB], <String, String>{}); | |
202 callbacks.assertContextPaths([project]); | |
203 callbacks.assertContextFiles(project, [fileA]); | |
204 } | |
205 | |
206 void test_setRoots_exclude_sameRoot_addExcludedFile() { | |
207 String project = '/project'; | |
208 String file1 = '$project/file1.dart'; | |
209 String file2 = '$project/file2.dart'; | |
210 // create files | |
211 resourceProvider.newFile(file1, ''); | |
212 resourceProvider.newFile(file2, ''); | |
213 // set roots | |
214 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
215 callbacks.assertContextPaths([project]); | |
216 callbacks.assertContextFiles(project, [file1, file2]); | |
217 // exclude "2" | |
218 manager.setRoots(<String>[project], <String>[file2], <String, String>{}); | |
219 callbacks.assertContextPaths([project]); | |
220 callbacks.assertContextFiles(project, [file1]); | |
221 } | |
222 | |
223 void test_setRoots_exclude_sameRoot_addExcludedFolder() { | |
224 String project = '/project'; | |
225 String folderA = '$project/aaa'; | |
226 String folderB = '$project/bbb'; | |
227 String fileA = '$folderA/a.dart'; | |
228 String fileB = '$folderB/b.dart'; | |
229 // create files | |
230 resourceProvider.newFile(fileA, 'library a;'); | |
231 resourceProvider.newFile(fileB, 'library b;'); | |
232 // initially both "aaa/a" and "bbb/b" are included | |
233 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
234 callbacks.assertContextPaths([project]); | |
235 callbacks.assertContextFiles(project, [fileA, fileB]); | |
236 // exclude "bbb/" | |
237 manager.setRoots(<String>[project], <String>[folderB], <String, String>{}); | |
238 callbacks.assertContextPaths([project]); | |
239 callbacks.assertContextFiles(project, [fileA]); | |
240 } | |
241 | |
242 void test_setRoots_exclude_sameRoot_removeExcludedFile() { | |
243 String project = '/project'; | |
244 String file1 = '$project/file1.dart'; | |
245 String file2 = '$project/file2.dart'; | |
246 // create files | |
247 resourceProvider.newFile(file1, '// 1'); | |
248 resourceProvider.newFile(file2, '// 2'); | |
249 // set roots | |
250 manager.setRoots(<String>[project], <String>[file2], <String, String>{}); | |
251 callbacks.assertContextPaths([project]); | |
252 callbacks.assertContextFiles(project, [file1]); | |
253 // stop excluding "2" | |
254 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
255 callbacks.assertContextPaths([project]); | |
256 callbacks.assertContextFiles(project, [file1, file2]); | |
257 } | |
258 | |
259 void test_setRoots_exclude_sameRoot_removeExcludedFile_inFolder() { | |
260 String project = '/project'; | |
261 String file1 = '$project/bin/file1.dart'; | |
262 String file2 = '$project/bin/file2.dart'; | |
263 // create files | |
264 resourceProvider.newFile(file1, '// 1'); | |
265 resourceProvider.newFile(file2, '// 2'); | |
266 // set roots | |
267 manager.setRoots(<String>[project], <String>[file2], <String, String>{}); | |
268 callbacks.assertContextPaths([project]); | |
269 callbacks.assertContextFiles(project, [file1]); | |
270 // stop excluding "2" | |
271 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
272 callbacks.assertContextPaths([project]); | |
273 callbacks.assertContextFiles(project, [file1, file2]); | |
274 } | |
275 | |
276 void test_setRoots_exclude_sameRoot_removeExcludedFolder() { | |
277 String project = '/project'; | |
278 String folderA = '$project/aaa'; | |
279 String folderB = '$project/bbb'; | |
280 String fileA = '$folderA/a.dart'; | |
281 String fileB = '$folderB/b.dart'; | |
282 // create files | |
283 resourceProvider.newFile(fileA, 'library a;'); | |
284 resourceProvider.newFile(fileB, 'library b;'); | |
285 // exclude "bbb/" | |
286 manager.setRoots(<String>[project], <String>[folderB], <String, String>{}); | |
287 callbacks.assertContextPaths([project]); | |
288 callbacks.assertContextFiles(project, [fileA]); | |
289 // stop excluding "bbb/" | |
290 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
291 callbacks.assertContextPaths([project]); | |
292 callbacks.assertContextFiles(project, [fileA, fileB]); | |
293 } | |
294 | |
295 void test_setRoots_ignoreGlobs() { | |
296 String project = '/project'; | |
297 String file1 = '$project/file.dart'; | |
298 String file2 = '$project/file.foo'; | |
299 // create files | |
300 resourceProvider.newFile(file1, ''); | |
301 resourceProvider.newFile(file2, ''); | |
302 // set roots | |
303 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
304 callbacks.assertContextPaths([project]); | |
305 callbacks.assertContextFiles(project, [file1]); | |
306 } | |
307 | |
308 void test_setRoots_newContextFolder_coverNewRoot() { | |
309 String contextPath = '/context'; | |
310 String root1 = '$contextPath/root1'; | |
311 String file1 = '$root1/file1.dart'; | |
312 String root2 = '$contextPath/root2'; | |
313 String file2 = '$root2/file1.dart'; | |
314 // create files | |
315 resourceProvider.newFile(file1, ''); | |
316 resourceProvider.newFile(file2, ''); | |
317 // cover single root '/context/root1' | |
318 manager.setRoots(<String>[root1], <String>[], <String, String>{}); | |
319 callbacks.assertContextPaths([root1]); | |
320 callbacks.assertContextFiles(root1, [file1]); | |
321 // cover two roots | |
322 manager.setRoots(<String>[root1, root2], <String>[], <String, String>{}); | |
323 callbacks.assertContextPaths([contextPath]); | |
324 callbacks.assertContextFiles(contextPath, [file1, file2]); | |
325 // cover single root '/context/root2' | |
326 manager.setRoots(<String>[root2], <String>[], <String, String>{}); | |
327 callbacks.assertContextPaths([root2]); | |
328 callbacks.assertContextFiles(root2, [file2]); | |
329 } | |
330 | |
331 void test_setRoots_newContextFolder_replace() { | |
332 String contextPath1 = '/context1'; | |
333 String root11 = '$contextPath1/root1'; | |
334 String root12 = '$contextPath1/root2'; | |
335 String file11 = '$root11/file1.dart'; | |
336 String file12 = '$root12/file2.dart'; | |
337 String contextPath2 = '/context2'; | |
338 String root21 = '$contextPath2/root1'; | |
339 String root22 = '$contextPath2/root2'; | |
340 String file21 = '$root21/file1.dart'; | |
341 String file22 = '$root22/file2.dart'; | |
342 // create files | |
343 resourceProvider.newFile(file11, ''); | |
344 resourceProvider.newFile(file12, ''); | |
345 resourceProvider.newFile(file21, ''); | |
346 resourceProvider.newFile(file22, ''); | |
347 // set roots in '/context1' | |
348 manager.setRoots(<String>[root11, root12], <String>[], <String, String>{}); | |
349 callbacks.assertContextPaths([contextPath1]); | |
350 callbacks.assertContextFiles(contextPath1, [file11, file12]); | |
351 // set roots in '/context2' | |
352 manager.setRoots(<String>[root21, root22], <String>[], <String, String>{}); | |
353 callbacks.assertContextPaths([contextPath2]); | |
354 callbacks.assertContextFiles(contextPath2, [file21, file22]); | |
355 } | |
356 | |
357 void test_setRoots_pathContainsDotFile() { | |
358 // If the path to a file (relative to the context root) contains a folder | |
359 // whose name begins with '.', then the file is ignored. | |
360 String project = '/project'; | |
361 String fileA = '$project/foo.dart'; | |
362 String fileB = '$project/.pub/bar.dart'; | |
363 resourceProvider.newFile(fileA, ''); | |
364 resourceProvider.newFile(fileB, ''); | |
365 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
366 callbacks.assertContextPaths([project]); | |
367 callbacks.assertContextFiles(project, [fileA]); | |
368 } | |
369 | |
370 void test_setRoots_rootPathContainsDotFile() { | |
371 // If the path to the context root itself contains a folder whose name | |
372 // begins with '.', then that is not sufficient to cause any files in the | |
373 // context to be ignored. | |
374 String project = '/.pub/project'; | |
375 String fileA = '$project/foo.dart'; | |
376 resourceProvider.newFile(fileA, ''); | |
377 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
378 callbacks.assertContextPaths([project]); | |
379 callbacks.assertContextFiles(project, [fileA]); | |
380 } | |
381 | |
382 test_watch_addFile() async { | |
383 String project = '/project'; | |
384 resourceProvider.newFolder(project); | |
385 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
386 // empty folder initially | |
387 callbacks.assertContextFiles(project, []); | |
388 // add file | |
389 String file = '$project/foo.dart'; | |
390 resourceProvider.newFile(file, 'contents'); | |
391 // the file was added | |
392 await pumpEventQueue(); | |
393 callbacks.assertContextFiles(project, [file]); | |
394 } | |
395 | |
396 test_watch_addFile_afterChangingRoots() async { | |
397 String contextPath = '/context'; | |
398 String root1 = '$contextPath/root1'; | |
399 String root2 = '$contextPath/root2'; | |
400 String file1 = '$root1/file1.dart'; | |
401 String file2 = '$root2/file2.dart'; | |
402 resourceProvider.newFolder(root1); | |
403 resourceProvider.newFolder(root2); | |
404 manager.setRoots(<String>[root1], <String>[], <String, String>{}); | |
405 manager.setRoots(<String>[root2], <String>[], <String, String>{}); | |
406 manager.setRoots(<String>[root1, root2], <String>[], <String, String>{}); | |
407 manager.setRoots(<String>[root2], <String>[], <String, String>{}); | |
408 // empty folder initially | |
409 callbacks.assertContextFiles(root2, []); | |
410 // add files | |
411 resourceProvider.newFile(file1, ''); | |
412 resourceProvider.newFile(file2, ''); | |
413 // the file was added | |
414 await pumpEventQueue(); | |
415 callbacks.assertContextFiles(root2, [file2]); | |
416 } | |
417 | |
418 test_watch_addFile_excluded() async { | |
419 String project = '/project'; | |
420 String folderA = '$project/aaa'; | |
421 String folderB = '$project/bbb'; | |
422 String fileA = '$folderA/a.dart'; | |
423 String fileB = '$folderB/b.dart'; | |
424 // create files | |
425 resourceProvider.newFile(fileA, 'library a;'); | |
426 // set roots | |
427 manager.setRoots(<String>[project], <String>[folderB], <String, String>{}); | |
428 callbacks.assertContextPaths([project]); | |
429 callbacks.assertContextFiles(project, [fileA]); | |
430 // add a file, ignored as excluded | |
431 resourceProvider.newFile(fileB, 'library b;'); | |
432 await pumpEventQueue(); | |
433 callbacks.assertContextPaths([project]); | |
434 callbacks.assertContextFiles(project, [fileA]); | |
435 } | |
436 | |
437 test_watch_addFile_notInRoot() async { | |
438 String contextPath = '/roots'; | |
439 String root1 = '$contextPath/root1'; | |
440 String root2 = '$contextPath/root2'; | |
441 String root3 = '$contextPath/root3'; | |
442 String file1 = '$root1/file1.dart'; | |
443 String file2 = '$root2/file2.dart'; | |
444 String file3 = '$root3/file3.dart'; | |
445 // create files | |
446 resourceProvider.newFile(file1, ''); | |
447 resourceProvider.newFile(file2, ''); | |
448 // set roots | |
449 manager.setRoots(<String>[root1, root2], <String>[], <String, String>{}); | |
450 callbacks.assertContextPaths([contextPath]); | |
451 callbacks.assertContextFiles(contextPath, [file1, file2]); | |
452 // add a file, not in a root - ignored | |
453 resourceProvider.newFile(file3, ''); | |
454 await pumpEventQueue(); | |
455 callbacks.assertContextPaths([contextPath]); | |
456 callbacks.assertContextFiles(contextPath, [file1, file2]); | |
457 } | |
458 | |
459 test_watch_addFile_pathContainsDotFile() async { | |
460 // If a file is added and the absolute path to it contains a folder whose | |
461 // name begins with '.', then the file is ignored. | |
462 String project = '/project'; | |
463 String fileA = '$project/foo.dart'; | |
464 String fileB = '$project/.pub/bar.dart'; | |
465 resourceProvider.newFile(fileA, ''); | |
466 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
467 callbacks.assertContextPaths([project]); | |
468 callbacks.assertContextFiles(project, [fileA]); | |
469 resourceProvider.newFile(fileB, ''); | |
470 await pumpEventQueue(); | |
471 callbacks.assertContextPaths([project]); | |
472 callbacks.assertContextFiles(project, [fileA]); | |
473 } | |
474 | |
475 test_watch_addFileInSubFolder() async { | |
476 String project = '/project'; | |
477 resourceProvider.newFolder(project); | |
478 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
479 // empty folder initially | |
480 callbacks.assertContextFiles(project, []); | |
481 // add file in subfolder | |
482 String file = '$project/foo/bar.dart'; | |
483 resourceProvider.newFile(file, 'contents'); | |
484 // the file was added | |
485 await pumpEventQueue(); | |
486 callbacks.assertContextFiles(project, [file]); | |
487 } | |
488 | |
489 test_watch_deleteFile() async { | |
490 String project = '/project'; | |
491 String file = '$project/foo.dart'; | |
492 // add root with a file | |
493 resourceProvider.newFile(file, 'contents'); | |
494 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
495 // the file was added | |
496 callbacks.assertContextFiles(project, [file]); | |
497 // delete the file | |
498 resourceProvider.deleteFile(file); | |
499 await pumpEventQueue(); | |
500 callbacks.assertContextFiles(project, []); | |
501 } | |
502 | |
503 test_watch_deleteFolder() async { | |
504 String project = '/project'; | |
505 String file = '$project/foo.dart'; | |
506 // add root with a file | |
507 resourceProvider.newFile(file, 'contents'); | |
508 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
509 // the file was added | |
510 callbacks.assertContextFiles(project, [file]); | |
511 // delete the folder | |
512 resourceProvider.deleteFolder(project); | |
513 await pumpEventQueue(); | |
514 callbacks.assertContextFiles(project, []); | |
515 } | |
516 | |
517 test_watch_modifyFile() async { | |
518 String project = '/project'; | |
519 String file = '$project/foo.dart'; | |
520 // add root with a file | |
521 resourceProvider.newFile(file, 'contents'); | |
522 manager.setRoots(<String>[project], <String>[], <String, String>{}); | |
523 // the file was added | |
524 Map<String, int> filePaths = callbacks.currentContextFilePaths[project]; | |
525 expect(filePaths, hasLength(1)); | |
526 expect(filePaths, contains(file)); | |
527 expect(filePaths[file], equals(callbacks.now)); | |
528 // update the file | |
529 callbacks.now++; | |
530 resourceProvider.modifyFile(file, 'new contents'); | |
531 await pumpEventQueue(); | |
532 return expect(filePaths[file], equals(callbacks.now)); | |
533 } | |
534 | |
535 void _processRequiredPlugins() { | |
536 List<Plugin> plugins = <Plugin>[]; | |
537 plugins.addAll(AnalysisEngine.instance.requiredPlugins); | |
538 ExtensionManager manager = new ExtensionManager(); | |
539 manager.processPlugins(plugins); | |
540 } | |
541 } | |
542 | |
543 class TestUriResolver extends UriResolver { | |
544 @override | |
545 Source resolveAbsolute(Uri uri, [Uri actualUri]) { | |
546 return null; | |
547 } | |
548 } | |
OLD | NEW |