Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: tests/lib/logging/logging_test.dart

Issue 10693042: first version of a logging library. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« lib/logging/logging.dart ('K') | « lib/logging/logging.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5
6 #library('logging_test');
7
8 #import('../../../lib/logging/logging.dart');
9 #import('../../../lib/unittest/unittest.dart');
Jennifer Messerly 2012/06/29 03:47:45 do "package:" imports work yet?
Siggi Cherem (dart-lang) 2012/06/29 18:34:48 not until we rearrange the external repo & the SDK
10
11 main() {
12 test('level comparison is a valid comparator', () {
13 var level1 = const Level('NOT_REAL1', 253);
14 expect(level1 == level1);
Jennifer Messerly 2012/06/29 03:47:45 use equals matcher?
15 expect(level1 <= level1);
16 expect(level1 >= level1);
Jennifer Messerly 2012/06/29 03:47:45 add lessThan, lessThanOrEqual matchers? (is there
gram 2012/06/29 16:38:25 Matchers will give better error messages.
Siggi Cherem (dart-lang) 2012/06/29 18:34:48 Unfortunately those matchers are smart and first c
17 expect(level1 < level1, isFalse);
18 expect(level1 > level1, isFalse);
19
20 var level2 = const Level('NOT_REAL2', 455);
21 expect(level1 <= level2);
22 expect(level1 < level2);
23 expect(level2 >= level1);
24 expect(level2 > level1);
Jennifer Messerly 2012/06/29 03:47:45 another test idea: test('same value but different
gram 2012/06/29 16:38:25 I wonder - if the value is the same but the names
Jennifer Messerly 2012/06/29 17:37:13 Yeah, I thought so too. But the code for the == se
Siggi Cherem (dart-lang) 2012/06/29 18:34:48 changed the behavior to be == in value only. Added
25 });
26
27 test('default levels are in order', () {
28 final levels = const [
29 Level.ALL, Level.FINEST, Level.FINER, Level.FINE, Level.CONFIG,
30 Level.INFO, Level.WARNING, Level.SEVERE, Level.SHOUT, Level.OFF
31 ];
32
33 for (int i = 0; i < levels.length; i++) {
34 for (int j = i + 1; j < levels.length; j++) {
35 expect(levels[i] < levels[j]);
36 }
37 }
Jennifer Messerly 2012/06/29 03:47:45 another test: #import('dart:coreimpl'); // test
Siggi Cherem (dart-lang) 2012/06/29 18:34:48 added a test, but using simple list sorting instea
38 });
39
40 test('logger naming is hierarchycal', () {
gram 2012/06/29 16:38:25 hierarchical
Siggi Cherem (dart-lang) 2012/06/29 18:34:48 Done.
41 Logger c = new Logger('a.b.c');
42 expect(c.name, equals('c'));
43 expect(c.parent.name, equals('b'));
44 expect(c.parent.parent.name, equals('a'));
45 expect(c.parent.parent.parent.name, equals(''));
46 expect(c.parent.parent.parent.parent, isNull);
gram 2012/06/29 16:38:25 Can you explain the rationale why there are hierar
gram 2012/06/29 16:49:26 I understand the intent I guess - it provides a wa
Siggi Cherem (dart-lang) 2012/06/29 18:34:48 doing multilevel is something I have seen a lot in
47 });
48
49 test('logger full name', () {
50 Logger c = new Logger('a.b.c');
51 expect(c.fullName, equals('a.b.c'));
52 expect(c.parent.fullName, equals('a.b'));
53 expect(c.parent.parent.fullName, equals('a'));
54 expect(c.parent.parent.parent.fullName, equals(''));
55 expect(c.parent.parent.parent.parent, isNull);
56 });
57
58 test('logger parent-child links are correct', () {
59 Logger a = new Logger('a');
60 Logger b = new Logger('a.b');
61 Logger c = new Logger('a.c');
62 expect(a == b.parent);
63 expect(a == c.parent);
64 expect(a.children['b'] == b);
65 expect(a.children['c'] == c);
66 });
67
68 test('loggers are singletons', () {
69 Logger a1 = new Logger('a');
70 Logger a2 = new Logger('a');
71 Logger b = new Logger('a.b');
72 Logger root = Logger.root;
73 expect(a1 === a2);
74 expect(a1 === b.parent);
75 expect(root === a1.parent);
76 expect(root === new Logger(''));
77 });
78
79 group('mutating levels', () {
80 Logger root = Logger.root;
81 Logger a = new Logger('a');
82 Logger b = new Logger('a.b');
83 Logger c = new Logger('a.b.c');
84 Logger d = new Logger('a.b.c.d');
85 Logger e = new Logger('a.b.c.d.e');
86
87 setUp(() {
88 Logger.enableHierarchyLogging = true;
89 root.level = Level.INFO;
90 a.level = null;
91 b.level = null;
92 c.level = null;
93 d.level = null;
94 e.level = null;
95 root.clearHandlers();
96 a.clearHandlers();
97 b.clearHandlers();
98 c.clearHandlers();
99 d.clearHandlers();
100 e.clearHandlers();
101 Logger.enableHierarchyLogging = false;
102 root.level = Level.INFO;
103 });
104
105 test('cannot set level if hierarchy is disabled', () {
106 expectThrow(() {a.level = Level.FINE;});
107 });
108
109 test('loggers effective level - no hierarchy', () {
110 expect(root.level, equals(Level.INFO));
111 expect(a.level, equals(Level.INFO));
112 expect(b.level, equals(Level.INFO));
113
114 root.level = Level.SHOUT;
115
116 expect(root.level, equals(Level.SHOUT));
117 expect(a.level, equals(Level.SHOUT));
118 expect(b.level, equals(Level.SHOUT));
119 });
120
121 test('loggers effective level - with hierarchy', () {
122 Logger.enableHierarchyLogging = true;
123 expect(root.level, equals(Level.INFO));
124 expect(a.level, equals(Level.INFO));
125 expect(b.level, equals(Level.INFO));
126 expect(c.level, equals(Level.INFO));
127
128 root.level = Level.SHOUT;
129 b.level = Level.FINE;
130
131 expect(root.level, equals(Level.SHOUT));
132 expect(a.level, equals(Level.SHOUT));
133 expect(b.level, equals(Level.FINE));
134 expect(c.level, equals(Level.FINE));
135 });
136
137 test('isLoggable is appropriate', () {
138 Logger.enableHierarchyLogging = true;
139 root.level = Level.SEVERE;
140 c.level = Level.ALL;
141 e.level = Level.OFF;
142
143 expect(root.isLoggable(Level.SHOUT));
144 expect(root.isLoggable(Level.SEVERE));
145 expect(!root.isLoggable(Level.WARNING));
146 expect(c.isLoggable(Level.FINEST));
147 expect(c.isLoggable(Level.FINE));
148 expect(!e.isLoggable(Level.SHOUT));
149 });
150
151 test('add/remove handlers - no hierarchy', () {
152 int calls = 0;
153 var handler = (_) { calls++; };
154 c.addHandler(handler);
155 root.info("foo");
156 root.info("foo");
157 expect(calls, equals(2));
158 c.removeHandler(handler);
159 root.info("foo");
160 expect(calls, equals(2));
161 });
162
163 test('add/remove handlers - with hierarchy', () {
164 Logger.enableHierarchyLogging = true;
165 int calls = 0;
166 var handler = (_) { calls++; };
167 c.addHandler(handler);
168 root.info("foo");
169 root.info("foo");
170 expect(calls, equals(0));
171 });
172
173 test('logging methods store appropriate level', () {
174 root.level = Level.ALL;
175 var rootMessages = [];
176 root.addHandler((record) {
177 rootMessages.add('${record.level}: ${record.message}');
178 });
179
180 root.finest('1');
181 root.finer('2');
182 root.fine('3');
183 root.config('4');
184 root.info('5');
185 root.warning('6');
186 root.severe('7');
187 root.shout('8');
188
189 expect(rootMessages, equals([
190 'FINEST: 1',
191 'FINER: 2',
192 'FINE: 3',
193 'CONFIG: 4',
194 'INFO: 5',
195 'WARNING: 6',
196 'SEVERE: 7',
197 'SHOUT: 8']));
198 });
199
200 test('message logging - no hierarchy', () {
201 root.level = Level.WARNING;
202 var rootMessages = [];
203 var aMessages = [];
204 var cMessages = [];
205 c.addHandler((record) {
206 cMessages.add('${record.level}: ${record.message}');
207 });
208 a.addHandler((record) {
209 aMessages.add('${record.level}: ${record.message}');
210 });
211 root.addHandler((record) {
212 rootMessages.add('${record.level}: ${record.message}');
213 });
214
215 root.info('1');
216 root.fine('2');
217 root.shout('3');
218
219 b.info('4');
220 b.severe('5');
221 b.warning('6');
222 b.fine('7');
223
224 c.fine('8');
225 c.warning('9');
226 c.shout('10');
227
228 expect(rootMessages, equals([
229 // 'INFO: 1' is not loggable
230 // 'FINE: 2' is not loggable
231 'SHOUT: 3',
232 // 'INFO: 4' is not loggable
233 'SEVERE: 5',
234 'WARNING: 6',
235 // 'FINE: 7' is not loggable
236 // 'FINE: 8' is not loggable
237 'WARNING: 9',
238 'SHOUT: 10']));
239
240 // no hierarchy means we all hear the same thing.
241 expect(aMessages, equals(rootMessages));
242 expect(cMessages, equals(rootMessages));
243 });
244
245 test('message logging - with hierarchy', () {
246 Logger.enableHierarchyLogging = true;
247
248 b.level = Level.WARNING;
249
250 var rootMessages = [];
251 var aMessages = [];
252 var cMessages = [];
253 c.addHandler((record) {
254 cMessages.add('${record.level}: ${record.message}');
255 });
256 a.addHandler((record) {
257 aMessages.add('${record.level}: ${record.message}');
258 });
259 root.addHandler((record) {
260 rootMessages.add('${record.level}: ${record.message}');
261 });
262
263 root.info('1');
264 root.fine('2');
265 root.shout('3');
266
267 b.info('4');
268 b.severe('5');
269 b.warning('6');
270 b.fine('7');
271
272 c.fine('8');
273 c.warning('9');
274 c.shout('10');
275
276 expect(rootMessages, equals([
277 'INFO: 1',
278 // 'FINE: 2' is not loggable
279 'SHOUT: 3',
280 // 'INFO: 4' is not loggable
281 'SEVERE: 5',
282 'WARNING: 6',
283 // 'FINE: 7' is not loggable
284 // 'FINE: 8' is not loggable
285 'WARNING: 9',
286 'SHOUT: 10']));
287
288 expect(aMessages, equals([
289 // 1,2 and 3 are lower in the hierarchy
290 // 'INFO: 4' is not loggable
291 'SEVERE: 5',
292 'WARNING: 6',
293 // 'FINE: 7' is not loggable
294 // 'FINE: 8' is not loggable
295 'WARNING: 9',
296 'SHOUT: 10']));
297
298 expect(cMessages, equals([
299 // 1 - 7 are lower in the hierarchy
300 // 'FINE: 8' is not loggable
301 'WARNING: 9',
302 'SHOUT: 10']));
303 });
304 });
305 }
OLDNEW
« lib/logging/logging.dart ('K') | « lib/logging/logging.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698