| 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);
|
| + }
|
| +}
|
|
|