blob: ce040dda620a9a21e981d80a51516fc208f48da2 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// ignore_for_file: implementation_imports
import 'dart:async';
import 'package:fuchsia_logger/src/internal/_log_message.dart';
import 'package:fuchsia_logger/src/internal/_log_writer.dart';
import 'package:logging/logging.dart';
import 'package:test/test.dart';
//TODO: need a test for setupLogger adding the name as a global tag
void main() {
group('fuchsia log writer tests', () {
Logger logger;
setUp(() {
logger = Logger.root;
});
tearDown(() {
logger.clearListeners();
});
test('unbuffered logs should write immediately', () {
bool gotMessage = false;
StubLogWriter(
logger: logger,
onMessageFunc: (_) {
gotMessage = true;
});
logger.info('foo');
expect(gotMessage, isTrue);
});
test('buffered logs should not write immediately', () {
bool gotMessage = false;
StubLogWriter(
logger: logger,
shouldBufferLogs: true,
onMessageFunc: (_) {
gotMessage = true;
});
logger.info('foo');
expect(gotMessage, isFalse);
});
test('buffered logs should write after startListening called', () async {
bool gotMessage = false;
final completer = Completer();
final writer = StubLogWriter(
logger: logger,
shouldBufferLogs: true,
onMessageFunc: (_) {
gotMessage = true;
completer.complete();
});
logger.info('foo');
expect(gotMessage, isFalse);
writer.readyToListen();
await completer.future;
expect(gotMessage, isTrue);
});
test('verify global tags removes null values', () {
List<String> tags;
StubLogWriter(
logger: logger,
onMessageFunc: (m) {
tags = m.tags;
}).globalTags = ['foo', null, 'bar'];
logger.info('foo');
expect(tags, equals(['foo', 'bar']));
});
test('verify global tags removes empty values', () {
List<String> tags;
StubLogWriter(
logger: logger,
onMessageFunc: (m) {
tags = m.tags;
}).globalTags = ['foo', '', 'bar'];
logger.info('foo');
expect(tags, equals(['foo', 'bar']));
});
test('setting global tags limits the amount of tags', () {
List<String> tags;
final expectedTags = ['foo', 'bar', 'baz', 'buzz'];
StubLogWriter(
logger: logger,
onMessageFunc: (m) {
tags = m.tags;
}).globalTags = ['foo', 'bar', 'baz', 'buzz', 'drop'];
logger.info('foo');
expect(tags, equals(expectedTags));
});
test('setting global tags truncates long tags', () {
const maxTagLength = 63; // from _log_writer.dart
List<String> tags;
final longTag = ''.padLeft(maxTagLength + 1, 'x');
StubLogWriter(
logger: logger,
onMessageFunc: (m) {
tags = m.tags;
}).globalTags = [longTag];
logger.info('foo');
expect(tags.firstWhere((t) => t.length == maxTagLength), isNotNull);
});
test('setting forceShowCodeLocation includes code location in tags', () {
String codeLocation;
StubLogWriter(
logger: logger,
onMessageFunc: (m) {
codeLocation = m.codeLocation;
}).forceShowCodeLocation = true;
logger.info('foo');
expect(codeLocation, matches(r'log_writer_test.dart\(\d+\)'));
});
});
}
class StubLogWriter extends LogWriter {
final void Function(LogMessage) onMessageFunc;
StubLogWriter({
this.onMessageFunc,
Logger logger,
shouldBufferLogs = false,
}) : super(logStream: logger.onRecord, shouldBufferLogs: shouldBufferLogs);
@override
void onMessage(LogMessage message) => this.onMessageFunc(message);
void readyToListen() => startListening(onMessageFunc);
}