filterfish-logging 0.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. data/History.txt +176 -0
  2. data/Manifest.txt +54 -0
  3. data/README.txt +93 -0
  4. data/Rakefile +28 -0
  5. data/data/logging.yaml +63 -0
  6. data/lib/logging.rb +288 -0
  7. data/lib/logging/appender.rb +257 -0
  8. data/lib/logging/appenders/console.rb +43 -0
  9. data/lib/logging/appenders/email.rb +131 -0
  10. data/lib/logging/appenders/file.rb +55 -0
  11. data/lib/logging/appenders/growl.rb +182 -0
  12. data/lib/logging/appenders/io.rb +81 -0
  13. data/lib/logging/appenders/rolling_file.rb +293 -0
  14. data/lib/logging/appenders/syslog.rb +202 -0
  15. data/lib/logging/config/yaml_configurator.rb +197 -0
  16. data/lib/logging/layout.rb +103 -0
  17. data/lib/logging/layouts/basic.rb +35 -0
  18. data/lib/logging/layouts/pattern.rb +292 -0
  19. data/lib/logging/log_event.rb +50 -0
  20. data/lib/logging/logger.rb +388 -0
  21. data/lib/logging/repository.rb +151 -0
  22. data/lib/logging/root_logger.rb +60 -0
  23. data/lib/logging/utils.rb +44 -0
  24. data/tasks/ann.rake +78 -0
  25. data/tasks/bones.rake +21 -0
  26. data/tasks/gem.rake +106 -0
  27. data/tasks/manifest.rake +49 -0
  28. data/tasks/notes.rake +22 -0
  29. data/tasks/post_load.rake +37 -0
  30. data/tasks/rdoc.rake +49 -0
  31. data/tasks/rubyforge.rake +57 -0
  32. data/tasks/setup.rb +253 -0
  33. data/tasks/svn.rake +45 -0
  34. data/tasks/test.rake +38 -0
  35. data/test/appenders/test_console.rb +40 -0
  36. data/test/appenders/test_email.rb +167 -0
  37. data/test/appenders/test_file.rb +94 -0
  38. data/test/appenders/test_growl.rb +115 -0
  39. data/test/appenders/test_io.rb +113 -0
  40. data/test/appenders/test_rolling_file.rb +187 -0
  41. data/test/appenders/test_syslog.rb +192 -0
  42. data/test/benchmark.rb +88 -0
  43. data/test/config/test_yaml_configurator.rb +41 -0
  44. data/test/layouts/test_basic.rb +44 -0
  45. data/test/layouts/test_pattern.rb +173 -0
  46. data/test/setup.rb +66 -0
  47. data/test/test_appender.rb +162 -0
  48. data/test/test_layout.rb +85 -0
  49. data/test/test_log_event.rb +81 -0
  50. data/test/test_logger.rb +589 -0
  51. data/test/test_logging.rb +250 -0
  52. data/test/test_repository.rb +123 -0
  53. data/test/test_root_logger.rb +82 -0
  54. data/test/test_utils.rb +48 -0
  55. metadata +126 -0
@@ -0,0 +1,85 @@
1
+ # $Id$
2
+
3
+ require File.join(File.dirname(__FILE__), %w[setup])
4
+
5
+ module TestLogging
6
+
7
+ class TestLayout < Test::Unit::TestCase
8
+ include LoggingTestCase
9
+
10
+ def setup
11
+ super
12
+ @layout = ::Logging::Layout.new
13
+ end
14
+
15
+ def test_header
16
+ assert_equal '', @layout.header
17
+ end
18
+
19
+ def test_initialize
20
+ obj_format = lambda {|l| l.instance_variable_get :@obj_format}
21
+
22
+ assert_equal :string, obj_format[@layout]
23
+
24
+ @layout = ::Logging::Layout.new 'format_as' => 'blah'
25
+ assert_equal :string, obj_format[@layout]
26
+
27
+ @layout = ::Logging::Layout.new :format_as => :inspect
28
+ assert_equal :inspect, obj_format[@layout]
29
+
30
+ @layout = ::Logging::Layout.new 'format_as' => :yaml
31
+ assert_equal :yaml, obj_format[@layout]
32
+
33
+ @layout = ::Logging::Layout.new
34
+ assert_equal :string, obj_format[@layout]
35
+
36
+ ::Logging.format_as :yaml
37
+ @layout = ::Logging::Layout.new
38
+ assert_equal :yaml, obj_format[@layout]
39
+ end
40
+
41
+ def test_footer
42
+ assert_equal '', @layout.footer
43
+ end
44
+
45
+ def test_format
46
+ assert_nil @layout.format(::Logging::LogEvent.new('a','b','c',false))
47
+ end
48
+
49
+ def test_format_obj
50
+ obj = 'test string'
51
+ r = @layout.send :format_obj, obj
52
+ assert_same obj, r
53
+
54
+ obj = RuntimeError.new
55
+ r = @layout.send :format_obj, obj
56
+ assert_equal '<RuntimeError> RuntimeError', r
57
+
58
+ obj = TypeError.new 'only works with Integers'
59
+ r = @layout.send :format_obj, obj
60
+ assert_equal '<TypeError> only works with Integers', r
61
+
62
+ obj = Exception.new 'some exception'
63
+ obj.set_backtrace %w( this is the backtrace )
64
+ r = @layout.send :format_obj, obj
65
+ obj = "<Exception> some exception\n\tthis\n\tis\n\tthe\n\tbacktrace"
66
+ assert_equal obj, r
67
+
68
+ obj = [1, 2, 3, 4]
69
+ r = @layout.send :format_obj, obj
70
+ assert_equal "<Array> #{[1,2,3,4]}", r
71
+
72
+ obj = %w( one two three four )
73
+ @layout = ::Logging::Layout.new :format_as => :inspect
74
+ r = @layout.send :format_obj, obj
75
+ assert_equal '<Array> ["one", "two", "three", "four"]', r
76
+
77
+ @layout = ::Logging::Layout.new :format_as => :yaml
78
+ r = @layout.send :format_obj, obj
79
+ assert_equal "<Array> \n--- \n- one\n- two\n- three\n- four\n", r
80
+ end
81
+
82
+ end # class TestLayout
83
+ end # module TestLogging
84
+
85
+ # EOF
@@ -0,0 +1,81 @@
1
+ # $Id$
2
+
3
+ require File.join(File.dirname(__FILE__), %w[setup])
4
+
5
+ module TestLogging
6
+
7
+ class TestLogEvent < Test::Unit::TestCase
8
+ include LoggingTestCase
9
+
10
+ def setup
11
+ super
12
+
13
+ @appender = EventAppender.new('test')
14
+ @logger = ::Logging::Logger['TestLogger']
15
+ @logger.add_appenders @appender
16
+
17
+ @logger.info 'message 1'
18
+ @event = @appender.event
19
+ end
20
+
21
+ def test_data
22
+ assert_equal 'message 1', @event.data
23
+ end
24
+
25
+ def test_data_eq
26
+ @event.data = 'message 2'
27
+ assert_equal 'message 2', @event.data
28
+ end
29
+
30
+ def test_file
31
+ assert_equal '', @event.file
32
+
33
+ @logger.trace = true
34
+ @logger.warn 'warning message'
35
+ assert_match %r/test_log_event.rb\z/, @appender.event.file
36
+ end
37
+
38
+ def test_level
39
+ assert_equal 1, @event.level
40
+ end
41
+
42
+ def test_level_eq
43
+ @event.level = 3
44
+ assert_equal 3, @event.level
45
+ end
46
+
47
+ def test_line
48
+ assert_equal '', @event.file
49
+
50
+ @logger.trace = true
51
+ @logger.error 'error message'
52
+ assert_match %r/\d+/, @appender.event.line
53
+ end
54
+
55
+ def test_logger
56
+ assert_equal 'TestLogger', @event.logger
57
+ end
58
+
59
+ def test_logger_eq
60
+ @event.logger = 'MyLogger'
61
+ assert_equal 'MyLogger', @event.logger
62
+ end
63
+
64
+ def test_method
65
+ assert_equal '', @event.file
66
+
67
+ @logger.trace = true
68
+ @logger.debug 'debug message'
69
+ assert_equal 'test_method', @appender.event.method
70
+ end
71
+
72
+ end # class TestLogEvent
73
+
74
+ class EventAppender < ::Logging::Appender
75
+ attr_reader :event
76
+ def append( event ) @event = event end
77
+ end
78
+
79
+ end # module TestLogging
80
+
81
+ # EOF
@@ -0,0 +1,589 @@
1
+ # $Id$
2
+
3
+ require File.join(File.dirname(__FILE__), %w[setup])
4
+
5
+ module TestLogging
6
+
7
+ class TestLogger < Test::Unit::TestCase
8
+ include LoggingTestCase
9
+
10
+ def setup
11
+ super
12
+ end
13
+
14
+ def test_initialize
15
+ assert_raise(ArgumentError) {::Logging::Logger[:test]}
16
+ assert_nothing_raised {::Logging::Logger.new(Object)}
17
+ end
18
+
19
+ def test_add
20
+ root = ::Logging::Logger[:root]
21
+ root.level = 'info'
22
+
23
+ a1 = SioAppender.new 'a1'
24
+ a2 = SioAppender.new 'a2'
25
+ log = ::Logging::Logger.new 'A Logger'
26
+
27
+ root.add_appenders a1
28
+ assert_nil a1.readline
29
+ assert_nil a2.readline
30
+
31
+ log.add(0, 'this should NOT be logged')
32
+ assert_nil a1.readline
33
+ assert_nil a2.readline
34
+
35
+ log.add(1, 'this should be logged')
36
+ assert_equal " INFO A Logger : this should be logged\n", a1.readline
37
+ assert_nil a1.readline
38
+ assert_nil a2.readline
39
+
40
+ log.add(2,[1,2,3,4])
41
+ assert_equal " WARN A Logger : <Array> #{[1,2,3,4]}\n", a1.readline
42
+ assert_nil a1.readline
43
+ assert_nil a2.readline
44
+
45
+ log.add_appenders a2
46
+ log.add(3, 'an error has occurred')
47
+ assert_equal "ERROR A Logger : an error has occurred\n", a1.readline
48
+ assert_equal "ERROR A Logger : an error has occurred\n", a2.readline
49
+ assert_nil a1.readline
50
+ assert_nil a2.readline
51
+
52
+ log.additive = false
53
+ log.add(3, 'another error has occurred')
54
+ assert_equal "ERROR A Logger : another error has occurred\n", a2.readline
55
+ assert_nil a1.readline
56
+ assert_nil a2.readline
57
+
58
+ log.add_appenders a1
59
+ log.add(4, 'fatal exception')
60
+ assert_equal "FATAL A Logger : fatal exception\n", a1.readline
61
+ assert_equal "FATAL A Logger : fatal exception\n", a2.readline
62
+ assert_nil a1.readline
63
+ assert_nil a2.readline
64
+
65
+
66
+ log.level = :warn
67
+ log.add(2) do
68
+ str = 'a string of data'
69
+ str
70
+ end
71
+ assert_equal " WARN A Logger : a string of data\n", a1.readline
72
+ assert_equal " WARN A Logger : a string of data\n", a2.readline
73
+ assert_nil a1.readline
74
+ assert_nil a2.readline
75
+
76
+ log.add(1) do
77
+ rb_raise(RuntimeError, "this block should not be executed")
78
+ end
79
+ assert_nil a1.readline
80
+ assert_nil a2.readline
81
+ end
82
+
83
+ def test_add_appenders
84
+ log = ::Logging::Logger.new 'A'
85
+
86
+ appenders = lambda {log.instance_variable_get :@appenders}
87
+ assert_equal [], appenders[]
88
+
89
+ assert_raise(ArgumentError) {log.add_appenders Object.new}
90
+ assert_raise(ArgumentError) {log.add_appenders 'not an appender'}
91
+
92
+ a = ::Logging::Appender.new 'test_appender_1'
93
+ b = ::Logging::Appender.new 'test_appender_2'
94
+ c = ::Logging::Appender.new 'test_appender_3'
95
+
96
+ log.add_appenders a
97
+ assert_equal [a], appenders[]
98
+
99
+ log.add_appenders a
100
+ assert_equal [a], appenders[]
101
+
102
+ log.add_appenders b
103
+ assert_equal [a,b], appenders[]
104
+
105
+ log.add_appenders c
106
+ assert_equal [a,b,c], appenders[]
107
+
108
+ log.add_appenders a, c
109
+ assert_equal [a,b,c], appenders[]
110
+
111
+ log.clear_appenders
112
+ assert_equal [], appenders[]
113
+
114
+ log.add_appenders a, c
115
+ assert_equal [a,c], appenders[]
116
+ end
117
+
118
+ def test_additive
119
+ root = ::Logging::Logger.new :root
120
+ log = ::Logging::Logger.new 'A'
121
+
122
+ assert_raise(NoMethodError) {root.additive}
123
+ assert_equal true, log.additive
124
+ end
125
+
126
+ def test_additive_eq
127
+ root = ::Logging::Logger.new :root
128
+ log = ::Logging::Logger.new 'A'
129
+
130
+ assert_raise(NoMethodError) {root.additive = false}
131
+ assert_equal true, log.additive
132
+
133
+ log.additive = false
134
+ assert_equal false, log.additive
135
+
136
+ log.additive = true
137
+ assert_equal true, log.additive
138
+
139
+ log.additive = 'false'
140
+ assert_equal false, log.additive
141
+
142
+ log.additive = 'true'
143
+ assert_equal true, log.additive
144
+
145
+ log.additive = nil
146
+ assert_equal true, log.additive
147
+
148
+ assert_raise(ArgumentError) {log.additive = Object}
149
+ end
150
+
151
+ def test_appenders_eq
152
+ log = ::Logging::Logger.new '42'
153
+
154
+ appenders = lambda {log.instance_variable_get :@appenders}
155
+ assert_equal [], appenders[]
156
+
157
+ assert_raise(ArgumentError) {log.appenders = Object.new}
158
+ assert_raise(ArgumentError) {log.appenders = 'not an appender'}
159
+
160
+ a = ::Logging::Appender.new 'test_appender_1'
161
+ b = ::Logging::Appender.new 'test_appender_2'
162
+ c = ::Logging::Appender.new 'test_appender_3'
163
+
164
+ log.appenders = a, b, c
165
+ assert_equal [a, b, c], appenders[]
166
+
167
+ log.appenders = b
168
+ assert_equal [b], appenders[]
169
+
170
+ log.appenders = c, a, b
171
+ assert_equal [c,a,b], appenders[]
172
+
173
+ log.appenders = nil
174
+ assert_equal [], appenders[]
175
+
176
+ log.appenders = %w[test_appender_1 test_appender_3]
177
+ assert_equal [a,c], appenders[]
178
+
179
+ assert_raise(ArgumentError) {log.appenders = 'unknown'}
180
+ end
181
+
182
+ def test_class_aref
183
+ root = ::Logging::Logger[:root]
184
+ assert_same root, ::Logging::Logger[:root]
185
+
186
+ a = []
187
+ assert_same ::Logging::Logger['Array'], ::Logging::Logger[Array]
188
+ assert_same ::Logging::Logger['Array'], ::Logging::Logger[a]
189
+
190
+ assert_not_same ::Logging::Logger['Array'], ::Logging::Logger[:root]
191
+ assert_not_same ::Logging::Logger['A'], ::Logging::Logger['A::B']
192
+ end
193
+
194
+ def test_class_root
195
+ root = ::Logging::Logger[:root]
196
+ assert_same root, ::Logging::Logger.root
197
+ end
198
+
199
+ def test_clear_appenders
200
+ log = ::Logging::Logger.new 'Elliott'
201
+
202
+ appenders = lambda {log.instance_variable_get :@appenders}
203
+ assert_equal [], appenders[]
204
+
205
+ a = ::Logging::Appender.new 'test_appender_1'
206
+ b = ::Logging::Appender.new 'test_appender_2'
207
+ c = ::Logging::Appender.new 'test_appender_3'
208
+
209
+ log.add_appenders a, b, c
210
+ assert_equal [a,b,c], appenders[]
211
+
212
+ log.clear_appenders
213
+ assert_equal [], appenders[]
214
+ end
215
+
216
+ def test_concat
217
+ a1 = SioAppender.new 'a1'
218
+ a2 = SioAppender.new 'a2'
219
+ log = ::Logging::Logger.new 'A'
220
+
221
+ ::Logging::Logger[:root].add_appenders a1
222
+ assert_nil a1.readline
223
+ assert_nil a2.readline
224
+
225
+ log << "this is line one of the log file\n"
226
+ assert_equal "this is line one of the log file\n", a1.readline
227
+ assert_nil a1.readline
228
+ assert_nil a2.readline
229
+
230
+ log << "this is line two of the log file\n"
231
+ log << "this is line three of the log file\n"
232
+ assert_equal "this is line two of the log file\n", a1.readline
233
+ assert_equal "this is line three of the log file\n", a1.readline
234
+ assert_nil a1.readline
235
+ assert_nil a2.readline
236
+
237
+ log.add_appenders a2
238
+ log << "this is line four of the log file\n"
239
+ assert_equal "this is line four of the log file\n", a1.readline
240
+ assert_equal "this is line four of the log file\n", a2.readline
241
+ assert_nil a1.readline
242
+ assert_nil a2.readline
243
+
244
+ log.additive = false
245
+ log << "this is line five of the log file\n"
246
+ assert_equal "this is line five of the log file\n", a2.readline
247
+ assert_nil a1.readline
248
+ assert_nil a2.readline
249
+
250
+ log.add_appenders a1
251
+ log << "this is line six of the log file\n"
252
+ assert_equal "this is line six of the log file\n", a1.readline
253
+ assert_equal "this is line six of the log file\n", a2.readline
254
+ assert_nil a1.readline
255
+ assert_nil a2.readline
256
+ end
257
+
258
+ def test_level
259
+ root = ::Logging::Logger.new :root
260
+ log = ::Logging::Logger.new 'A'
261
+
262
+ assert_equal 0, root.level
263
+ assert_equal 0, log.level
264
+
265
+ root.level = :warn
266
+ assert_equal 2, root.level
267
+ assert_equal 0, log.level
268
+
269
+ log.level = nil
270
+ assert_equal 2, root.level
271
+ assert_equal 2, log.level
272
+
273
+ log.level = :error
274
+ assert_equal 2, root.level
275
+ assert_equal 3, log.level
276
+ end
277
+
278
+ def test_level_eq
279
+ root = ::Logging::Logger.new :root
280
+ log = ::Logging::Logger.new 'A'
281
+
282
+ assert_equal 0, root.level
283
+ assert_equal 0, log.level
284
+
285
+ assert_raise(ArgumentError) {root.level = -1}
286
+ assert_raise(ArgumentError) {root.level = 6}
287
+ assert_raise(ArgumentError) {root.level = Object}
288
+ assert_raise(ArgumentError) {root.level = 'bob'}
289
+ assert_raise(ArgumentError) {root.level = :wtf}
290
+
291
+ root.level = 'INFO'
292
+ assert_equal 1, root.level
293
+ assert_equal 0, log.level
294
+
295
+ root.level = :warn
296
+ assert_equal 2, root.level
297
+ assert_equal 0, log.level
298
+
299
+ root.level = 'error'
300
+ assert_equal 3, root.level
301
+ assert_equal 0, log.level
302
+
303
+ root.level = 4
304
+ assert_equal 4, root.level
305
+ assert_equal 0, log.level
306
+
307
+ log.level = nil
308
+ assert_equal 4, root.level
309
+ assert_equal 4, log.level
310
+
311
+ log.level = :DEBUG
312
+ assert_equal 4, root.level
313
+ assert_equal 0, log.level
314
+
315
+ log.level = :off
316
+ assert_equal 4, root.level
317
+ assert_equal 5, log.level
318
+
319
+ root.level = :all
320
+ assert_equal 0, root.level
321
+ assert_equal 5, log.level
322
+
323
+ log.level = nil
324
+ assert_equal 0, root.level
325
+ assert_equal 0, log.level
326
+
327
+ root.level = :warn
328
+ assert_equal 2, root.level
329
+ assert_equal 0, log.level
330
+
331
+ root.level = nil
332
+ assert_equal 0, root.level
333
+ assert_equal 0, log.level
334
+ end
335
+
336
+ def test_log
337
+ root = ::Logging::Logger[:root]
338
+ root.level = 'info'
339
+
340
+ a1 = SioAppender.new 'a1'
341
+ a2 = SioAppender.new 'a2'
342
+ log = ::Logging::Logger.new 'A Logger'
343
+
344
+ root.add_appenders a1
345
+ assert_nil a1.readline
346
+ assert_nil a2.readline
347
+
348
+ log.debug 'this should NOT be logged'
349
+ assert_nil a1.readline
350
+ assert_nil a2.readline
351
+
352
+ log.info 'this should be logged'
353
+ assert_equal " INFO A Logger : this should be logged\n", a1.readline
354
+ assert_nil a1.readline
355
+ assert_nil a2.readline
356
+
357
+ log.warn [1,2,3,4]
358
+ assert_equal " WARN A Logger : <Array> #{[1,2,3,4]}\n", a1.readline
359
+ assert_nil a1.readline
360
+ assert_nil a2.readline
361
+
362
+ log.add_appenders a2
363
+ log.error 'an error has occurred'
364
+ assert_equal "ERROR A Logger : an error has occurred\n", a1.readline
365
+ assert_equal "ERROR A Logger : an error has occurred\n", a2.readline
366
+ assert_nil a1.readline
367
+ assert_nil a2.readline
368
+
369
+ log.additive = false
370
+ log.error 'another error has occurred'
371
+ assert_equal "ERROR A Logger : another error has occurred\n", a2.readline
372
+ assert_nil a1.readline
373
+ assert_nil a2.readline
374
+
375
+ log.add_appenders a1
376
+ log.fatal 'fatal exception'
377
+ assert_equal "FATAL A Logger : fatal exception\n", a1.readline
378
+ assert_equal "FATAL A Logger : fatal exception\n", a2.readline
379
+ assert_nil a1.readline
380
+ assert_nil a2.readline
381
+
382
+ assert_equal false, log.debug
383
+ assert_equal true, log.info
384
+ assert_equal " INFO A Logger : <NilClass> nil\n", a1.readline
385
+ assert_equal " INFO A Logger : <NilClass> nil\n", a2.readline
386
+ assert_equal true, log.warn
387
+ assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
388
+ assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
389
+ assert_equal true, log.error
390
+ assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
391
+ assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
392
+ assert_equal true, log.fatal
393
+ assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
394
+ assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
395
+
396
+ log.level = :warn
397
+ assert_equal false, log.debug
398
+ assert_equal false, log.info
399
+ assert_equal true, log.warn
400
+ assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
401
+ assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
402
+ assert_equal true, log.error
403
+ assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
404
+ assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
405
+ assert_equal true, log.fatal
406
+ assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
407
+ assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
408
+
409
+ assert_raise(NoMethodError) {log.critical 'this log level does not exist'}
410
+
411
+ log.warn do
412
+ str = 'a string of data'
413
+ str
414
+ end
415
+ assert_equal " WARN A Logger : a string of data\n", a1.readline
416
+ assert_equal " WARN A Logger : a string of data\n", a2.readline
417
+ assert_nil a1.readline
418
+ assert_nil a2.readline
419
+
420
+ log.info do
421
+ rb_raise(RuntimeError, "this block should not be executed")
422
+ end
423
+ assert_nil a1.readline
424
+ assert_nil a2.readline
425
+ end
426
+
427
+ def test_log_eh
428
+ ::Logging::Logger[:root].level = 'info'
429
+ log = ::Logging::Logger['A Logger']
430
+
431
+ assert_equal false, log.debug?
432
+ assert_equal true, log.info?
433
+ assert_equal true, log.warn?
434
+ assert_equal true, log.error?
435
+ assert_equal true, log.fatal?
436
+
437
+ log.level = :warn
438
+ assert_equal false, log.debug?
439
+ assert_equal false, log.info?
440
+ assert_equal true, log.warn?
441
+ assert_equal true, log.error?
442
+ assert_equal true, log.fatal?
443
+
444
+ assert_raise(NoMethodError) do
445
+ log.critical? 'this log level does not exist'
446
+ end
447
+ end
448
+
449
+ def test_name
450
+ root = ::Logging::Logger.new :root
451
+ log = ::Logging::Logger.new 'A'
452
+
453
+ assert_equal 'root', root.name
454
+ assert_equal 'A', log.name
455
+ end
456
+
457
+ def test_parent
458
+ logger = ::Logging::Logger
459
+ root = logger.new :root
460
+
461
+ assert_raise(NoMethodError) {root.parent}
462
+
463
+ assert_same root, logger['A'].parent
464
+ assert_same logger['A'], logger['A::B'].parent
465
+ assert_same logger['A::B'], logger['A::B::C::D'].parent
466
+ assert_same logger['A::B'], logger['A::B::C::E'].parent
467
+ assert_same logger['A::B'], logger['A::B::C::F'].parent
468
+
469
+ assert_same logger['A::B'], logger['A::B::C'].parent
470
+ assert_same logger['A::B::C'], logger['A::B::C::D'].parent
471
+ assert_same logger['A::B::C'], logger['A::B::C::E'].parent
472
+ assert_same logger['A::B::C'], logger['A::B::C::F'].parent
473
+
474
+ assert_same logger['A::B::C::E'], logger['A::B::C::E::G'].parent
475
+ end
476
+
477
+ def test_remove_appenders
478
+ log = ::Logging::Logger['X']
479
+
480
+ appenders = lambda {log.instance_variable_get :@appenders}
481
+ assert_equal [], appenders[]
482
+
483
+ a = ::Logging::Appender.new 'test_appender_1'
484
+ b = ::Logging::Appender.new 'test_appender_2'
485
+ c = ::Logging::Appender.new 'test_appender_3'
486
+
487
+ log.add_appenders a, b, c
488
+ assert_equal [a,b,c], appenders[]
489
+
490
+ assert_raise(ArgumentError) {log.remove_appenders Object.new}
491
+ assert_raise(ArgumentError) {log.remove_appenders 10}
492
+
493
+ log.remove_appenders b
494
+ assert_equal [a,c], appenders[]
495
+
496
+ log.remove_appenders 'test_appender_1'
497
+ assert_equal [c], appenders[]
498
+
499
+ log.remove_appenders c
500
+ assert_equal [], appenders[]
501
+
502
+ log.remove_appenders a, b, c
503
+ assert_equal [], appenders[]
504
+
505
+ log.add_appenders a, b, c
506
+ assert_equal [a,b,c], appenders[]
507
+
508
+ log.remove_appenders a, c
509
+ assert_equal [b], appenders[]
510
+ end
511
+
512
+ def test_spaceship
513
+ logs = %w(
514
+ A A::B A::B::C A::B::C::D A::B::C::E A::B::C::E::G A::B::C::F
515
+ ).map {|x| ::Logging::Logger[x]}
516
+ logs.unshift ::Logging::Logger[:root]
517
+
518
+ logs.inject do |a,b|
519
+ assert_equal(-1, a <=> b, "'#{a.name}' <=> '#{b.name}'")
520
+ b
521
+ end
522
+
523
+ assert_equal 1, logs[1] <=> ::Logging::Logger[:root]
524
+ assert_raise(ArgumentError) {logs[1] <=> Object.new}
525
+ assert_raise(ArgumentError) {::Logging::Logger[:root] <=> 'string'}
526
+ end
527
+
528
+ def test_trace
529
+ log = ::Logging::Logger[:root]
530
+ assert_equal false, log.trace
531
+
532
+ log.trace = true
533
+ assert_equal true, log.trace
534
+
535
+ log = ::Logging::Logger['A']
536
+ assert_equal false, log.trace
537
+
538
+ log.trace = true
539
+ assert_equal true, log.trace
540
+ end
541
+
542
+ def test_trace_eq
543
+ log = ::Logging::Logger.new 'A'
544
+ assert_equal false, log.trace
545
+
546
+ log.trace = true
547
+ assert_equal true, log.trace
548
+
549
+ log.trace = false
550
+ assert_equal false, log.trace
551
+
552
+ log.trace = 'true'
553
+ assert_equal true, log.trace
554
+
555
+ log.trace = 'false'
556
+ assert_equal false, log.trace
557
+
558
+ log.trace = nil
559
+ assert_equal false, log.trace
560
+
561
+ assert_raise(ArgumentError) {log.trace = Object}
562
+ end
563
+
564
+ end # class TestLogger
565
+
566
+ class SioAppender < ::Logging::Appenders::IO
567
+
568
+ def initialize( name, opts = {} )
569
+ @sio = StringIO.new
570
+ super(name, @sio, opts)
571
+ begin readline rescue EOFError end
572
+ end
573
+
574
+ def readline
575
+ @pos ||= 0
576
+ @sio.seek @pos
577
+ begin
578
+ line = @sio.readline
579
+ @pos = @sio.tell
580
+ line
581
+ rescue EOFError
582
+ nil
583
+ end
584
+ end
585
+
586
+ end # class SioAppender
587
+ end # module TestLogging
588
+
589
+ # EOF