anchor.diff:            break;
         }
       }
  +  }
  +
  +  void processRequiredPlugins(ServerPlugin serverPlugin) {
  +    List<Plugin> plugins = <Plugin>[];
  +    plugins.addAll(AnalysisEngine.instance.requiredPlugins);
  +    plugins.add(serverPlugin);
  +
  +    ExtensionManager manager = new ExtensionManager();
  +    manager.processPlugins(plugins);
  +  }
  +
  +  void setUp() {
  +    ServerPlugin serverPlugin = new ServerPlugin();
  +    processRequiredPlugins(serverPlugin);
  +    channel = new MockServerChannel();
  +    resourceProvider = new MemoryResourceProvider();
  +    // Create an SDK in the mock file system.
  +    new MockSdk(resourceProvider: resourceProvider);
  +    packageMapProvider = new MockPackageMapProvider();
  +    server = new AnalysisServer(
  +        channel,
  +        resourceProvider,
  +        packageMapProvider,
  +        null,
  +        serverPlugin,
  +        new AnalysisServerOptions(),
  +        new DartSdkManager('/', false),
  +        InstrumentationService.NULL_SERVICE,
  +        rethrowExceptions: true);
  +  }
  +
  +  Future test_echo() {
  +    server.handlers = [new EchoHandler()];
  +    var request = new Request('my22', 'echo');
  +    return channel.sendRequest(request).then((Response response) {
  +      expect(response.id, equals('my22'));
  +      expect(response.error, isNull);
  +    });
     }
   
     void test_rethrowExceptions() {
  
positive.code:     for (AnalysisService service in AnalysisService.VALUES) {
        subscriptions[service] = <String>[bar.path].toSet();
      }
      server.setAnalysisSubscriptions(subscriptions);
      await server.onAnalysisComplete;
      expect(server.statusAnalyzing, isFalse);
  
negative.code:   MemoryResourceProvider resourceProvider;
    MockPackageMapProvider packageMapProvider;
  
    /**
     * Test that having multiple analysis contexts analyze the same file doesn't
     * cause that file to receive duplicate notifications when it's modified.
     */
    Future do_not_test_no_duplicate_notifications() async {
      // Subscribe to STATUS so we'll know when analysis is done.
      server.serverServices = [ServerService.STATUS].toSet();
      resourceProvider.newFolder('/foo');
  