blob: dde70ce2409844d41ef38e06ecfa83a5b470fb02 [file] [log] [blame]
// 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 'package:analysis_server/src/domain_abstract.dart';
import 'package:analysis_server/src/plugin/plugin_manager.dart';
import 'package:analysis_server/src/protocol_server.dart' hide Element;
import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
import 'package:analyzer_plugin/protocol/protocol_constants.dart' as plugin;
import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../analysis_abstract.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AbstractRequestHandlerTest);
});
}
@reflectiveTest
class AbstractRequestHandlerTest extends AbstractAnalysisTest {
test_waitForResponses_empty_noTimeout() async {
AbstractRequestHandler handler = new TestAbstractRequestHandler(server);
Map<PluginInfo, Future<plugin.Response>> futures =
<PluginInfo, Future<plugin.Response>>{};
List<plugin.Response> responses = await handler.waitForResponses(futures);
expect(responses, isEmpty);
}
test_waitForResponses_empty_timeout() async {
AbstractRequestHandler handler = new TestAbstractRequestHandler(server);
Map<PluginInfo, Future<plugin.Response>> futures =
<PluginInfo, Future<plugin.Response>>{};
List<plugin.Response> responses =
await handler.waitForResponses(futures, timeout: 250);
expect(responses, isEmpty);
}
test_waitForResponses_nonEmpty_noTimeout_immediate() async {
AbstractRequestHandler handler = new TestAbstractRequestHandler(server);
PluginInfo plugin1 = new DiscoveredPluginInfo('p1', '', '', null, null);
PluginInfo plugin2 = new DiscoveredPluginInfo('p2', '', '', null, null);
plugin.Response response1 = new plugin.Response('1', 1);
plugin.Response response2 = new plugin.Response('2', 2);
Map<PluginInfo, Future<plugin.Response>> futures =
<PluginInfo, Future<plugin.Response>>{
plugin1: new Future.value(response1),
plugin2: new Future.value(response2),
};
List<plugin.Response> responses = await handler.waitForResponses(futures);
expect(responses, unorderedEquals([response1, response2]));
}
test_waitForResponses_nonEmpty_noTimeout_withError() async {
AbstractRequestHandler handler = new TestAbstractRequestHandler(server);
PluginInfo plugin1 = new DiscoveredPluginInfo('p1', '', '', null, null);
PluginInfo plugin2 = new DiscoveredPluginInfo('p2', '', '', null, null);
plugin.Response response1 = new plugin.Response('1', 1);
plugin.Response response2 = new plugin.Response('2', 2,
error: new plugin.RequestError(
plugin.RequestErrorCode.PLUGIN_ERROR, 'message'));
Map<PluginInfo, Future<plugin.Response>> futures =
<PluginInfo, Future<plugin.Response>>{
plugin1: new Future.value(response1),
plugin2: new Future.value(response2),
};
List<plugin.Response> responses = await handler.waitForResponses(futures);
expect(responses, unorderedEquals([response1]));
}
test_waitForResponses_nonEmpty_timeout_someDelayed() async {
AbstractRequestHandler handler = new TestAbstractRequestHandler(server);
PluginInfo plugin1 = new DiscoveredPluginInfo('p1', '', '', null, null);
PluginInfo plugin2 = new DiscoveredPluginInfo('p2', '', '', null, null);
PluginInfo plugin3 = new DiscoveredPluginInfo('p3', '', '', null, null);
plugin.Response response1 = new plugin.Response('1', 1);
plugin.Response response2 = new plugin.Response('2', 2);
plugin.Response response3 = new plugin.Response('3', 3);
Map<PluginInfo, Future<plugin.Response>> futures =
<PluginInfo, Future<plugin.Response>>{
plugin1:
new Future.delayed(new Duration(milliseconds: 500), () => response1),
plugin2: new Future.value(response2),
plugin3:
new Future.delayed(new Duration(milliseconds: 500), () => response3)
};
List<plugin.Response> responses =
await handler.waitForResponses(futures, timeout: 50);
expect(responses, unorderedEquals([response2]));
}
}
class TestAbstractRequestHandler extends AbstractRequestHandler {
TestAbstractRequestHandler(server) : super(server);
@override
Response handleRequest(Request request) {
fail('Unexpected invocation of handleRequest');
}
}