logging 0.1.0

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.
data/test/setup.rb ADDED
@@ -0,0 +1,45 @@
1
+ # $Id: setup.rb 12 2007-01-14 20:03:40Z tim_pease $
2
+
3
+ require 'test/unit'
4
+
5
+ begin
6
+ require 'logging'
7
+ rescue LoadError
8
+ require 'rubygems'
9
+ require 'logging'
10
+ end
11
+
12
+ begin
13
+ require 'turn'
14
+ rescue LoadError
15
+ require 'rubygems'
16
+ begin; require 'turn'; rescue LoadError; end
17
+ end
18
+
19
+
20
+ module TestLogging
21
+ module LoggingTestCase
22
+
23
+ def setup
24
+ super
25
+
26
+ ::Logging.module_eval do
27
+ ::Logging::LEVELS.clear
28
+ ::Logging::LNAMES.clear
29
+ remove_const :MAX_LEVEL_LENGTH if const_defined? :MAX_LEVEL_LENGTH
30
+ remove_const :OBJ_FORMAT if const_defined? :OBJ_FORMAT
31
+ end
32
+
33
+ ::Logging::Repository.class_eval do
34
+ @__instance__ = nil
35
+ class << self
36
+ nonce = class << Singleton; self; end
37
+ define_method(:instance, nonce::FirstInstanceCall)
38
+ end
39
+ end
40
+ end
41
+
42
+ end # module LoggingTestCase
43
+ end # module TestLogging
44
+
45
+ # EOF
data/test/test_all.rb ADDED
@@ -0,0 +1,5 @@
1
+ # $Id: test_all.rb 10 2007-01-12 18:57:07Z tim_pease $
2
+
3
+ Dir.glob('test/**/test_*.rb').sort.each {|fn| require fn}
4
+
5
+ # EOF
@@ -0,0 +1,136 @@
1
+ # $Id: test_appender.rb 15 2007-01-15 19:03:45Z tim_pease $
2
+
3
+ require 'test/setup.rb'
4
+
5
+ module TestLogging
6
+
7
+ class TestAppender < Test::Unit::TestCase
8
+ include LoggingTestCase
9
+
10
+ def setup
11
+ super
12
+
13
+ ::Logging.define_levels %w(debug info warn error fatal)
14
+ @levels = ::Logging::LEVELS
15
+ @event = ::Logging::LogEvent.new('logger', @levels['debug'],
16
+ ['message'], false)
17
+ @appender = ::Logging::Appender.new 'test_appender'
18
+ end
19
+
20
+ def test_append
21
+ ary = []
22
+ @appender.instance_variable_set :@ary, ary
23
+ def @appender.write( str ) @ary << str end
24
+
25
+ assert_nothing_raised {@appender.append @event}
26
+ assert_equal "DEBUG logger : message\n", ary.pop
27
+
28
+ @appender.level = :info
29
+ @appender.append @event
30
+ assert_nil ary.pop
31
+
32
+ @event.level = @levels['info']
33
+ @appender.append @event
34
+ assert_equal " INFO logger : message\n", ary.pop
35
+
36
+ @appender.close
37
+ assert_raise(RuntimeError) {@appender.append @event}
38
+ end
39
+
40
+ def test_close
41
+ assert_equal false, @appender.closed?
42
+
43
+ @appender.close
44
+ assert_equal true, @appender.closed?
45
+ end
46
+
47
+ def test_closed_eh
48
+ assert_equal false, @appender.closed?
49
+
50
+ @appender.close
51
+ assert_equal true, @appender.closed?
52
+ end
53
+
54
+ def test_concat
55
+ ary = []
56
+ @appender.instance_variable_set :@ary, ary
57
+ def @appender.write( str ) @ary << str end
58
+
59
+ assert_nothing_raised {@appender << 'log message'}
60
+ assert_equal 'log message', ary.pop
61
+
62
+ @appender.level = :off
63
+ @appender << 'another log message'
64
+ assert_equal 'another log message', ary.pop
65
+
66
+ layout = @appender.layout
67
+ def layout.footer() 'this is the footer' end
68
+
69
+ @appender.close
70
+ assert_raise(RuntimeError) {@appender << 'log message'}
71
+ assert_equal 'this is the footer', ary.pop
72
+ end
73
+
74
+ def test_initialize
75
+ assert_raise(TypeError) {::Logging::Appender.new 'test', :layout => []}
76
+
77
+ layout = ::Logging::Layouts::Basic.new
78
+ @appender = ::Logging::Appender.new 'test', :layout => layout
79
+ assert_same layout, @appender.instance_variable_get(:@layout)
80
+ end
81
+
82
+ def test_layout
83
+ assert_instance_of ::Logging::Layouts::Basic, @appender.layout
84
+ end
85
+
86
+ def test_layout_eq
87
+ layout = ::Logging::Layouts::Basic.new
88
+ assert_not_equal layout, @appender.layout
89
+
90
+ assert_raise(TypeError) {@appender.layout = Object.new}
91
+ assert_raise(TypeError) {@appender.layout = 'not a layout'}
92
+
93
+ @appender.layout = layout
94
+ assert_same layout, @appender.layout
95
+ end
96
+
97
+ def test_level
98
+ assert_equal 0, @appender.level
99
+ end
100
+
101
+ def test_level_eq
102
+ assert_equal 0, @appender.level
103
+
104
+ assert_raise(ArgumentError) {@appender.level = -1}
105
+ assert_raise(ArgumentError) {@appender.level = 6}
106
+ assert_raise(ArgumentError) {@appender.level = Object}
107
+ assert_raise(ArgumentError) {@appender.level = 'bob'}
108
+ assert_raise(ArgumentError) {@appender.level = :wtf}
109
+
110
+ @appender.level = 'INFO'
111
+ assert_equal 1, @appender.level
112
+
113
+ @appender.level = :warn
114
+ assert_equal 2, @appender.level
115
+
116
+ @appender.level = 'error'
117
+ assert_equal 3, @appender.level
118
+
119
+ @appender.level = 4
120
+ assert_equal 4, @appender.level
121
+
122
+ @appender.level = 'off'
123
+ assert_equal 5, @appender.level
124
+
125
+ @appender.level = :all
126
+ assert_equal 0, @appender.level
127
+ end
128
+
129
+ def test_name
130
+ assert_equal 'test_appender', @appender.name
131
+ end
132
+
133
+ end # class TestAppender
134
+ end # module TestLogging
135
+
136
+ # EOF
@@ -0,0 +1,85 @@
1
+ # $Id: test_layout.rb 5 2007-01-09 23:02:57Z tim_pease $
2
+
3
+ require 'test/setup.rb'
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 'blah'
25
+ assert_equal :string, obj_format[@layout]
26
+
27
+ @layout = ::Logging::Layout.new :inspect
28
+ assert_equal :inspect, obj_format[@layout]
29
+
30
+ @layout = ::Logging::Layout.new :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> 1234', r
71
+
72
+ obj = %w( one two three four )
73
+ @layout = ::Logging::Layout.new :inspect
74
+ r = @layout.send :format_obj, obj
75
+ assert_equal '<Array> ["one", "two", "three", "four"]', r
76
+
77
+ @layout = ::Logging::Layout.new :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 TestAppender
83
+ end # module TestLogging
84
+
85
+ # EOF
@@ -0,0 +1,81 @@
1
+ # $Id: test_log_event.rb 9 2007-01-11 23:51:41Z tim_pease $
2
+
3
+ require 'test/setup.rb'
4
+
5
+ module TestLogging
6
+
7
+ class TestEvent < 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 @appender
16
+
17
+ @logger.info 'message 1', %w(a b c)
18
+ @event = @appender.event
19
+ end
20
+
21
+ def test_data
22
+ assert_equal ['message 1', %w(a b c)], @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 TestLogger
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,472 @@
1
+ # $Id: test_logger.rb 15 2007-01-15 19:03:45Z tim_pease $
2
+
3
+ require 'test/setup.rb'
4
+ require 'stringio'
5
+
6
+ module TestLogging
7
+
8
+ class TestLogger < Test::Unit::TestCase
9
+ include LoggingTestCase
10
+
11
+ def setup
12
+ super
13
+ end
14
+
15
+ def test_initialize
16
+ assert_raise(ArgumentError) {::Logging::Logger[:test]}
17
+ assert_nothing_raised {::Logging::Logger.new(Object)}
18
+ end
19
+
20
+ def test_add
21
+ log = ::Logging::Logger.new 'A'
22
+
23
+ appenders = lambda {log.instance_variable_get :@appenders}
24
+ assert_equal [], appenders[]
25
+
26
+ assert_raise(TypeError) {log.add Object.new}
27
+ assert_raise(TypeError) {log.add 'not an appender'}
28
+
29
+ a = ::Logging::Appender.new 'test_appender_1'
30
+ b = ::Logging::Appender.new 'test_appender_2'
31
+ c = ::Logging::Appender.new 'test_appender_3'
32
+
33
+ log.add a
34
+ assert_equal [a], appenders[]
35
+
36
+ log.add a
37
+ assert_equal [a], appenders[]
38
+
39
+ log.add b
40
+ assert_equal [a,b], appenders[]
41
+
42
+ log.add c
43
+ assert_equal [a,b,c], appenders[]
44
+
45
+ log.add a, c
46
+ assert_equal [a,b,c], appenders[]
47
+
48
+ log.clear
49
+ assert_equal [], appenders[]
50
+
51
+ log.add a, c
52
+ assert_equal [a,c], appenders[]
53
+ end
54
+
55
+ def test_additive
56
+ root = ::Logging::Logger.new :root
57
+ log = ::Logging::Logger.new 'A'
58
+
59
+ assert_raise(NoMethodError) {root.additive}
60
+ assert_equal true, log.additive
61
+ end
62
+
63
+ def test_additive_eq
64
+ root = ::Logging::Logger.new :root
65
+ log = ::Logging::Logger.new 'A'
66
+
67
+ assert_raise(NoMethodError) {root.additive = false}
68
+ assert_equal true, log.additive
69
+
70
+ log.additive = false
71
+ assert_equal false, log.additive
72
+ end
73
+
74
+ def test_appenders_eq
75
+ log = ::Logging::Logger.new '42'
76
+
77
+ appenders = lambda {log.instance_variable_get :@appenders}
78
+ assert_equal [], appenders[]
79
+
80
+ assert_raise(TypeError) {log.appenders = Object.new}
81
+ assert_raise(TypeError) {log.appenders = 'not an appender'}
82
+
83
+ a = ::Logging::Appender.new 'test_appender_1'
84
+ b = ::Logging::Appender.new 'test_appender_2'
85
+ c = ::Logging::Appender.new 'test_appender_3'
86
+
87
+ log.appenders = a, b, c
88
+ assert_equal [a, b, c], appenders[]
89
+
90
+ log.appenders = b
91
+ assert_equal [b], appenders[]
92
+
93
+ log.appenders = c, a, b
94
+ assert_equal [c,a,b], appenders[]
95
+
96
+ log.appenders = nil
97
+ assert_equal [], appenders[]
98
+ end
99
+
100
+ def test_class_aref
101
+ root = ::Logging::Logger[:root]
102
+ assert_same root, ::Logging::Logger[:root]
103
+
104
+ a = []
105
+ assert_same ::Logging::Logger['Array'], ::Logging::Logger[Array]
106
+ assert_same ::Logging::Logger['Array'], ::Logging::Logger[a]
107
+
108
+ assert_not_same ::Logging::Logger['Array'], ::Logging::Logger[:root]
109
+ assert_not_same ::Logging::Logger['A'], ::Logging::Logger['A::B']
110
+ end
111
+
112
+ def test_class_root
113
+ root = ::Logging::Logger[:root]
114
+ assert_same root, ::Logging::Logger.root
115
+ end
116
+
117
+ def test_clear
118
+ log = ::Logging::Logger.new 'Elliott'
119
+
120
+ appenders = lambda {log.instance_variable_get :@appenders}
121
+ assert_equal [], appenders[]
122
+
123
+ a = ::Logging::Appender.new 'test_appender_1'
124
+ b = ::Logging::Appender.new 'test_appender_2'
125
+ c = ::Logging::Appender.new 'test_appender_3'
126
+
127
+ log.add a, b, c
128
+ assert_equal [a,b,c], appenders[]
129
+
130
+ log.clear
131
+ assert_equal [], appenders[]
132
+ end
133
+
134
+ def test_concat
135
+ a1 = SioAppender.new 'a1'
136
+ a2 = SioAppender.new 'a2'
137
+ log = ::Logging::Logger.new 'A'
138
+
139
+ ::Logging::Logger[:root].add a1
140
+ assert_nil a1.readline
141
+ assert_nil a2.readline
142
+
143
+ log << "this is line one of the log file\n"
144
+ assert_equal "this is line one of the log file\n", a1.readline
145
+ assert_nil a1.readline
146
+ assert_nil a2.readline
147
+
148
+ log << "this is line two of the log file\n"
149
+ log << "this is line three of the log file\n"
150
+ assert_equal "this is line two of the log file\n", a1.readline
151
+ assert_equal "this is line three of the log file\n", a1.readline
152
+ assert_nil a1.readline
153
+ assert_nil a2.readline
154
+
155
+ log.add a2
156
+ log << "this is line four of the log file\n"
157
+ assert_equal "this is line four of the log file\n", a1.readline
158
+ assert_equal "this is line four of the log file\n", a2.readline
159
+ assert_nil a1.readline
160
+ assert_nil a2.readline
161
+
162
+ log.additive = false
163
+ log << "this is line five of the log file\n"
164
+ assert_equal "this is line five of the log file\n", a2.readline
165
+ assert_nil a1.readline
166
+ assert_nil a2.readline
167
+
168
+ log.add a1
169
+ log << "this is line six of the log file\n"
170
+ assert_equal "this is line six of the log file\n", a1.readline
171
+ assert_equal "this is line six of the log file\n", a2.readline
172
+ assert_nil a1.readline
173
+ assert_nil a2.readline
174
+ end
175
+
176
+ def test_level
177
+ root = ::Logging::Logger.new :root
178
+ log = ::Logging::Logger.new 'A'
179
+
180
+ assert_equal 0, root.level
181
+ assert_equal 0, log.level
182
+
183
+ root.level = :warn
184
+ assert_equal 2, root.level
185
+ assert_equal 0, log.level
186
+
187
+ log.level = nil
188
+ assert_equal 2, root.level
189
+ assert_equal 2, log.level
190
+
191
+ log.level = :error
192
+ assert_equal 2, root.level
193
+ assert_equal 3, log.level
194
+ end
195
+
196
+ def test_level_eq
197
+ root = ::Logging::Logger.new :root
198
+ log = ::Logging::Logger.new 'A'
199
+
200
+ assert_equal 0, root.level
201
+ assert_equal 0, log.level
202
+
203
+ assert_raise(ArgumentError) {root.level = -1}
204
+ assert_raise(ArgumentError) {root.level = 6}
205
+ assert_raise(ArgumentError) {root.level = Object}
206
+ assert_raise(ArgumentError) {root.level = 'bob'}
207
+ assert_raise(ArgumentError) {root.level = :wtf}
208
+
209
+ root.level = 'INFO'
210
+ assert_equal 1, root.level
211
+ assert_equal 0, log.level
212
+
213
+ root.level = :warn
214
+ assert_equal 2, root.level
215
+ assert_equal 0, log.level
216
+
217
+ root.level = 'error'
218
+ assert_equal 3, root.level
219
+ assert_equal 0, log.level
220
+
221
+ root.level = 4
222
+ assert_equal 4, root.level
223
+ assert_equal 0, log.level
224
+
225
+ log.level = nil
226
+ assert_equal 4, root.level
227
+ assert_equal 4, log.level
228
+
229
+ log.level = :DEBUG
230
+ assert_equal 4, root.level
231
+ assert_equal 0, log.level
232
+
233
+ log.level = :off
234
+ assert_equal 4, root.level
235
+ assert_equal 5, log.level
236
+
237
+ root.level = :all
238
+ assert_equal 0, root.level
239
+ assert_equal 5, log.level
240
+
241
+ log.level = nil
242
+ assert_equal 0, root.level
243
+ assert_equal 0, log.level
244
+
245
+ root.level = :warn
246
+ assert_equal 2, root.level
247
+ assert_equal 0, log.level
248
+
249
+ root.level = nil
250
+ assert_equal 0, root.level
251
+ assert_equal 0, log.level
252
+ end
253
+
254
+ def test_log
255
+ root = ::Logging::Logger[:root]
256
+ root.level = 'info'
257
+
258
+ a1 = SioAppender.new 'a1'
259
+ a2 = SioAppender.new 'a2'
260
+ log = ::Logging::Logger.new 'A Logger'
261
+
262
+ root.add a1
263
+ assert_nil a1.readline
264
+ assert_nil a2.readline
265
+
266
+ log.debug 'this should NOT be logged'
267
+ assert_nil a1.readline
268
+ assert_nil a2.readline
269
+
270
+ log.info 'this should be logged'
271
+ assert_equal " INFO A Logger : this should be logged\n", a1.readline
272
+ assert_nil a1.readline
273
+ assert_nil a2.readline
274
+
275
+ log.warn 'this is a warning', [1,2,3,4]
276
+ assert_equal " WARN A Logger : this is a warning\n", a1.readline
277
+ assert_equal " WARN A Logger : <Array> 1234\n", a1.readline
278
+ assert_nil a1.readline
279
+ assert_nil a2.readline
280
+
281
+ log.add a2
282
+ log.error 'an error has occurred'
283
+ assert_equal "ERROR A Logger : an error has occurred\n", a1.readline
284
+ assert_equal "ERROR A Logger : an error has occurred\n", a2.readline
285
+ assert_nil a1.readline
286
+ assert_nil a2.readline
287
+
288
+ log.additive = false
289
+ log.error 'another error has occurred'
290
+ assert_equal "ERROR A Logger : another error has occurred\n", a2.readline
291
+ assert_nil a1.readline
292
+ assert_nil a2.readline
293
+
294
+ log.add a1
295
+ log.fatal 'fatal exception'
296
+ assert_equal "FATAL A Logger : fatal exception\n", a1.readline
297
+ assert_equal "FATAL A Logger : fatal exception\n", a2.readline
298
+ assert_nil a1.readline
299
+ assert_nil a2.readline
300
+
301
+ assert_equal false, log.debug
302
+ assert_equal true, log.info
303
+ assert_equal true, log.warn
304
+ assert_equal true, log.error
305
+ assert_equal true, log.fatal
306
+
307
+ log.level = :warn
308
+ assert_equal false, log.debug
309
+ assert_equal false, log.info
310
+ assert_equal true, log.warn
311
+ assert_equal true, log.error
312
+ assert_equal true, log.fatal
313
+
314
+ assert_raise(NoMethodError) {log.critical 'this log level does not exist'}
315
+
316
+ log.warn do
317
+ str = 'a string of data'
318
+ str
319
+ end
320
+ assert_equal " WARN A Logger : a string of data\n", a1.readline
321
+ assert_equal " WARN A Logger : a string of data\n", a2.readline
322
+ assert_nil a1.readline
323
+ assert_nil a2.readline
324
+
325
+ log.info do
326
+ rb_raise(RuntimeError, "this block should not be executed")
327
+ end
328
+ assert_nil a1.readline
329
+ assert_nil a2.readline
330
+ end
331
+
332
+ def test_log_eh
333
+ ::Logging::Logger[:root].level = 'info'
334
+ log = ::Logging::Logger['A Logger']
335
+
336
+ assert_equal false, log.debug?
337
+ assert_equal true, log.info?
338
+ assert_equal true, log.warn?
339
+ assert_equal true, log.error?
340
+ assert_equal true, log.fatal?
341
+
342
+ log.level = :warn
343
+ assert_equal false, log.debug?
344
+ assert_equal false, log.info?
345
+ assert_equal true, log.warn?
346
+ assert_equal true, log.error?
347
+ assert_equal true, log.fatal?
348
+
349
+ assert_raise(NoMethodError) do
350
+ log.critical? 'this log level does not exist'
351
+ end
352
+ end
353
+
354
+ def test_name
355
+ root = ::Logging::Logger.new :root
356
+ log = ::Logging::Logger.new 'A'
357
+
358
+ assert_equal 'root', root.name
359
+ assert_equal 'A', log.name
360
+ end
361
+
362
+ def test_parent
363
+ logger = ::Logging::Logger
364
+ root = logger.new :root
365
+
366
+ assert_raise(NoMethodError) {root.parent}
367
+
368
+ assert_same root, logger['A'].parent
369
+ assert_same logger['A'], logger['A::B'].parent
370
+ assert_same logger['A::B'], logger['A::B::C::D'].parent
371
+ assert_same logger['A::B'], logger['A::B::C::E'].parent
372
+ assert_same logger['A::B'], logger['A::B::C::F'].parent
373
+
374
+ assert_same logger['A::B'], logger['A::B::C'].parent
375
+ assert_same logger['A::B::C'], logger['A::B::C::D'].parent
376
+ assert_same logger['A::B::C'], logger['A::B::C::E'].parent
377
+ assert_same logger['A::B::C'], logger['A::B::C::F'].parent
378
+
379
+ assert_same logger['A::B::C::E'], logger['A::B::C::E::G'].parent
380
+ end
381
+
382
+ def test_remove
383
+ log = ::Logging::Logger['X']
384
+
385
+ appenders = lambda {log.instance_variable_get :@appenders}
386
+ assert_equal [], appenders[]
387
+
388
+ a = ::Logging::Appender.new 'test_appender_1'
389
+ b = ::Logging::Appender.new 'test_appender_2'
390
+ c = ::Logging::Appender.new 'test_appender_3'
391
+
392
+ log.add a, b, c
393
+ assert_equal [a,b,c], appenders[]
394
+
395
+ assert_raise(TypeError) {log.remove Object.new}
396
+ assert_raise(TypeError) {log.remove 10}
397
+
398
+ log.remove b
399
+ assert_equal [a,c], appenders[]
400
+
401
+ log.remove 'test_appender_1'
402
+ assert_equal [c], appenders[]
403
+
404
+ log.remove c
405
+ assert_equal [], appenders[]
406
+
407
+ log.remove a, b, c
408
+ assert_equal [], appenders[]
409
+
410
+ log.add a, b, c
411
+ assert_equal [a,b,c], appenders[]
412
+
413
+ log.remove a, c
414
+ assert_equal [b], appenders[]
415
+ end
416
+
417
+ def test_spaceship
418
+ logs = %w(
419
+ A A::B A::B::C A::B::C::D A::B::C::E A::B::C::E::G A::B::C::F
420
+ ).map {|x| ::Logging::Logger[x]}
421
+ logs.unshift ::Logging::Logger[:root]
422
+
423
+ logs.inject do |a,b|
424
+ assert_equal(-1, a <=> b, "'#{a.name}' <=> '#{b.name}'")
425
+ b
426
+ end
427
+
428
+ assert_equal 1, logs[1] <=> ::Logging::Logger[:root]
429
+ assert_raise(ArgumentError) {logs[1] <=> Object.new}
430
+ assert_raise(ArgumentError) {::Logging::Logger[:root] <=> 'string'}
431
+ end
432
+
433
+ def test_trace
434
+ log = ::Logging::Logger[:root]
435
+ assert_equal false, log.trace
436
+
437
+ log.trace = true
438
+ assert_equal true, log.trace
439
+
440
+ log = ::Logging::Logger['A']
441
+ assert_equal false, log.trace
442
+
443
+ log.trace = true
444
+ assert_equal true, log.trace
445
+ end
446
+
447
+ end # class TestLogger
448
+
449
+ class SioAppender < ::Logging::Appenders::IO
450
+
451
+ def initialize( name, opts = {} )
452
+ @sio = StringIO.new
453
+ super(name, @sio, opts)
454
+ begin readline rescue EOFError end
455
+ end
456
+
457
+ def readline
458
+ @pos ||= 0
459
+ @sio.seek @pos
460
+ begin
461
+ line = @sio.readline
462
+ @pos = @sio.tell
463
+ line
464
+ rescue EOFError
465
+ nil
466
+ end
467
+ end
468
+
469
+ end # class SioAppender
470
+ end # module TestLogging
471
+
472
+ # EOF