Index: pkg/logging/test/logging_test.dart |
diff --git a/pkg/logging/test/logging_test.dart b/pkg/logging/test/logging_test.dart |
deleted file mode 100644 |
index 223498f0a1707b4ae93accfdc9fa4803717be98b..0000000000000000000000000000000000000000 |
--- a/pkg/logging/test/logging_test.dart |
+++ /dev/null |
@@ -1,460 +0,0 @@ |
-// Copyright (c) 2012, 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 logging_test; |
- |
-import 'package:logging/logging.dart'; |
-import 'package:unittest/unittest.dart'; |
- |
-main() { |
- test('level comparison is a valid comparator', () { |
- var level1 = const Level('NOT_REAL1', 253); |
- expect(level1 == level1, isTrue); |
- expect(level1 <= level1, isTrue); |
- expect(level1 >= level1, isTrue); |
- expect(level1 < level1, isFalse); |
- expect(level1 > level1, isFalse); |
- |
- var level2 = const Level('NOT_REAL2', 455); |
- expect(level1 <= level2, isTrue); |
- expect(level1 < level2, isTrue); |
- expect(level2 >= level1, isTrue); |
- expect(level2 > level1, isTrue); |
- |
- var level3 = const Level('NOT_REAL3', 253); |
- expect(level1, isNot(same(level3))); // different instances |
- expect(level1, equals(level3)); // same value. |
- }); |
- |
- test('default levels are in order', () { |
- final levels = Level.LEVELS; |
- |
- for (int i = 0; i < levels.length; i++) { |
- for (int j = i + 1; j < levels.length; j++) { |
- expect(levels[i] < levels[j], isTrue); |
- } |
- } |
- }); |
- |
- test('levels are comparable', () { |
- final unsorted = [ |
- Level.INFO, Level.CONFIG, Level.FINE, Level.SHOUT, Level.OFF, |
- Level.FINER, Level.ALL, Level.WARNING, Level.FINEST, Level.SEVERE, |
- ]; |
- |
- final sorted = Level.LEVELS; |
- |
- expect(unsorted, isNot(orderedEquals(sorted))); |
- |
- unsorted.sort(); |
- expect(unsorted, orderedEquals(sorted)); |
- }); |
- |
- test('levels are hashable', () { |
- var map = new Map<Level, String>(); |
- map[Level.INFO] = 'info'; |
- map[Level.SHOUT] = 'shout'; |
- expect(map[Level.INFO], same('info')); |
- expect(map[Level.SHOUT], same('shout')); |
- }); |
- |
- test('logger name cannot start with a "." ', () { |
- expect(() => new Logger('.c'), throwsArgumentError); |
- }); |
- |
- test('logger naming is hierarchical', () { |
- Logger c = new Logger('a.b.c'); |
- expect(c.name, equals('c')); |
- expect(c.parent.name, equals('b')); |
- expect(c.parent.parent.name, equals('a')); |
- expect(c.parent.parent.parent.name, equals('')); |
- expect(c.parent.parent.parent.parent, isNull); |
- }); |
- |
- test('logger full name', () { |
- Logger c = new Logger('a.b.c'); |
- expect(c.fullName, equals('a.b.c')); |
- expect(c.parent.fullName, equals('a.b')); |
- expect(c.parent.parent.fullName, equals('a')); |
- expect(c.parent.parent.parent.fullName, equals('')); |
- expect(c.parent.parent.parent.parent, isNull); |
- }); |
- |
- test('logger parent-child links are correct', () { |
- Logger a = new Logger('a'); |
- Logger b = new Logger('a.b'); |
- Logger c = new Logger('a.c'); |
- expect(a, same(b.parent)); |
- expect(a, same(c.parent)); |
- expect(a.children['b'], same(b)); |
- expect(a.children['c'], same(c)); |
- }); |
- |
- test('loggers are singletons', () { |
- Logger a1 = new Logger('a'); |
- Logger a2 = new Logger('a'); |
- Logger b = new Logger('a.b'); |
- Logger root = Logger.root; |
- expect(a1, same(a2)); |
- expect(a1, same(b.parent)); |
- expect(root, same(a1.parent)); |
- expect(root, same(new Logger(''))); |
- }); |
- |
- test('cannot directly manipulate Logger.children', () { |
- var loggerAB = new Logger('a.b'); |
- var loggerA = loggerAB.parent; |
- |
- expect(loggerA.children['b'], same(loggerAB), reason: 'can read Children'); |
- |
- expect(() { |
- loggerAB.children['test'] = null; |
- }, throwsUnsupportedError, reason: 'Children is read-only'); |
- }); |
- |
- test('stackTrace gets throw to LogRecord', () { |
- Logger.root.level = Level.INFO; |
- |
- var records = new List<LogRecord>(); |
- |
- var sub = Logger.root.onRecord.listen(records.add); |
- |
- try { |
- throw new UnsupportedError('test exception'); |
- } catch(error, stack) { |
- Logger.root.log(Level.SEVERE, 'severe', error, stack); |
- Logger.root.warning('warning', error, stack); |
- } |
- |
- Logger.root.log(Level.SHOUT, 'shout'); |
- |
- sub.cancel(); |
- |
- expect(records, hasLength(3)); |
- |
- var severe = records[0]; |
- expect(severe.message, 'severe'); |
- expect(severe.error is UnsupportedError, isTrue); |
- expect(severe.stackTrace is StackTrace, isTrue); |
- |
- var warning = records[1]; |
- expect(warning.message, 'warning'); |
- expect(warning.error is UnsupportedError, isTrue); |
- expect(warning.stackTrace is StackTrace, isTrue); |
- |
- var shout = records[2]; |
- expect(shout.message, 'shout'); |
- expect(shout.error, isNull); |
- expect(shout.stackTrace, isNull); |
- }); |
- |
- group('mutating levels', () { |
- Logger root = Logger.root; |
- Logger a = new Logger('a'); |
- Logger b = new Logger('a.b'); |
- Logger c = new Logger('a.b.c'); |
- Logger d = new Logger('a.b.c.d'); |
- Logger e = new Logger('a.b.c.d.e'); |
- |
- setUp(() { |
- hierarchicalLoggingEnabled = true; |
- root.level = Level.INFO; |
- a.level = null; |
- b.level = null; |
- c.level = null; |
- d.level = null; |
- e.level = null; |
- root.clearListeners(); |
- a.clearListeners(); |
- b.clearListeners(); |
- c.clearListeners(); |
- d.clearListeners(); |
- e.clearListeners(); |
- hierarchicalLoggingEnabled = false; |
- root.level = Level.INFO; |
- }); |
- |
- test('cannot set level if hierarchy is disabled', () { |
- expect(() {a.level = Level.FINE;}, throwsUnsupportedError); |
- }); |
- |
- test('loggers effective level - no hierarchy', () { |
- expect(root.level, equals(Level.INFO)); |
- expect(a.level, equals(Level.INFO)); |
- expect(b.level, equals(Level.INFO)); |
- |
- root.level = Level.SHOUT; |
- |
- expect(root.level, equals(Level.SHOUT)); |
- expect(a.level, equals(Level.SHOUT)); |
- expect(b.level, equals(Level.SHOUT)); |
- }); |
- |
- test('loggers effective level - with hierarchy', () { |
- hierarchicalLoggingEnabled = true; |
- expect(root.level, equals(Level.INFO)); |
- expect(a.level, equals(Level.INFO)); |
- expect(b.level, equals(Level.INFO)); |
- expect(c.level, equals(Level.INFO)); |
- |
- root.level = Level.SHOUT; |
- b.level = Level.FINE; |
- |
- expect(root.level, equals(Level.SHOUT)); |
- expect(a.level, equals(Level.SHOUT)); |
- expect(b.level, equals(Level.FINE)); |
- expect(c.level, equals(Level.FINE)); |
- }); |
- |
- test('isLoggable is appropriate', () { |
- hierarchicalLoggingEnabled = true; |
- root.level = Level.SEVERE; |
- c.level = Level.ALL; |
- e.level = Level.OFF; |
- |
- expect(root.isLoggable(Level.SHOUT), isTrue); |
- expect(root.isLoggable(Level.SEVERE), isTrue); |
- expect(root.isLoggable(Level.WARNING), isFalse); |
- expect(c.isLoggable(Level.FINEST), isTrue); |
- expect(c.isLoggable(Level.FINE), isTrue); |
- expect(e.isLoggable(Level.SHOUT), isFalse); |
- }); |
- |
- test('add/remove handlers - no hierarchy', () { |
- int calls = 0; |
- var handler = (_) { calls++; }; |
- final sub = c.onRecord.listen(handler); |
- root.info("foo"); |
- root.info("foo"); |
- expect(calls, equals(2)); |
- sub.cancel(); |
- root.info("foo"); |
- expect(calls, equals(2)); |
- }); |
- |
- test('add/remove handlers - with hierarchy', () { |
- hierarchicalLoggingEnabled = true; |
- int calls = 0; |
- var handler = (_) { calls++; }; |
- c.onRecord.listen(handler); |
- root.info("foo"); |
- root.info("foo"); |
- expect(calls, equals(0)); |
- }); |
- |
- test('logging methods store appropriate level', () { |
- root.level = Level.ALL; |
- var rootMessages = []; |
- root.onRecord.listen((record) { |
- rootMessages.add('${record.level}: ${record.message}'); |
- }); |
- |
- root.finest('1'); |
- root.finer('2'); |
- root.fine('3'); |
- root.config('4'); |
- root.info('5'); |
- root.warning('6'); |
- root.severe('7'); |
- root.shout('8'); |
- |
- expect(rootMessages, equals([ |
- 'FINEST: 1', |
- 'FINER: 2', |
- 'FINE: 3', |
- 'CONFIG: 4', |
- 'INFO: 5', |
- 'WARNING: 6', |
- 'SEVERE: 7', |
- 'SHOUT: 8'])); |
- }); |
- |
- test('logging methods store exception', () { |
- root.level = Level.ALL; |
- var rootMessages = []; |
- root.onRecord.listen((r) { |
- rootMessages.add('${r.level}: ${r.message} ${r.error}'); |
- }); |
- |
- root.finest('1'); |
- root.finer('2'); |
- root.fine('3'); |
- root.config('4'); |
- root.info('5'); |
- root.warning('6'); |
- root.severe('7'); |
- root.shout('8'); |
- root.finest('1', 'a'); |
- root.finer('2', 'b'); |
- root.fine('3', ['c']); |
- root.config('4', 'd'); |
- root.info('5', 'e'); |
- root.warning('6', 'f'); |
- root.severe('7', 'g'); |
- root.shout('8', 'h'); |
- |
- expect(rootMessages, equals([ |
- 'FINEST: 1 null', |
- 'FINER: 2 null', |
- 'FINE: 3 null', |
- 'CONFIG: 4 null', |
- 'INFO: 5 null', |
- 'WARNING: 6 null', |
- 'SEVERE: 7 null', |
- 'SHOUT: 8 null', |
- 'FINEST: 1 a', |
- 'FINER: 2 b', |
- 'FINE: 3 [c]', |
- 'CONFIG: 4 d', |
- 'INFO: 5 e', |
- 'WARNING: 6 f', |
- 'SEVERE: 7 g', |
- 'SHOUT: 8 h'])); |
- }); |
- |
- test('message logging - no hierarchy', () { |
- root.level = Level.WARNING; |
- var rootMessages = []; |
- var aMessages = []; |
- var cMessages = []; |
- c.onRecord.listen((record) { |
- cMessages.add('${record.level}: ${record.message}'); |
- }); |
- a.onRecord.listen((record) { |
- aMessages.add('${record.level}: ${record.message}'); |
- }); |
- root.onRecord.listen((record) { |
- rootMessages.add('${record.level}: ${record.message}'); |
- }); |
- |
- root.info('1'); |
- root.fine('2'); |
- root.shout('3'); |
- |
- b.info('4'); |
- b.severe('5'); |
- b.warning('6'); |
- b.fine('7'); |
- |
- c.fine('8'); |
- c.warning('9'); |
- c.shout('10'); |
- |
- expect(rootMessages, equals([ |
- // 'INFO: 1' is not loggable |
- // 'FINE: 2' is not loggable |
- 'SHOUT: 3', |
- // 'INFO: 4' is not loggable |
- 'SEVERE: 5', |
- 'WARNING: 6', |
- // 'FINE: 7' is not loggable |
- // 'FINE: 8' is not loggable |
- 'WARNING: 9', |
- 'SHOUT: 10'])); |
- |
- // no hierarchy means we all hear the same thing. |
- expect(aMessages, equals(rootMessages)); |
- expect(cMessages, equals(rootMessages)); |
- }); |
- |
- test('message logging - with hierarchy', () { |
- hierarchicalLoggingEnabled = true; |
- |
- b.level = Level.WARNING; |
- |
- var rootMessages = []; |
- var aMessages = []; |
- var cMessages = []; |
- c.onRecord.listen((record) { |
- cMessages.add('${record.level}: ${record.message}'); |
- }); |
- a.onRecord.listen((record) { |
- aMessages.add('${record.level}: ${record.message}'); |
- }); |
- root.onRecord.listen((record) { |
- rootMessages.add('${record.level}: ${record.message}'); |
- }); |
- |
- root.info('1'); |
- root.fine('2'); |
- root.shout('3'); |
- |
- b.info('4'); |
- b.severe('5'); |
- b.warning('6'); |
- b.fine('7'); |
- |
- c.fine('8'); |
- c.warning('9'); |
- c.shout('10'); |
- |
- expect(rootMessages, equals([ |
- 'INFO: 1', |
- // 'FINE: 2' is not loggable |
- 'SHOUT: 3', |
- // 'INFO: 4' is not loggable |
- 'SEVERE: 5', |
- 'WARNING: 6', |
- // 'FINE: 7' is not loggable |
- // 'FINE: 8' is not loggable |
- 'WARNING: 9', |
- 'SHOUT: 10'])); |
- |
- expect(aMessages, equals([ |
- // 1,2 and 3 are lower in the hierarchy |
- // 'INFO: 4' is not loggable |
- 'SEVERE: 5', |
- 'WARNING: 6', |
- // 'FINE: 7' is not loggable |
- // 'FINE: 8' is not loggable |
- 'WARNING: 9', |
- 'SHOUT: 10'])); |
- |
- expect(cMessages, equals([ |
- // 1 - 7 are lower in the hierarchy |
- // 'FINE: 8' is not loggable |
- 'WARNING: 9', |
- 'SHOUT: 10'])); |
- }); |
- |
- test('message logging - lazy functions', () { |
- root.level = Level.INFO; |
- var messages = []; |
- root.onRecord.listen((record) { |
- messages.add('${record.level}: ${record.message}'); |
- }); |
- |
- var callCount = 0; |
- var myClosure = () => "${++callCount}"; |
- |
- root.info(myClosure); |
- root.finer(myClosure); // Should not get evaluated. |
- root.warning(myClosure); |
- |
- expect(messages, equals([ |
- 'INFO: 1', |
- 'WARNING: 2',])); |
- }); |
- |
- test('message logging - calls toString', () { |
- root.level = Level.INFO; |
- var messages = []; |
- root.onRecord.listen((record) { |
- messages.add('${record.level}: ${record.message}'); |
- }); |
- |
- root.info(5); |
- root.info(false); |
- root.info([1, 2, 3]); |
- root.info(() => 10); |
- |
- expect(messages, equals([ |
- 'INFO: 5', |
- 'INFO: false', |
- 'INFO: [1, 2, 3]', |
- 'INFO: 10',])); |
- }); |
- }); |
-} |