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

Side by Side Diff: pkg/logging/test/logging_test.dart

Issue 46233002: pkg/logging: added stackTrace support (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: better tests Created 7 years, 1 month 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
« no previous file with comments | « pkg/logging/pubspec.yaml ('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
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
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/logging/pubspec.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698