Files
sdk/pkg/analysis_server/test/analysis_server_test.dart
T
paulberry@google.com 245168938e Merge analysis server's mocks.dart and mocks2.dart into one file.
There were competing implementations of MockAnalysisContext and
MockSource, but one of the implementations was only used in one place
(analysis_server_test.dart), so it's been switched over to use the
other implementation.

R=scheglov@google.com

Review URL: https://codereview.chromium.org//532333002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39826 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-03 19:45:42 +00:00

128 lines
5.1 KiB
Dart

// Copyright (c) 2014, 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.
library test.analysis_server;
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/constants.dart';
import 'package:analysis_server/src/domain_server.dart';
import 'package:analysis_server/src/operation/operation.dart';
import 'package:analysis_server/src/protocol.dart';
import 'mock_sdk.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/java_engine.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:typed_mock/typed_mock.dart';
import 'package:unittest/unittest.dart';
import 'mocks.dart';
main() {
group('AnalysisServer', () {
test('server.status notifications', () {
AnalysisServerTestHelper helper = new AnalysisServerTestHelper();
MockAnalysisContext context = new MockAnalysisContext('context');
MockSource source = new MockSource('source');
when(source.fullName).thenReturn('foo.dart');
when(source.isInSystemLibrary).thenReturn(false);
ChangeNoticeImpl notice = new ChangeNoticeImpl(source);
notice.setErrors([], new LineInfo([0]));
AnalysisResult firstResult = new AnalysisResult([notice], 0, '', 0);
AnalysisResult lastResult = new AnalysisResult(null, 1, '', 1);
when(context.performAnalysisTask).thenReturnList(
[firstResult, firstResult, firstResult, lastResult]);
helper.server.serverServices.add(ServerService.STATUS);
helper.server.schedulePerformAnalysisOperation(context);
// Pump the event queue to make sure the server has finished any
// analysis.
return pumpEventQueue().then((_) {
List<Notification> notifications = helper.channel.notificationsReceived;
expect(notifications, isNot(isEmpty));
// expect at least one notification indicating analysis is in progress
expect(notifications.any((Notification notification) {
if (notification.event == SERVER_STATUS) {
var params = new ServerStatusParams.fromNotification(notification);
return params.analysis.isAnalyzing;
}
return false;
}), isTrue);
// the last notification should indicate that analysis is complete
Notification notification = notifications[notifications.length - 1];
var params = new ServerStatusParams.fromNotification(notification);
expect(params.analysis.isAnalyzing, isFalse);
});
});
test('echo', () {
AnalysisServerTestHelper helper = new AnalysisServerTestHelper();
helper.server.handlers = [new EchoHandler()];
var request = new Request('my22', 'echo');
return helper.channel.sendRequest(request)
.then((Response response) {
expect(response.id, equals('my22'));
expect(response.error, isNull);
});
});
test('shutdown', () {
AnalysisServerTestHelper helper = new AnalysisServerTestHelper();
helper.server.handlers = [new ServerDomainHandler(helper.server)];
var request = new Request('my28', SERVER_SHUTDOWN);
return helper.channel.sendRequest(request)
.then((Response response) {
expect(response.id, equals('my28'));
expect(response.error, isNull);
});
});
test('unknownRequest', () {
AnalysisServerTestHelper helper = new AnalysisServerTestHelper();
helper.server.handlers = [new EchoHandler()];
var request = new Request('my22', 'randomRequest');
return helper.channel.sendRequest(request)
.then((Response response) {
expect(response.id, equals('my22'));
expect(response.error, isNotNull);
});
});
test('rethrow exceptions', () {
AnalysisServerTestHelper helper = new AnalysisServerTestHelper();
Exception exceptionToThrow = new Exception('test exception');
MockServerOperation operation = new MockServerOperation(
ServerOperationPriority.ANALYSIS, (_) { throw exceptionToThrow; });
helper.server.operationQueue.add(operation);
try {
helper.server.performOperation();
fail('exception not rethrown');
} on AnalysisException catch (exception) {
expect(exception.cause.exception, equals(exceptionToThrow));
}
});
});
}
class AnalysisServerTestHelper {
MockServerChannel channel;
AnalysisServer server;
AnalysisServerTestHelper({bool rethrowExceptions: true}) {
channel = new MockServerChannel();
server = new AnalysisServer(channel, PhysicalResourceProvider.INSTANCE,
new MockPackageMapProvider(), null, new MockSdk(),
rethrowExceptions: rethrowExceptions);
}
}
class EchoHandler implements RequestHandler {
@override
Response handleRequest(Request request) {
if (request.method == 'echo') {
return new Response(request.id, result: {'echo': true});
}
return null;
}
}