blob: 6e957dd275a78f19e1ce965fa8d83d7eaf9118c9 [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/_stdout_log_writer.dart';
import 'package:logging/logging.dart';
import 'package:test/test.dart';
void main() {
group('log messages', () {
test(
'finest message',
() => _overridePrint((logger, _) => logger.finest('foo'),
(l) => expect(l, '[FINEST] foo')));
test(
'finer message',
() => _overridePrint((logger, _) => logger.finer('foo'),
(l) => expect(l, '[FINER] foo')));
test(
'fine message',
() => _overridePrint(
(logger, _) => logger.fine('foo'), (l) => expect(l, '[FINE] foo')));
test(
'info message',
() => _overridePrint(
(logger, _) => logger.info('foo'), (l) => expect(l, '[INFO] foo')));
test(
'config message',
() => _overridePrint((logger, _) => logger.config('foo'),
(l) => expect(l, '[CONFIG] foo')));
test(
'warning message',
() => _overridePrint((logger, _) => logger.warning('foo'),
(l) => expect(l, '[WARNING] foo')));
test(
'severe message',
() => _overridePrint((logger, _) => logger.severe('foo'),
(l) => expect(l, '[ERROR] foo')));
test(
'shout message',
() => _overridePrint((logger, _) => logger.shout('foo'),
(l) => expect(l, '[FATAL] foo')));
test(
'includes error object',
() => _overridePrint(
(logger, _) => logger.severe('foo', 'fail message'),
(l) => expect(l, '[ERROR] foo: fail message')));
test('includes stack trace', () {
final lines = <String>[];
_overridePrint(
(logger, _) => logger.severe(
'foo', 'fail message', StackTrace.fromString('my stacktrace')),
lines.add);
expect(lines.length, 2);
expect(lines[1], 'my stacktrace');
});
test('includes code location', () {
_overridePrint((logger, writer) {
writer.forceShowCodeLocation = true;
logger.info('foo');
}, (l) => expect(l, matches(r'INFO:stdout_log_writer_test.dart\(\d+\)')));
});
});
group('tags', () {
test('setting global tags adds them to the log line', () {
_overridePrint((logger, writer) {
writer.globalTags = ['baz', 'bar'];
logger.info('foo');
}, (l) => expect(l, '[INFO:baz:bar] foo'));
});
});
}
// helper method for capturing stdout. Code executed within the [zoned] function
// will pass the logged output to the [receiver] function with the line that
// would have gone to stdout.
void _overridePrint(void Function(Logger, StdoutLogWriter) zoned,
void Function(String) receiver) {
runZoned(
() {
final logger = Logger('foo');
zoned(logger, StdoutLogWriter(logger: logger));
logger.clearListeners();
},
zoneSpecification: ZoneSpecification(
print: (Zone self, ZoneDelegate parent, Zone zone, String line) {
receiver(line);
},
),
);
}