OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 library logging_test; | 6 library logging_test; |
7 | 7 |
8 import 'package:logging/logging.dart'; | 8 import 'package:logging/logging.dart'; |
9 import 'package:unittest/unittest.dart'; | 9 import 'package:unittest/unittest.dart'; |
10 | 10 |
11 main() { | 11 main() { |
12 test('level comparison is a valid comparator', () { | 12 test('level comparison is a valid comparator', () { |
13 var level1 = const Level('NOT_REAL1', 253); | 13 var level1 = const Level('NOT_REAL1', 253); |
14 expect(level1 == level1, isTrue); | 14 expect(level1 == level1, isTrue); |
15 expect(level1 <= level1, isTrue); | 15 expect(level1 <= level1, isTrue); |
16 expect(level1 >= level1, isTrue); | 16 expect(level1 >= level1, isTrue); |
17 expect(level1 < level1, isFalse); | 17 expect(level1 < level1, isFalse); |
18 expect(level1 > level1, isFalse); | 18 expect(level1 > level1, isFalse); |
19 | 19 |
20 var level2 = const Level('NOT_REAL2', 455); | 20 var level2 = const Level('NOT_REAL2', 455); |
21 expect(level1 <= level2, isTrue); | 21 expect(level1 <= level2, isTrue); |
22 expect(level1 < level2, isTrue); | 22 expect(level1 < level2, isTrue); |
23 expect(level2 >= level1, isTrue); | 23 expect(level2 >= level1, isTrue); |
24 expect(level2 > level1, isTrue); | 24 expect(level2 > level1, isTrue); |
25 | 25 |
26 var level3 = const Level('NOT_REAL3', 253); | 26 var level3 = const Level('NOT_REAL3', 253); |
27 expect(!identical(level1, level3), isTrue); // different instances | 27 expect(level1, isNot(same(level3))); // different instances |
28 expect(level1 == level3, isTrue); // same value. | 28 expect(level1, equals(level3)); // same value. |
29 }); | 29 }); |
30 | 30 |
31 test('default levels are in order', () { | 31 test('default levels are in order', () { |
32 final levels = const [ | 32 final levels = const [ |
33 Level.ALL, Level.FINEST, Level.FINER, Level.FINE, Level.CONFIG, | 33 Level.ALL, Level.FINEST, Level.FINER, Level.FINE, Level.CONFIG, |
34 Level.INFO, Level.WARNING, Level.SEVERE, Level.SHOUT, Level.OFF | 34 Level.INFO, Level.WARNING, Level.SEVERE, Level.SHOUT, Level.OFF |
35 ]; | 35 ]; |
36 | 36 |
37 for (int i = 0; i < levels.length; i++) { | 37 for (int i = 0; i < levels.length; i++) { |
38 for (int j = i + 1; j < levels.length; j++) { | 38 for (int j = i + 1; j < levels.length; j++) { |
(...skipping 14 matching lines...) Expand all Loading... |
53 expect(unsorted, isNot(orderedEquals(sorted))); | 53 expect(unsorted, isNot(orderedEquals(sorted))); |
54 | 54 |
55 unsorted.sort((a, b) => a.compareTo(b)); | 55 unsorted.sort((a, b) => a.compareTo(b)); |
56 expect(unsorted, orderedEquals(sorted)); | 56 expect(unsorted, orderedEquals(sorted)); |
57 }); | 57 }); |
58 | 58 |
59 test('levels are hashable', () { | 59 test('levels are hashable', () { |
60 var map = new Map<Level, String>(); | 60 var map = new Map<Level, String>(); |
61 map[Level.INFO] = 'info'; | 61 map[Level.INFO] = 'info'; |
62 map[Level.SHOUT] = 'shout'; | 62 map[Level.SHOUT] = 'shout'; |
63 expect(map[Level.INFO], equals('info')); | 63 expect(map[Level.INFO], same('info')); |
64 expect(map[Level.SHOUT], equals('shout')); | 64 expect(map[Level.SHOUT], same('shout')); |
65 }); | 65 }); |
66 | 66 |
67 test('logger name cannot start with a "." ', () { | 67 test('logger name cannot start with a "." ', () { |
68 expect(() => new Logger('.c'), throws); | 68 expect(() => new Logger('.c'), throws); |
69 }); | 69 }); |
70 | 70 |
71 test('logger naming is hierarchical', () { | 71 test('logger naming is hierarchical', () { |
72 Logger c = new Logger('a.b.c'); | 72 Logger c = new Logger('a.b.c'); |
73 expect(c.name, equals('c')); | 73 expect(c.name, equals('c')); |
74 expect(c.parent.name, equals('b')); | 74 expect(c.parent.name, equals('b')); |
75 expect(c.parent.parent.name, equals('a')); | 75 expect(c.parent.parent.name, equals('a')); |
76 expect(c.parent.parent.parent.name, equals('')); | 76 expect(c.parent.parent.parent.name, equals('')); |
77 expect(c.parent.parent.parent.parent, isNull); | 77 expect(c.parent.parent.parent.parent, isNull); |
78 }); | 78 }); |
79 | 79 |
80 test('logger full name', () { | 80 test('logger full name', () { |
81 Logger c = new Logger('a.b.c'); | 81 Logger c = new Logger('a.b.c'); |
82 expect(c.fullName, equals('a.b.c')); | 82 expect(c.fullName, equals('a.b.c')); |
83 expect(c.parent.fullName, equals('a.b')); | 83 expect(c.parent.fullName, equals('a.b')); |
84 expect(c.parent.parent.fullName, equals('a')); | 84 expect(c.parent.parent.fullName, equals('a')); |
85 expect(c.parent.parent.parent.fullName, equals('')); | 85 expect(c.parent.parent.parent.fullName, equals('')); |
86 expect(c.parent.parent.parent.parent, isNull); | 86 expect(c.parent.parent.parent.parent, isNull); |
87 }); | 87 }); |
88 | 88 |
89 test('logger parent-child links are correct', () { | 89 test('logger parent-child links are correct', () { |
90 Logger a = new Logger('a'); | 90 Logger a = new Logger('a'); |
91 Logger b = new Logger('a.b'); | 91 Logger b = new Logger('a.b'); |
92 Logger c = new Logger('a.c'); | 92 Logger c = new Logger('a.c'); |
93 expect(a == b.parent, isTrue); | 93 expect(a, same(b.parent)); |
94 expect(a == c.parent, isTrue); | 94 expect(a, same(c.parent)); |
95 expect(a.children['b'] == b, isTrue); | 95 expect(a.children['b'], same(b)); |
96 expect(a.children['c'] == c, isTrue); | 96 expect(a.children['c'], same(c)); |
97 }); | 97 }); |
98 | 98 |
99 test('loggers are singletons', () { | 99 test('loggers are singletons', () { |
100 Logger a1 = new Logger('a'); | 100 Logger a1 = new Logger('a'); |
101 Logger a2 = new Logger('a'); | 101 Logger a2 = new Logger('a'); |
102 Logger b = new Logger('a.b'); | 102 Logger b = new Logger('a.b'); |
103 Logger root = Logger.root; | 103 Logger root = Logger.root; |
104 expect(identical(a1, a2), isTrue); | 104 expect(a1, same(a2)); |
105 expect(identical(a1, b.parent), isTrue); | 105 expect(a1, same(b.parent)); |
106 expect(identical(root, a1.parent), isTrue); | 106 expect(root, same(a1.parent)); |
107 expect(identical(root, new Logger('')), isTrue); | 107 expect(root, same(new Logger(''))); |
| 108 }); |
| 109 |
| 110 test('cannot directly manipulate Logger.children', () { |
| 111 var loggerAB = new Logger('a.b'); |
| 112 var loggerA = loggerAB.parent; |
| 113 |
| 114 expect(loggerA.children['b'], same(loggerAB), reason: 'can read Children'); |
| 115 |
| 116 expect(() { |
| 117 loggerAB.children['test'] = null; |
| 118 }, throwsUnsupportedError, reason: 'Children is read-only'); |
| 119 }); |
| 120 |
| 121 test('stackTrace gets throw to LogRecord', () { |
| 122 Logger.root.level = Level.INFO; |
| 123 |
| 124 var records = new List<LogRecord>(); |
| 125 |
| 126 var sub = Logger.root.onRecord.listen(records.add); |
| 127 |
| 128 try { |
| 129 throw new UnsupportedError('test exception'); |
| 130 } catch(error, stack) { |
| 131 Logger.root.log(Level.SEVERE, 'severe', error, stack); |
| 132 Logger.root.warning('warning', error, stack); |
| 133 } |
| 134 |
| 135 Logger.root.log(Level.SHOUT, 'shout'); |
| 136 |
| 137 sub.cancel(); |
| 138 |
| 139 expect(records, hasLength(3)); |
| 140 |
| 141 var severe = records[0]; |
| 142 expect(severe.message, 'severe'); |
| 143 expect(severe.error is UnsupportedError, isTrue); |
| 144 expect(severe.stackTrace is StackTrace, isTrue); |
| 145 |
| 146 var warning = records[1]; |
| 147 expect(warning.message, 'warning'); |
| 148 expect(warning.error is UnsupportedError, isTrue); |
| 149 expect(warning.stackTrace is StackTrace, isTrue); |
| 150 |
| 151 var shout = records[2]; |
| 152 expect(shout.message, 'shout'); |
| 153 expect(shout.error, isNull); |
| 154 expect(shout.stackTrace, isNull); |
108 }); | 155 }); |
109 | 156 |
110 group('mutating levels', () { | 157 group('mutating levels', () { |
111 Logger root = Logger.root; | 158 Logger root = Logger.root; |
112 Logger a = new Logger('a'); | 159 Logger a = new Logger('a'); |
113 Logger b = new Logger('a.b'); | 160 Logger b = new Logger('a.b'); |
114 Logger c = new Logger('a.b.c'); | 161 Logger c = new Logger('a.b.c'); |
115 Logger d = new Logger('a.b.c.d'); | 162 Logger d = new Logger('a.b.c.d'); |
116 Logger e = new Logger('a.b.c.d.e'); | 163 Logger e = new Logger('a.b.c.d.e'); |
117 | 164 |
118 setUp(() { | 165 setUp(() { |
119 hierarchicalLoggingEnabled = true; | 166 hierarchicalLoggingEnabled = true; |
120 root.level = Level.INFO; | 167 root.level = Level.INFO; |
121 a.level = null; | 168 a.level = null; |
122 b.level = null; | 169 b.level = null; |
123 c.level = null; | 170 c.level = null; |
124 d.level = null; | 171 d.level = null; |
125 e.level = null; | 172 e.level = null; |
126 root.clearListeners(); | 173 root.clearListeners(); |
127 a.clearListeners(); | 174 a.clearListeners(); |
128 b.clearListeners(); | 175 b.clearListeners(); |
129 c.clearListeners(); | 176 c.clearListeners(); |
130 d.clearListeners(); | 177 d.clearListeners(); |
131 e.clearListeners(); | 178 e.clearListeners(); |
132 hierarchicalLoggingEnabled = false; | 179 hierarchicalLoggingEnabled = false; |
133 root.level = Level.INFO; | 180 root.level = Level.INFO; |
134 }); | 181 }); |
135 | 182 |
136 test('cannot set level if hierarchy is disabled', () { | 183 test('cannot set level if hierarchy is disabled', () { |
137 expect(() {a.level = Level.FINE;}, throws); | 184 expect(() {a.level = Level.FINE;}, throwsUnsupportedError); |
138 }); | 185 }); |
139 | 186 |
140 test('loggers effective level - no hierarchy', () { | 187 test('loggers effective level - no hierarchy', () { |
141 expect(root.level, equals(Level.INFO)); | 188 expect(root.level, equals(Level.INFO)); |
142 expect(a.level, equals(Level.INFO)); | 189 expect(a.level, equals(Level.INFO)); |
143 expect(b.level, equals(Level.INFO)); | 190 expect(b.level, equals(Level.INFO)); |
144 | 191 |
145 root.level = Level.SHOUT; | 192 root.level = Level.SHOUT; |
146 | 193 |
147 expect(root.level, equals(Level.SHOUT)); | 194 expect(root.level, equals(Level.SHOUT)); |
(...skipping 21 matching lines...) Expand all Loading... |
169 hierarchicalLoggingEnabled = true; | 216 hierarchicalLoggingEnabled = true; |
170 root.level = Level.SEVERE; | 217 root.level = Level.SEVERE; |
171 c.level = Level.ALL; | 218 c.level = Level.ALL; |
172 e.level = Level.OFF; | 219 e.level = Level.OFF; |
173 | 220 |
174 expect(root.isLoggable(Level.SHOUT), isTrue); | 221 expect(root.isLoggable(Level.SHOUT), isTrue); |
175 expect(root.isLoggable(Level.SEVERE), isTrue); | 222 expect(root.isLoggable(Level.SEVERE), isTrue); |
176 expect(root.isLoggable(Level.WARNING), isFalse); | 223 expect(root.isLoggable(Level.WARNING), isFalse); |
177 expect(c.isLoggable(Level.FINEST), isTrue); | 224 expect(c.isLoggable(Level.FINEST), isTrue); |
178 expect(c.isLoggable(Level.FINE), isTrue); | 225 expect(c.isLoggable(Level.FINE), isTrue); |
179 expect(!e.isLoggable(Level.SHOUT), isTrue); | 226 expect(e.isLoggable(Level.SHOUT), isFalse); |
180 }); | 227 }); |
181 | 228 |
182 test('add/remove handlers - no hierarchy', () { | 229 test('add/remove handlers - no hierarchy', () { |
183 int calls = 0; | 230 int calls = 0; |
184 var handler = (_) { calls++; }; | 231 var handler = (_) { calls++; }; |
185 final sub = c.onRecord.listen(handler); | 232 final sub = c.onRecord.listen(handler); |
186 root.info("foo"); | 233 root.info("foo"); |
187 root.info("foo"); | 234 root.info("foo"); |
188 expect(calls, equals(2)); | 235 expect(calls, equals(2)); |
189 sub.cancel(); | 236 sub.cancel(); |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 'SHOUT: 10'])); | 417 'SHOUT: 10'])); |
371 | 418 |
372 expect(cMessages, equals([ | 419 expect(cMessages, equals([ |
373 // 1 - 7 are lower in the hierarchy | 420 // 1 - 7 are lower in the hierarchy |
374 // 'FINE: 8' is not loggable | 421 // 'FINE: 8' is not loggable |
375 'WARNING: 9', | 422 'WARNING: 9', |
376 'SHOUT: 10'])); | 423 'SHOUT: 10'])); |
377 }); | 424 }); |
378 }); | 425 }); |
379 } | 426 } |
OLD | NEW |