blob: b1c263dd36b83f259d96f937292803466370b871 [file] [log] [blame]
// Copyright (c) 2015, 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.instrumentation;
import 'package:analyzer/instrumentation/instrumentation.dart';
import 'package:unittest/unittest.dart';
import '../reflective_tests.dart';
main() {
group('instrumentation', () {
runReflectiveTests(InstrumentationServiceTest);
runReflectiveTests(MulticastInstrumentationServerTest);
});
}
@reflectiveTest
class InstrumentationServiceTest {
void assertNormal(
TestInstrumentationServer server, String tag, String message) {
String sent = server.normalChannel.toString();
if (!sent.endsWith(':$tag:$message\n')) {
fail('Expected "...:$tag:$message", found "$sent"');
}
}
void test_logError_withColon() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
service.logError('Error:message');
assertNormal(server, InstrumentationService.TAG_ERROR, 'Error::message');
}
void test_logError_withLeadingColon() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
service.logError(':a:bb');
assertNormal(server, InstrumentationService.TAG_ERROR, '::a::bb');
}
void test_logError_withoutColon() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
String message = 'Error message';
service.logError(message);
assertNormal(server, InstrumentationService.TAG_ERROR, message);
}
void test_logException_noTrace() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
String message = 'exceptionMessage';
service.logException(message, null);
assertNormal(server, InstrumentationService.TAG_EXCEPTION, '$message:null');
}
void test_logFileRead() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
String path = '/file/path';
int time = 978336000000;
String content = 'class C {\n}\n';
service.logFileRead(path, time, content);
assertNormal(
server, InstrumentationService.TAG_FILE_READ, '$path:$time:$content');
}
void test_logLogEntry() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
String level = 'level';
DateTime time = new DateTime(2001);
String message = 'message';
service.logLogEntry(level, time, message);
assertNormal(server, InstrumentationService.TAG_LOG_ENTRY,
'$level:${time.millisecondsSinceEpoch}:$message');
}
void test_logNotification() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
String message = 'notificationText';
service.logNotification(message);
assertNormal(server, InstrumentationService.TAG_NOTIFICATION, message);
}
void test_logRequest() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
String message = 'requestText';
service.logRequest(message);
assertNormal(server, InstrumentationService.TAG_REQUEST, message);
}
void test_logResponse() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
String message = 'responseText';
service.logResponse(message);
assertNormal(server, InstrumentationService.TAG_RESPONSE, message);
}
void test_logVersion() {
TestInstrumentationServer server = new TestInstrumentationServer();
InstrumentationService service = new InstrumentationService(server);
service.logVersion('myUuid', 'someClientId', 'someClientVersion',
'aServerVersion', 'anSdkVersion');
expect(server.normalChannel.toString(), '');
expect(server.priorityChannel.toString(), endsWith(
':myUuid:someClientId:someClientVersion:aServerVersion:anSdkVersion\n'));
}
}
@reflectiveTest
class MulticastInstrumentationServerTest {
TestInstrumentationServer serverA = new TestInstrumentationServer();
TestInstrumentationServer serverB = new TestInstrumentationServer();
MulticastInstrumentationServer server;
void setUp() {
server = new MulticastInstrumentationServer([serverA, serverB]);
}
void test_log() {
server.log('foo bar');
_assertNormal(serverA, 'foo bar');
_assertNormal(serverB, 'foo bar');
}
void test_logWithPriority() {
server.logWithPriority('foo bar');
_assertPriority(serverA, 'foo bar');
_assertPriority(serverB, 'foo bar');
}
void test_shutdown() {
server.shutdown();
}
void _assertNormal(TestInstrumentationServer server, String message) {
String sent = server.normalChannel.toString();
if (!sent.endsWith('$message\n')) {
fail('Expected "...$message", found "$sent"');
}
}
void _assertPriority(TestInstrumentationServer server, String message) {
String sent = server.priorityChannel.toString();
if (!sent.endsWith('$message\n')) {
fail('Expected "...$message", found "$sent"');
}
}
}
class TestInstrumentationServer implements InstrumentationServer {
StringBuffer normalChannel = new StringBuffer();
StringBuffer priorityChannel = new StringBuffer();
@override
void log(String message) {
normalChannel.writeln(message);
}
@override
void logWithPriority(String message) {
priorityChannel.writeln(message);
}
@override
void shutdown() {
// Ignored
}
}