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

Side by Side Diff: mojo/public/dart/third_party/logging/test/logging_test.dart

Issue 1346773002: Stop running pub get at gclient sync time and fix build bugs (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 3 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
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 library logging_test;
6
7 import 'dart:async';
8
9 import 'package:logging/logging.dart';
10 import 'package:test/test.dart';
11
12 void main() {
13 test('level comparison is a valid comparator', () {
14 var level1 = const Level('NOT_REAL1', 253);
15 expect(level1 == level1, isTrue);
16 expect(level1 <= level1, isTrue);
17 expect(level1 >= level1, isTrue);
18 expect(level1 < level1, isFalse);
19 expect(level1 > level1, isFalse);
20
21 var level2 = const Level('NOT_REAL2', 455);
22 expect(level1 <= level2, isTrue);
23 expect(level1 < level2, isTrue);
24 expect(level2 >= level1, isTrue);
25 expect(level2 > level1, isTrue);
26
27 var level3 = const Level('NOT_REAL3', 253);
28 expect(level1, isNot(same(level3))); // different instances
29 expect(level1, equals(level3)); // same value.
30 });
31
32 test('default levels are in order', () {
33 final levels = Level.LEVELS;
34
35 for (int i = 0; i < levels.length; i++) {
36 for (int j = i + 1; j < levels.length; j++) {
37 expect(levels[i] < levels[j], isTrue);
38 }
39 }
40 });
41
42 test('levels are comparable', () {
43 final unsorted = [
44 Level.INFO,
45 Level.CONFIG,
46 Level.FINE,
47 Level.SHOUT,
48 Level.OFF,
49 Level.FINER,
50 Level.ALL,
51 Level.WARNING,
52 Level.FINEST,
53 Level.SEVERE,
54 ];
55
56 final sorted = Level.LEVELS;
57
58 expect(unsorted, isNot(orderedEquals(sorted)));
59
60 unsorted.sort();
61 expect(unsorted, orderedEquals(sorted));
62 });
63
64 test('levels are hashable', () {
65 var map = new Map<Level, String>();
66 map[Level.INFO] = 'info';
67 map[Level.SHOUT] = 'shout';
68 expect(map[Level.INFO], same('info'));
69 expect(map[Level.SHOUT], same('shout'));
70 });
71
72 test('logger name cannot start with a "." ', () {
73 expect(() => new Logger('.c'), throwsArgumentError);
74 });
75
76 test('logger naming is hierarchical', () {
77 Logger c = new Logger('a.b.c');
78 expect(c.name, equals('c'));
79 expect(c.parent.name, equals('b'));
80 expect(c.parent.parent.name, equals('a'));
81 expect(c.parent.parent.parent.name, equals(''));
82 expect(c.parent.parent.parent.parent, isNull);
83 });
84
85 test('logger full name', () {
86 Logger c = new Logger('a.b.c');
87 expect(c.fullName, equals('a.b.c'));
88 expect(c.parent.fullName, equals('a.b'));
89 expect(c.parent.parent.fullName, equals('a'));
90 expect(c.parent.parent.parent.fullName, equals(''));
91 expect(c.parent.parent.parent.parent, isNull);
92 });
93
94 test('logger parent-child links are correct', () {
95 Logger a = new Logger('a');
96 Logger b = new Logger('a.b');
97 Logger c = new Logger('a.c');
98 expect(a, same(b.parent));
99 expect(a, same(c.parent));
100 expect(a.children['b'], same(b));
101 expect(a.children['c'], same(c));
102 });
103
104 test('loggers are singletons', () {
105 Logger a1 = new Logger('a');
106 Logger a2 = new Logger('a');
107 Logger b = new Logger('a.b');
108 Logger root = Logger.root;
109 expect(a1, same(a2));
110 expect(a1, same(b.parent));
111 expect(root, same(a1.parent));
112 expect(root, same(new Logger('')));
113 });
114
115 test('cannot directly manipulate Logger.children', () {
116 var loggerAB = new Logger('a.b');
117 var loggerA = loggerAB.parent;
118
119 expect(loggerA.children['b'], same(loggerAB), reason: 'can read Children');
120
121 expect(() {
122 loggerAB.children['test'] = null;
123 }, throwsUnsupportedError, reason: 'Children is read-only');
124 });
125
126 test('stackTrace gets throw to LogRecord', () {
127 Logger.root.level = Level.INFO;
128
129 var records = new List<LogRecord>();
130
131 var sub = Logger.root.onRecord.listen(records.add);
132
133 try {
134 throw new UnsupportedError('test exception');
135 } catch (error, stack) {
136 Logger.root.log(Level.SEVERE, 'severe', error, stack);
137 Logger.root.warning('warning', error, stack);
138 }
139
140 Logger.root.log(Level.SHOUT, 'shout');
141
142 sub.cancel();
143
144 expect(records, hasLength(3));
145
146 var severe = records[0];
147 expect(severe.message, 'severe');
148 expect(severe.error is UnsupportedError, isTrue);
149 expect(severe.stackTrace is StackTrace, isTrue);
150
151 var warning = records[1];
152 expect(warning.message, 'warning');
153 expect(warning.error is UnsupportedError, isTrue);
154 expect(warning.stackTrace is StackTrace, isTrue);
155
156 var shout = records[2];
157 expect(shout.message, 'shout');
158 expect(shout.error, isNull);
159 expect(shout.stackTrace, isNull);
160 });
161
162 group('zone gets recorded to LogRecord', () {
163 test('root zone', () {
164 var root = Logger.root;
165
166 var recordingZone = Zone.current;
167 var records = new List<LogRecord>();
168 root.onRecord.listen(records.add);
169 root.info('hello');
170
171 expect(records, hasLength(1));
172 expect(records.first.zone, equals(recordingZone));
173 });
174
175 test('child zone', () {
176 var root = Logger.root;
177
178 var recordingZone;
179 var records = new List<LogRecord>();
180 root.onRecord.listen(records.add);
181
182 runZoned(() {
183 recordingZone = Zone.current;
184 root.info('hello');
185 });
186
187 expect(records, hasLength(1));
188 expect(records.first.zone, equals(recordingZone));
189 });
190
191 test('custom zone', () {
192 var root = Logger.root;
193
194 var recordingZone;
195 var records = new List<LogRecord>();
196 root.onRecord.listen(records.add);
197
198 runZoned(() {
199 recordingZone = Zone.current;
200 });
201
202 runZoned(() => root.log(Level.INFO, 'hello', null, null, recordingZone));
203
204 expect(records, hasLength(1));
205 expect(records.first.zone, equals(recordingZone));
206 });
207 });
208
209 group('mutating levels', () {
210 Logger root = Logger.root;
211 Logger a = new Logger('a');
212 Logger b = new Logger('a.b');
213 Logger c = new Logger('a.b.c');
214 Logger d = new Logger('a.b.c.d');
215 Logger e = new Logger('a.b.c.d.e');
216
217 setUp(() {
218 hierarchicalLoggingEnabled = true;
219 root.level = Level.INFO;
220 a.level = null;
221 b.level = null;
222 c.level = null;
223 d.level = null;
224 e.level = null;
225 root.clearListeners();
226 a.clearListeners();
227 b.clearListeners();
228 c.clearListeners();
229 d.clearListeners();
230 e.clearListeners();
231 hierarchicalLoggingEnabled = false;
232 root.level = Level.INFO;
233 });
234
235 test('cannot set level if hierarchy is disabled', () {
236 expect(() {
237 a.level = Level.FINE;
238 }, throwsUnsupportedError);
239 });
240
241 test('loggers effective level - no hierarchy', () {
242 expect(root.level, equals(Level.INFO));
243 expect(a.level, equals(Level.INFO));
244 expect(b.level, equals(Level.INFO));
245
246 root.level = Level.SHOUT;
247
248 expect(root.level, equals(Level.SHOUT));
249 expect(a.level, equals(Level.SHOUT));
250 expect(b.level, equals(Level.SHOUT));
251 });
252
253 test('loggers effective level - with hierarchy', () {
254 hierarchicalLoggingEnabled = true;
255 expect(root.level, equals(Level.INFO));
256 expect(a.level, equals(Level.INFO));
257 expect(b.level, equals(Level.INFO));
258 expect(c.level, equals(Level.INFO));
259
260 root.level = Level.SHOUT;
261 b.level = Level.FINE;
262
263 expect(root.level, equals(Level.SHOUT));
264 expect(a.level, equals(Level.SHOUT));
265 expect(b.level, equals(Level.FINE));
266 expect(c.level, equals(Level.FINE));
267 });
268
269 test('isLoggable is appropriate', () {
270 hierarchicalLoggingEnabled = true;
271 root.level = Level.SEVERE;
272 c.level = Level.ALL;
273 e.level = Level.OFF;
274
275 expect(root.isLoggable(Level.SHOUT), isTrue);
276 expect(root.isLoggable(Level.SEVERE), isTrue);
277 expect(root.isLoggable(Level.WARNING), isFalse);
278 expect(c.isLoggable(Level.FINEST), isTrue);
279 expect(c.isLoggable(Level.FINE), isTrue);
280 expect(e.isLoggable(Level.SHOUT), isFalse);
281 });
282
283 test('add/remove handlers - no hierarchy', () {
284 int calls = 0;
285 var handler = (_) {
286 calls++;
287 };
288 final sub = c.onRecord.listen(handler);
289 root.info("foo");
290 root.info("foo");
291 expect(calls, equals(2));
292 sub.cancel();
293 root.info("foo");
294 expect(calls, equals(2));
295 });
296
297 test('add/remove handlers - with hierarchy', () {
298 hierarchicalLoggingEnabled = true;
299 int calls = 0;
300 var handler = (_) {
301 calls++;
302 };
303 c.onRecord.listen(handler);
304 root.info("foo");
305 root.info("foo");
306 expect(calls, equals(0));
307 });
308
309 test('logging methods store appropriate level', () {
310 root.level = Level.ALL;
311 var rootMessages = [];
312 root.onRecord.listen((record) {
313 rootMessages.add('${record.level}: ${record.message}');
314 });
315
316 root.finest('1');
317 root.finer('2');
318 root.fine('3');
319 root.config('4');
320 root.info('5');
321 root.warning('6');
322 root.severe('7');
323 root.shout('8');
324
325 expect(rootMessages, equals([
326 'FINEST: 1',
327 'FINER: 2',
328 'FINE: 3',
329 'CONFIG: 4',
330 'INFO: 5',
331 'WARNING: 6',
332 'SEVERE: 7',
333 'SHOUT: 8'
334 ]));
335 });
336
337 test('logging methods store exception', () {
338 root.level = Level.ALL;
339 var rootMessages = [];
340 root.onRecord.listen((r) {
341 rootMessages.add('${r.level}: ${r.message} ${r.error}');
342 });
343
344 root.finest('1');
345 root.finer('2');
346 root.fine('3');
347 root.config('4');
348 root.info('5');
349 root.warning('6');
350 root.severe('7');
351 root.shout('8');
352 root.finest('1', 'a');
353 root.finer('2', 'b');
354 root.fine('3', ['c']);
355 root.config('4', 'd');
356 root.info('5', 'e');
357 root.warning('6', 'f');
358 root.severe('7', 'g');
359 root.shout('8', 'h');
360
361 expect(rootMessages, equals([
362 'FINEST: 1 null',
363 'FINER: 2 null',
364 'FINE: 3 null',
365 'CONFIG: 4 null',
366 'INFO: 5 null',
367 'WARNING: 6 null',
368 'SEVERE: 7 null',
369 'SHOUT: 8 null',
370 'FINEST: 1 a',
371 'FINER: 2 b',
372 'FINE: 3 [c]',
373 'CONFIG: 4 d',
374 'INFO: 5 e',
375 'WARNING: 6 f',
376 'SEVERE: 7 g',
377 'SHOUT: 8 h'
378 ]));
379 });
380
381 test('message logging - no hierarchy', () {
382 root.level = Level.WARNING;
383 var rootMessages = [];
384 var aMessages = [];
385 var cMessages = [];
386 c.onRecord.listen((record) {
387 cMessages.add('${record.level}: ${record.message}');
388 });
389 a.onRecord.listen((record) {
390 aMessages.add('${record.level}: ${record.message}');
391 });
392 root.onRecord.listen((record) {
393 rootMessages.add('${record.level}: ${record.message}');
394 });
395
396 root.info('1');
397 root.fine('2');
398 root.shout('3');
399
400 b.info('4');
401 b.severe('5');
402 b.warning('6');
403 b.fine('7');
404
405 c.fine('8');
406 c.warning('9');
407 c.shout('10');
408
409 expect(rootMessages, equals([
410 // 'INFO: 1' is not loggable
411 // 'FINE: 2' is not loggable
412 'SHOUT: 3',
413 // 'INFO: 4' is not loggable
414 'SEVERE: 5',
415 'WARNING: 6',
416 // 'FINE: 7' is not loggable
417 // 'FINE: 8' is not loggable
418 'WARNING: 9',
419 'SHOUT: 10'
420 ]));
421
422 // no hierarchy means we all hear the same thing.
423 expect(aMessages, equals(rootMessages));
424 expect(cMessages, equals(rootMessages));
425 });
426
427 test('message logging - with hierarchy', () {
428 hierarchicalLoggingEnabled = true;
429
430 b.level = Level.WARNING;
431
432 var rootMessages = [];
433 var aMessages = [];
434 var cMessages = [];
435 c.onRecord.listen((record) {
436 cMessages.add('${record.level}: ${record.message}');
437 });
438 a.onRecord.listen((record) {
439 aMessages.add('${record.level}: ${record.message}');
440 });
441 root.onRecord.listen((record) {
442 rootMessages.add('${record.level}: ${record.message}');
443 });
444
445 root.info('1');
446 root.fine('2');
447 root.shout('3');
448
449 b.info('4');
450 b.severe('5');
451 b.warning('6');
452 b.fine('7');
453
454 c.fine('8');
455 c.warning('9');
456 c.shout('10');
457
458 expect(rootMessages, equals([
459 'INFO: 1',
460 // 'FINE: 2' is not loggable
461 'SHOUT: 3',
462 // 'INFO: 4' is not loggable
463 'SEVERE: 5',
464 'WARNING: 6',
465 // 'FINE: 7' is not loggable
466 // 'FINE: 8' is not loggable
467 'WARNING: 9',
468 'SHOUT: 10'
469 ]));
470
471 expect(aMessages, equals([
472 // 1,2 and 3 are lower in the hierarchy
473 // 'INFO: 4' is not loggable
474 'SEVERE: 5',
475 'WARNING: 6',
476 // 'FINE: 7' is not loggable
477 // 'FINE: 8' is not loggable
478 'WARNING: 9',
479 'SHOUT: 10'
480 ]));
481
482 expect(cMessages, equals([
483 // 1 - 7 are lower in the hierarchy
484 // 'FINE: 8' is not loggable
485 'WARNING: 9',
486 'SHOUT: 10'
487 ]));
488 });
489
490 test('message logging - lazy functions', () {
491 root.level = Level.INFO;
492 var messages = [];
493 root.onRecord.listen((record) {
494 messages.add('${record.level}: ${record.message}');
495 });
496
497 var callCount = 0;
498 var myClosure = () => "${++callCount}";
499
500 root.info(myClosure);
501 root.finer(myClosure); // Should not get evaluated.
502 root.warning(myClosure);
503
504 expect(messages, equals(['INFO: 1', 'WARNING: 2',]));
505 });
506
507 test('message logging - calls toString', () {
508 root.level = Level.INFO;
509 var messages = [];
510 root.onRecord.listen((record) {
511 messages.add('${record.level}: ${record.message}');
512 });
513
514 root.info(5);
515 root.info(false);
516 root.info([1, 2, 3]);
517 root.info(() => 10);
518
519 expect(messages,
520 equals(['INFO: 5', 'INFO: false', 'INFO: [1, 2, 3]', 'INFO: 10',]));
521 });
522 });
523
524 group('recordStackTraceAtLevel', () {
525 var root = Logger.root;
526 tearDown(() {
527 recordStackTraceAtLevel = Level.OFF;
528 root.clearListeners();
529 });
530
531 test('no stack trace by default', () {
532 var records = new List<LogRecord>();
533 root.onRecord.listen(records.add);
534 root.severe('hello');
535 root.warning('hello');
536 root.info('hello');
537 expect(records, hasLength(3));
538 expect(records[0].stackTrace, isNull);
539 expect(records[1].stackTrace, isNull);
540 expect(records[2].stackTrace, isNull);
541 });
542
543 test('trace recorded only on requested levels', () {
544 var records = new List<LogRecord>();
545 recordStackTraceAtLevel = Level.WARNING;
546 root.onRecord.listen(records.add);
547 root.severe('hello');
548 root.warning('hello');
549 root.info('hello');
550 expect(records, hasLength(3));
551 expect(records[0].stackTrace, isNotNull);
552 expect(records[1].stackTrace, isNotNull);
553 expect(records[2].stackTrace, isNull);
554 });
555
556 test('provided trace is used if given', () {
557 var trace;
558 try {
559 throw 'trace';
560 } catch(e, t) {
561 trace = t;
562 }
563 var records = new List<LogRecord>();
564 recordStackTraceAtLevel = Level.WARNING;
565 root.onRecord.listen(records.add);
566 root.severe('hello');
567 root.warning('hello', 'a', trace);
568 expect(records, hasLength(2));
569 expect(records[0].stackTrace, isNot(equals(trace)));
570 expect(records[1].stackTrace, trace);
571 });
572
573 test('error also generated when generating a trace', () {
574 var records = new List<LogRecord>();
575 recordStackTraceAtLevel = Level.WARNING;
576 root.onRecord.listen(records.add);
577 root.severe('hello');
578 root.warning('hello');
579 root.info('hello');
580 expect(records, hasLength(3));
581 expect(records[0].error, isNotNull);
582 expect(records[1].error, isNotNull);
583 expect(records[2].error, isNull);
584 });
585 });
586 }
OLDNEW
« no previous file with comments | « mojo/public/dart/third_party/logging/pubspec.yaml ('k') | mojo/public/dart/third_party/matcher/.gitignore » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698