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

Unified Diff: pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart

Issue 2750483006: Add PluginWatcher to watch for new plugins that need to be run (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
diff --git a/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart b/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..27f76c26cb4bdc7211dee8a650ea3b6258aaa04a
--- /dev/null
+++ b/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
@@ -0,0 +1,150 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:typed_data';
+
+import 'package:analysis_server/src/plugin/plugin_manager.dart';
+import 'package:analysis_server/src/plugin/plugin_watcher.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/src/dart/analysis/byte_store.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart';
+import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer_plugin/protocol/protocol_generated.dart';
+import 'package:path/path.dart' as path;
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../mock_sdk.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(PluginWatcherTest);
+ });
+}
+
+@reflectiveTest
+class PluginWatcherTest {
+ MemoryResourceProvider resourceProvider;
+ TestPluginManager manager;
+ PluginWatcher watcher;
+
+ void setUp() {
+ resourceProvider = new MemoryResourceProvider();
+ manager = new TestPluginManager();
+ watcher = new PluginWatcher(resourceProvider, manager);
+ }
+
+ test_addedDriver() async {
+ String pkg1Path = resourceProvider.convertPath('/pkg1');
+ ContextRoot contextRoot = new ContextRoot(pkg1Path, []);
+ TestDriver driver = new TestDriver(resourceProvider, contextRoot);
+ watcher.addedDriver(driver, contextRoot);
+ expect(manager.addedContextRoots, isEmpty);
+ //
+ // Test to see whether the listener was configured correctly.
+ //
+ // Use a file in the package being analyzed.
+ //
+ resourceProvider.newFile(
+ resourceProvider.convertPath('/pkg1/lib/test1.dart'), '');
+ await driver.computeResult('package:pkg1/test1.dart');
+ expect(manager.addedContextRoots, isEmpty);
+ //
+ // Use a file that imports a package with a plugin.
+ //
+ resourceProvider.newFile(
+ resourceProvider.convertPath('/pkg2/lib/pkg2.dart'), '');
+ resourceProvider.newFile(
+ resourceProvider.convertPath('/pkg2/pubspec.yaml'), 'name: pkg2');
+ resourceProvider.newFile(
+ resourceProvider
+ .convertPath('/pkg2/tools/analysis_plugin/bin/plugin.dart'),
+ '');
+ await driver.computeResult('package:pkg2/pk2.dart');
+ expect(manager.addedContextRoots, hasLength(1));
+ }
+
+ void test_creation() {
+ expect(watcher.resourceProvider, resourceProvider);
+ expect(watcher.manager, manager);
+ }
+
+ test_removedDriver() {
+ String pkg1Path = resourceProvider.convertPath('/pkg1');
+ ContextRoot contextRoot = new ContextRoot(pkg1Path, []);
+ TestDriver driver = new TestDriver(resourceProvider, contextRoot);
+ watcher.addedDriver(driver, contextRoot);
+ watcher.removedDriver(driver);
+ expect(manager.removedContextRoots, equals([contextRoot]));
+ }
+}
+
+class TestDriver implements AnalysisDriver {
+ final MemoryResourceProvider resourceProvider;
+
+ SourceFactory sourceFactory;
+ FileSystemState fsState;
+
+ final _resultController = new StreamController<AnalysisResult>();
+
+ TestDriver(this.resourceProvider, ContextRoot contextRoot) {
+ path.Context pathContext = resourceProvider.pathContext;
+ MockSdk sdk = new MockSdk(resourceProvider: resourceProvider);
+ String packageName = pathContext.basename(contextRoot.root);
+ String libPath = pathContext.join(contextRoot.root, 'lib');
+ sourceFactory = new SourceFactory([
+ new DartUriResolver(sdk),
+ new PackageMapUriResolver(resourceProvider, {
+ packageName: [resourceProvider.getFolder(libPath)],
+ 'pkg2': [
+ resourceProvider.getFolder(resourceProvider.convertPath('/pkg2/lib'))
+ ]
+ })
+ ]);
+ fsState = new FileSystemState(
+ new PerformanceLog(null),
+ new MemoryByteStore(),
+ null,
+ resourceProvider,
+ sourceFactory,
+ new AnalysisOptionsImpl(),
+ new Uint32List(0));
+ }
+
+ Stream<AnalysisResult> get results => _resultController.stream;
+
+ Future<Null> computeResult(String uri) {
+ FileState file = fsState.getFileForUri(Uri.parse(uri));
+ AnalysisResult result = new AnalysisResult(this, null, file.path, null,
+ true, null, null, null, null, null, null, null);
+ _resultController.add(result);
+ return new Future.delayed(new Duration(milliseconds: 1));
+ }
+
+ noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+class TestPluginManager implements PluginManager {
+ List<ContextRoot> addedContextRoots = <ContextRoot>[];
+
+ List<ContextRoot> removedContextRoots = <ContextRoot>[];
+
+ @override
+ Future<Null> addPluginToContextRoot(
+ ContextRoot contextRoot, String path) async {
+ addedContextRoots.add(contextRoot);
+ return null;
+ }
+
+ noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+
+ @override
+ void removedContextRoot(ContextRoot contextRoot) {
+ removedContextRoots.add(contextRoot);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698