minitest-logger 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.
- checksums.yaml +7 -0
- data/examples/example_assertions.rb +104 -0
- data/examples/example_specification.rb +69 -0
- data/lib/minitest-logger.rb +249 -0
- data/lib/minitest/log4r.rb +32 -0
- data/lib/minitest/logger.rb +55 -0
- data/rakefile_minitest-logger.rb +104 -0
- data/unittest/test_load_minitest-logger.rb +14 -0
- data/unittest/test_minitest-log4r.rb +93 -0
- data/unittest/test_minitest-logger.rb +147 -0
- metadata +75 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d51ed75e12126c8c39f3f715b74a00244cc19082
|
4
|
+
data.tar.gz: 062e383d2514d4aee2abe2c3ad6f3dfdc5d0e6cd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2503ff04c3bcb419ecd9c44faf9d81a770be1955c032eda5d5446d197b9a2aea7a8ac090ee375f51e325775fdf24d43a1172778568b443ae6035fbf2f6afaa21
|
7
|
+
data.tar.gz: 9f2ce36be94e06bf4d645f390075a607e78a5b6fc48f7ea95970edeb7c9b65f80a5b855af2c4772cc028e284e0d607a0d702e287ee20c9feedcd3f5e35916c84
|
@@ -0,0 +1,104 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin rdoc
|
3
|
+
Example for usage of gem minitest-logger.
|
4
|
+
|
5
|
+
See also the unit tests for more variants.
|
6
|
+
=end
|
7
|
+
|
8
|
+
=begin
|
9
|
+
You may use two different loggers:
|
10
|
+
=end
|
11
|
+
require 'log4r'
|
12
|
+
require 'logger'
|
13
|
+
|
14
|
+
$:.unshift('../lib')
|
15
|
+
require 'minitest-logger'
|
16
|
+
|
17
|
+
=begin rdoc
|
18
|
+
Example of the usage of Minitest-Logger-Gem.
|
19
|
+
|
20
|
+
Module TestExamples defined testcases to be used with Logger and Log4r::Logger-instances.
|
21
|
+
|
22
|
+
The methods expect an attribute @log.
|
23
|
+
=end
|
24
|
+
module TestExamples
|
25
|
+
|
26
|
+
#Test if logger output is made
|
27
|
+
#
|
28
|
+
#The Methods #test_output_1, #test_output_2 and #test_output_3 are the same test
|
29
|
+
#with different method to define a string
|
30
|
+
def test_output_1
|
31
|
+
assert_log(" INFO log: Hello World\n"){ @log.info("Hello World") }
|
32
|
+
end
|
33
|
+
#See #test_output_1
|
34
|
+
def test_output_2
|
35
|
+
assert_log(<<LOG ){ @log.info("Hello World") }
|
36
|
+
INFO log: Hello World
|
37
|
+
LOG
|
38
|
+
end
|
39
|
+
#See #test_output_1
|
40
|
+
def test_output_3
|
41
|
+
assert_log(<<LOG
|
42
|
+
INFO log: Hello World
|
43
|
+
LOG
|
44
|
+
){ @log.info("Hello World") }
|
45
|
+
end
|
46
|
+
#Test the logger message with a regexp.
|
47
|
+
#
|
48
|
+
#This may be usefull for logger messages with timestamps.
|
49
|
+
def test_output_regex
|
50
|
+
assert_log(/Hello World/){ @log.info("Hello World") }
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_output_with_comment
|
54
|
+
assert_log(" INFO log: Hello World\n"){ @log.info("Hello World") }
|
55
|
+
assert_log(" INFO log: Hello World\n", 'This Logger logs unexpected messages'){ @log.info("Hello World") }
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
def test_no_message # :nodoc:
|
60
|
+
assert_log(nil){ @log.debug("Hello World") }
|
61
|
+
assert_log(nil, 'Log is not silent'){ @log.debug("Hello World")}
|
62
|
+
end
|
63
|
+
|
64
|
+
#test for (non) silent logger
|
65
|
+
def test_silent
|
66
|
+
assert_silent_log(){
|
67
|
+
@log.debug("Hello World")
|
68
|
+
#~ @log.info("Hello World") #uncomment this to see a failure
|
69
|
+
}
|
70
|
+
refute_silent_log(){
|
71
|
+
@log.warn("Hello World") #comment this to see a failure
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
=begin rdoc
|
76
|
+
Make tests of Module TestExamples with Log4r::Logger-instance.
|
77
|
+
=end
|
78
|
+
class Test_log4r < MiniTest::Test
|
79
|
+
include TestExamples
|
80
|
+
def setup # :nodoc:
|
81
|
+
@log = Log4r::Logger.new('log')
|
82
|
+
@log.level = Log4r::INFO
|
83
|
+
#~ @log.level = Log4r::WARN
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
=begin rdoc
|
88
|
+
Make tests of Module TestExamples with Logger-instance.
|
89
|
+
=end
|
90
|
+
class Test_logger < MiniTest::Test
|
91
|
+
include TestExamples
|
92
|
+
def setup # :nodoc:
|
93
|
+
#~ @log = Logger.new(STDOUT)
|
94
|
+
@log = Logger.new(IO.new(File::RDONLY,'w'))
|
95
|
+
@log.level = Logger::INFO
|
96
|
+
#Adapt logger output to Log4r-format. So we can reuses the testcases in TestExamples
|
97
|
+
@log.formatter = proc{ |serverity, time, progname, msg|
|
98
|
+
"%5s log: %s\n" % [serverity, msg]
|
99
|
+
}
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end #module TestExamples
|
103
|
+
|
104
|
+
__END__
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin rdoc
|
3
|
+
Tests for minitest-logger
|
4
|
+
=end
|
5
|
+
$:.unshift('../lib')
|
6
|
+
|
7
|
+
require 'log4r'
|
8
|
+
require 'logger'
|
9
|
+
require 'minitest-logger'
|
10
|
+
|
11
|
+
=begin
|
12
|
+
Log4r::Logger
|
13
|
+
=end
|
14
|
+
describe Log4r::Logger do
|
15
|
+
before do
|
16
|
+
@log = Log4r::Logger.new('log')
|
17
|
+
@log.level = Log4r::INFO
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "When a debug-message is posted" do
|
21
|
+
it "must not be reported" do
|
22
|
+
lambda{ @log.debug('Hello World') }.must_log(nil)
|
23
|
+
end
|
24
|
+
it "must not be reported, even if we set the level to debug" do
|
25
|
+
lambda{ @log.debug('Hello World')}.must_log( nil, :level => Log4r::DEBUG)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "When a info-message is posted" do
|
30
|
+
it "must be reported" do
|
31
|
+
lambda{ @log.info('Hello World')}.must_log( " INFO log: Hello World\n", :level => Log4r::INFO)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "must be not reported if we set the level to warn" do
|
35
|
+
lambda{ @log.info('Hello World')}.must_log( nil, :level => Log4r::WARN)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
=begin
|
42
|
+
Logger
|
43
|
+
=end
|
44
|
+
describe Logger do
|
45
|
+
before do
|
46
|
+
@log = Logger.new('log')
|
47
|
+
@log.level = Logger::INFO
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "When a debug-message is posted" do
|
51
|
+
it "must not be reported" do
|
52
|
+
lambda{ @log.debug('Hello World') }.must_log(nil)
|
53
|
+
end
|
54
|
+
it "must not be reported, even if we set the level to debug" do
|
55
|
+
lambda{ @log.debug('Hello World')}.must_log( nil, :level => Logger::DEBUG)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "When a info-message is posted" do
|
60
|
+
it "must be reported" do
|
61
|
+
lambda{ @log.info('Hello World')}.must_log( /I, \[.*\] INFO -- : Hello World\n/, :level => Logger::INFO)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "must be not reported if we set the level to warn" do
|
65
|
+
lambda{ @log.info('Hello World')}.must_log( nil, :level => Logger::WARN)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,249 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin rdoc
|
3
|
+
Gem Minitest-Logger-Gem is the result of a question at Stackoverflow:
|
4
|
+
http://stackoverflow.com/questions/29392292/how-can-i-test-logger-messages-with-minitest
|
5
|
+
|
6
|
+
It extends Minitest::Test by Minitest::Assertion#assert_log.
|
7
|
+
|
8
|
+
With Minitest::Assertion#assert_log you can check,
|
9
|
+
if you get the Logger-messages you expect.
|
10
|
+
|
11
|
+
|
12
|
+
=Usage
|
13
|
+
==Load the gem
|
14
|
+
There are 3 methods to load the gem:
|
15
|
+
|
16
|
+
If you use Log4r:
|
17
|
+
|
18
|
+
require 'minitest/log4r'
|
19
|
+
|
20
|
+
If you use Logger:
|
21
|
+
|
22
|
+
require 'minitest/logger'
|
23
|
+
|
24
|
+
Alterative you can use - after you required log4r and/or logger:
|
25
|
+
|
26
|
+
require 'minitest-logger'
|
27
|
+
|
28
|
+
==Make a testcase
|
29
|
+
|
30
|
+
During Test#setup you must define @log, then you can test the logs.
|
31
|
+
|
32
|
+
class Test_log4r < MiniTest::Test
|
33
|
+
def setup
|
34
|
+
@log = Log4r::Logger.new('log')
|
35
|
+
@log.level = Log4r::INFO
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_logger
|
39
|
+
assert_log(" INFO log: Hello World\n"){ @log.info("Hello World") }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
More details see examples/example_minitest-logger.rb and the unit tests.
|
44
|
+
|
45
|
+
==Make Specifications
|
46
|
+
Example:
|
47
|
+
|
48
|
+
describe Log4r::Logger do
|
49
|
+
before do
|
50
|
+
@log = Log4r::Logger.new('log')
|
51
|
+
@log.level = Log4r::INFO
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "When a info-message is posted" do
|
55
|
+
it "must be reported" do
|
56
|
+
lambda{ @log.info('Hello World')}.must_log( " INFO log: Hello World\n", :level => Log4r::INFO)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "must be not reported if we set the level to warn" do
|
60
|
+
lambda{ @log.info('Hello World')}.must_log( nil, :level => Log4r::WARN)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
More details see examples and the unit tests.
|
66
|
+
|
67
|
+
=Related stuff
|
68
|
+
|
69
|
+
You may also be interested in:
|
70
|
+
* http://9astronauts.com/code/rails-plugins/testable-logger/
|
71
|
+
=end
|
72
|
+
|
73
|
+
gem 'minitest'
|
74
|
+
require 'minitest/autorun'
|
75
|
+
|
76
|
+
=begin rdoc
|
77
|
+
Check if Log4r or Logger is available.
|
78
|
+
|
79
|
+
If yes, load the corresponding minitest version.
|
80
|
+
=end
|
81
|
+
if Object.const_defined? 'Log4r'
|
82
|
+
require_relative 'minitest/log4r'
|
83
|
+
end
|
84
|
+
if Object.const_defined? 'Logger'
|
85
|
+
require_relative 'minitest/logger'
|
86
|
+
end
|
87
|
+
|
88
|
+
if ! ( Object.const_defined? 'Log4r' or Object.const_defined? 'Logger')
|
89
|
+
raise LoadError, <<msg
|
90
|
+
No Logger defined.
|
91
|
+
Load first log4r/logger or use
|
92
|
+
require 'minitest/log4r'
|
93
|
+
or
|
94
|
+
require 'minitest/logger"
|
95
|
+
msg
|
96
|
+
end
|
97
|
+
|
98
|
+
module Minitest
|
99
|
+
=begin rdoc
|
100
|
+
It is recommended to define the logger in Minitest::Test#setup:
|
101
|
+
|
102
|
+
Example:
|
103
|
+
|
104
|
+
class Test_logger < MiniTest::Test
|
105
|
+
def setup # :nodoc:
|
106
|
+
@testee = Testee.new(...)
|
107
|
+
@log = @testee.log
|
108
|
+
end
|
109
|
+
...
|
110
|
+
end
|
111
|
+
=end
|
112
|
+
class Test
|
113
|
+
#define the logger for Assertions#assert_log.
|
114
|
+
#It is recommended to define the logger in #setup or as an option of Assertions#assert_log
|
115
|
+
attr_accessor :log
|
116
|
+
end
|
117
|
+
|
118
|
+
Logger_VERSION = '0.1.0'
|
119
|
+
module Assertions
|
120
|
+
=begin rdoc
|
121
|
+
Evaluate block and collect the messages of a logger.
|
122
|
+
|
123
|
+
==Argument level:
|
124
|
+
This enables you to test less messages (e.g. only errors) without the need
|
125
|
+
of adapt the logger itself.
|
126
|
+
|
127
|
+
Attention: The level of the logger has a higher priority the the level of the outputter.
|
128
|
+
If the logger logs no DEBUG-messages, the output will also be empty,
|
129
|
+
independent of the value of this parameter.
|
130
|
+
=end
|
131
|
+
def logger_evaluation(log, level=nil)
|
132
|
+
raise ArgumentError unless defined? log
|
133
|
+
raise ArgumentError unless block_given?
|
134
|
+
|
135
|
+
case log.class.to_s
|
136
|
+
when 'Log4r::Logger'
|
137
|
+
log.outputters << outputter = Log4r::StringOutputter.new('stringoutputter')
|
138
|
+
outputter.level = level if level
|
139
|
+
when 'Logger'
|
140
|
+
log.catch_messages(level)
|
141
|
+
end
|
142
|
+
yield #call block to get messages
|
143
|
+
case log.class.to_s
|
144
|
+
when 'Log4r::Logger'
|
145
|
+
logtext = outputter.flush
|
146
|
+
when 'Logger'
|
147
|
+
logtext = log.catch_messages_stop()
|
148
|
+
end
|
149
|
+
return logtext
|
150
|
+
end #logger_evaluation
|
151
|
+
=begin rdoc
|
152
|
+
|
153
|
+
==Options
|
154
|
+
===Define test logger (:log)
|
155
|
+
With option :log you can define or replace the logger to test.
|
156
|
+
|
157
|
+
It is recommended to define the logger during setup in Minitest::Test.
|
158
|
+
|
159
|
+
===Define log level (:level)
|
160
|
+
With option :level you can set an alternative level for the test.
|
161
|
+
|
162
|
+
See also #logger_evaluation for more information
|
163
|
+
|
164
|
+
==Examples
|
165
|
+
|
166
|
+
assert_log(" INFO log: Hello World\n"){ @log.info("Hello World") }
|
167
|
+
assert_log(" INFO log: Hello World\n", :log => @log){ @log.info("Hello World") }
|
168
|
+
assert_log(" INFO log: Hello World\n", :level => Log4r::INFO){ @log.info("Hello World") }
|
169
|
+
assert_log(nil, :level => Log4r::WARN){ @log.info("Hello World") }
|
170
|
+
|
171
|
+
|
172
|
+
msg = message(msg, E) { diff exp, act }
|
173
|
+
assert exp == act, msg
|
174
|
+
|
175
|
+
=end
|
176
|
+
|
177
|
+
def assert_log(expected, msg=nil, options = {}, &block)
|
178
|
+
if msg.is_a?(Hash)
|
179
|
+
options = msg
|
180
|
+
msg = nil
|
181
|
+
end
|
182
|
+
|
183
|
+
logtext = logger_evaluation(options[:log] || @log, options[:level], &block)
|
184
|
+
|
185
|
+
err_msg = Regexp === expected ? :assert_match : :assert_equal
|
186
|
+
send err_msg, expected, logtext, message(msg) { "Logger #{options[:log] || @log} logs unexpected messages" }
|
187
|
+
end
|
188
|
+
=begin rdoc
|
189
|
+
Test for silent log (No messages are returned).
|
190
|
+
|
191
|
+
For details on options see #assert_log and #logger_evaluation
|
192
|
+
=end
|
193
|
+
def assert_silent_log(msg=nil, options = {}, &block)
|
194
|
+
if msg.is_a?(Hash)
|
195
|
+
options = msg
|
196
|
+
msg = nil
|
197
|
+
end
|
198
|
+
|
199
|
+
logtext = logger_evaluation(options[:log] || @log, options[:level], &block)
|
200
|
+
assert !logtext, message(msg) { "Expected #{options[:log] || @log} to be silent, but returned\n #{mu_pp(logtext)}" }
|
201
|
+
end
|
202
|
+
=begin rdoc
|
203
|
+
Test for silent log (No messages are returned)
|
204
|
+
|
205
|
+
For details on options see #assert_log and #logger_evaluation
|
206
|
+
=end
|
207
|
+
def refute_silent_log(msg=nil, options = {}, &block)
|
208
|
+
if msg.is_a?(Hash)
|
209
|
+
options = msg
|
210
|
+
msg = nil
|
211
|
+
end
|
212
|
+
logtext = logger_evaluation(options[:log] || @log, options[:level], &block)
|
213
|
+
|
214
|
+
assert logtext, message(msg) { "Expected #{options[:log] || @log} not to be silent" }
|
215
|
+
end #assert_silent_log
|
216
|
+
|
217
|
+
end #module Assertions
|
218
|
+
|
219
|
+
=begin rdoc
|
220
|
+
Tests via Specs.
|
221
|
+
=end
|
222
|
+
module Expectations
|
223
|
+
##
|
224
|
+
# See Minitest::Assertions#assert_log
|
225
|
+
#
|
226
|
+
# Usage:
|
227
|
+
# lambda { ... }.must_log( messagestring [, options])
|
228
|
+
#
|
229
|
+
# :method: must_log
|
230
|
+
infect_an_assertion :assert_log, :must_log
|
231
|
+
##
|
232
|
+
# See Minitest::Assertions#assert_silent_log
|
233
|
+
#
|
234
|
+
# Usage:
|
235
|
+
# lambda { ... }.must_silent_log( messagestring [, options])
|
236
|
+
#
|
237
|
+
# :method: must_silent_log
|
238
|
+
infect_an_assertion :assert_silent_log, :must_silent_log
|
239
|
+
##
|
240
|
+
# See Minitest::Assertions#refute_silent_log
|
241
|
+
#
|
242
|
+
# Usage:
|
243
|
+
# lambda { ... }.must_not_silent_log( messagestring [, options])
|
244
|
+
#
|
245
|
+
# :method: must_not_silent_log
|
246
|
+
infect_an_assertion :refute_silent_log, :must_not_silent_log
|
247
|
+
end #module Expectations
|
248
|
+
end #Minitest
|
249
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin rdoc
|
3
|
+
Extend Minitest with tests for log4r.
|
4
|
+
=end
|
5
|
+
|
6
|
+
require 'log4r' #
|
7
|
+
require_relative '../minitest-logger'
|
8
|
+
|
9
|
+
module Log4r
|
10
|
+
=begin rdoc
|
11
|
+
Define a new Log4r-outputter to catch data into an String.
|
12
|
+
=end
|
13
|
+
class StringOutputter < Log4r::StdoutOutputter
|
14
|
+
=begin rdoc
|
15
|
+
Collect messages in array.
|
16
|
+
=end
|
17
|
+
def write(message)
|
18
|
+
@messages ||= '' #create with first call
|
19
|
+
@messages << message
|
20
|
+
end
|
21
|
+
=begin rdoc
|
22
|
+
Clear message string and return messages.
|
23
|
+
=end
|
24
|
+
def flush
|
25
|
+
@messages ||= '' #create with first call
|
26
|
+
messages = @messages.dup
|
27
|
+
@messages = ''
|
28
|
+
messages.empty? ? nil : messages
|
29
|
+
end
|
30
|
+
end #ArrayOutputter
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin rdoc
|
3
|
+
Extend Logger with features to catch messages.
|
4
|
+
=end
|
5
|
+
|
6
|
+
require 'logger' #
|
7
|
+
require_relative '../minitest-logger'
|
8
|
+
|
9
|
+
=begin rdoc
|
10
|
+
Extend Logger by #catch_messages and #catch_messages_stop to
|
11
|
+
store logger messages for later evaluation.
|
12
|
+
Idea based on http://stackoverflow.com/a/12658810/676874
|
13
|
+
|
14
|
+
This is used for Logger-instances in Minitest::Assertions#assert_log
|
15
|
+
|
16
|
+
=end
|
17
|
+
class Logger
|
18
|
+
# Collect all messages for later evaluation.
|
19
|
+
def catch_messages(level)
|
20
|
+
@logdev.catch_messages(level)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Stop message collection and retund the collected messages.
|
24
|
+
def catch_messages_stop()
|
25
|
+
@logdev.catch_messages_stop()
|
26
|
+
end
|
27
|
+
|
28
|
+
class LogDevice # :nodoc:
|
29
|
+
|
30
|
+
# Define a String to collect messages.
|
31
|
+
def catch_messages(level)
|
32
|
+
@catchlevel = level
|
33
|
+
@messages = ''
|
34
|
+
end
|
35
|
+
|
36
|
+
# Stop message collection and retund the collected messages.
|
37
|
+
def catch_messages_stop()
|
38
|
+
messages = @messages
|
39
|
+
@messages = nil
|
40
|
+
messages.empty? ? nil : messages
|
41
|
+
end
|
42
|
+
|
43
|
+
LEVELS = %w{debug info warn error fatal unknown}
|
44
|
+
alias_method :old_write, :write
|
45
|
+
#Store messages also in @messages if requested.
|
46
|
+
def write(message)
|
47
|
+
#check level with @catchlevel
|
48
|
+
if @messages
|
49
|
+
caller[1] =~ /`(.+?)'\Z/
|
50
|
+
@messages << message if !@catchlevel or @catchlevel <= LEVELS.index($1)
|
51
|
+
end
|
52
|
+
old_write(message)
|
53
|
+
end
|
54
|
+
end #LogDevice
|
55
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin
|
3
|
+
Create gem minitest-logger
|
4
|
+
|
5
|
+
Idea for further development:
|
6
|
+
Collect only errors/warnings....:
|
7
|
+
+ assert_error
|
8
|
+
+ assert_warn
|
9
|
+
|
10
|
+
=end
|
11
|
+
require 'knut-gempackager'
|
12
|
+
|
13
|
+
require '../knut_pw.rb'
|
14
|
+
$:.unshift('lib')
|
15
|
+
require 'minitest-logger'
|
16
|
+
$minitest_logger_version = "0.1.0"
|
17
|
+
|
18
|
+
#http://docs.rubygems.org/read/chapter/20
|
19
|
+
gem_minitest_logger = Knut::Gem_packer.new('minitest-logger', $minitest_logger_version){ |gemdef, s|
|
20
|
+
s.name = "minitest-logger"
|
21
|
+
s.version = $minitest_logger_version
|
22
|
+
s.author = "Knut Lickert"
|
23
|
+
s.email = "knut@lickert.net"
|
24
|
+
#~ s.homepage = "http://ruby.lickert.net/minitest-logger"
|
25
|
+
#~ s.homepage = "http://gems.rubypla.net/minitest-logger"
|
26
|
+
#~ s.rubyforge_project = 'minitest-logger'
|
27
|
+
s.platform = Gem::Platform::RUBY
|
28
|
+
#~ s.required_ruby_version = '>= 1.9'
|
29
|
+
#~ s.license = '?'
|
30
|
+
s.summary = "Extend minitest by assert_log"
|
31
|
+
s.description = <<-DESCR
|
32
|
+
Extend minitest by assert_log and enable minitest to test log messages.
|
33
|
+
Supports Logger and Log4r::Logger.
|
34
|
+
DESCR
|
35
|
+
s.require_path = "lib"
|
36
|
+
s.files = %w{
|
37
|
+
rakefile_minitest-logger.rb
|
38
|
+
lib/minitest-logger.rb
|
39
|
+
lib/minitest/log4r.rb
|
40
|
+
lib/minitest/logger.rb
|
41
|
+
examples/example_assertions.rb
|
42
|
+
examples/example_specification.rb
|
43
|
+
}
|
44
|
+
s.test_files = %w{
|
45
|
+
unittest/test_load_minitest-logger.rb
|
46
|
+
unittest/test_minitest-logger.rb
|
47
|
+
unittest/test_minitest-log4r.rb
|
48
|
+
}
|
49
|
+
#~ s.test_files << Dir['unittest/expected/*']
|
50
|
+
s.test_files.flatten!
|
51
|
+
|
52
|
+
#~ s.bindir = "bin"
|
53
|
+
#~ s.executables << 'minitest-logger.rb'
|
54
|
+
|
55
|
+
s.rdoc_options << '--main lib/minitest-logger.rb'
|
56
|
+
s.rdoc_options << '--title "Rdoc: Minitest-logger"'
|
57
|
+
s.extra_rdoc_files = %w{
|
58
|
+
examples/example_assertions.rb
|
59
|
+
examples/example_specification.rb
|
60
|
+
}
|
61
|
+
|
62
|
+
#~ s.add_dependency('')
|
63
|
+
s.add_dependency('minitest','>= 0') #tested with "5.5.1" (rb1.9.3 + rb 2.1.5)
|
64
|
+
#~ s.add_dependency('log4r')
|
65
|
+
|
66
|
+
#~ s.add_development_dependency()
|
67
|
+
s.requirements << 'Log4r or Logger'
|
68
|
+
|
69
|
+
gemdef.public = true
|
70
|
+
#~ gemdef.add_ftp_connection('ftp.rubypla.net', Knut::FTP_RUBYPLANET_USER, Knut::FTP_RUBYPLANET_PW, "/Ruby/gemdocs/minitest-logger/#{$minitest_logger_version}")
|
71
|
+
|
72
|
+
gemdef.define_test( 'unittest', FileList['test_load*.rb'])
|
73
|
+
gemdef.define_test( 'unittest', FileList['test_minitest*.rb'])
|
74
|
+
gemdef.versions << Minitest::Logger_VERSION
|
75
|
+
|
76
|
+
}
|
77
|
+
|
78
|
+
#generate rdoc
|
79
|
+
task :rdoc_local do
|
80
|
+
FileUtils.rm_r('doc') if File.exist?('doc')
|
81
|
+
cmd = ["rdoc -f hanna"]
|
82
|
+
cmd << gem_minitest_logger.spec.lib_files
|
83
|
+
cmd << gem_minitest_logger.spec.extra_rdoc_files
|
84
|
+
cmd << gem_minitest_logger.spec.rdoc_options
|
85
|
+
`#{cmd.join(' ')}`
|
86
|
+
end
|
87
|
+
|
88
|
+
#~ desc "Gem minitest-logger"
|
89
|
+
#~ task :default => :check
|
90
|
+
#~ task :default => :test
|
91
|
+
#~ task :default => :gem
|
92
|
+
#~ task :default => :install
|
93
|
+
#~ task :default => :hanna
|
94
|
+
#~ task :default => :rdoc_local
|
95
|
+
#~ task :default => :links
|
96
|
+
#~ task :default => :ftp_rdoc
|
97
|
+
task :default => :push
|
98
|
+
|
99
|
+
|
100
|
+
if $0 == __FILE__
|
101
|
+
app = Rake.application
|
102
|
+
app[:default].invoke
|
103
|
+
end
|
104
|
+
__END__
|
@@ -0,0 +1,14 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin rdoc
|
3
|
+
Tests for minitest-logger
|
4
|
+
=end
|
5
|
+
gem 'minitest'
|
6
|
+
require 'minitest/autorun'
|
7
|
+
|
8
|
+
$:.unshift('../lib')
|
9
|
+
|
10
|
+
class Test_minitest_logger < MiniTest::Test
|
11
|
+
def test_load
|
12
|
+
assert_raises(LoadError){ require 'minitest-logger'}
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin rdoc
|
3
|
+
Tests for minitest-logger
|
4
|
+
=end
|
5
|
+
gem 'minitest'
|
6
|
+
require 'minitest/autorun'
|
7
|
+
|
8
|
+
$:.unshift('../lib')
|
9
|
+
#~ require 'log4r'
|
10
|
+
#~ require 'minitest-logger'
|
11
|
+
require 'minitest/log4r'
|
12
|
+
|
13
|
+
class Test_minitest_log4r < MiniTest::Test
|
14
|
+
def setup
|
15
|
+
@log = Log4r::Logger.new('log')
|
16
|
+
@log.level = Log4r::INFO
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_silent
|
20
|
+
assert_silent{ @log.debug("hello world") }
|
21
|
+
assert_log(nil){ @log.debug("Hello World") }
|
22
|
+
end
|
23
|
+
def test_default_level
|
24
|
+
assert_log(" INFO log: Hello World\n"){ @log.info("Hello World") }
|
25
|
+
assert_log(" INFO log: Hello World\n WARN log: Hello World\n"){
|
26
|
+
@log.debug("Hello World")
|
27
|
+
@log.info("Hello World")
|
28
|
+
@log.warn("Hello World")
|
29
|
+
}
|
30
|
+
end
|
31
|
+
def test_warn
|
32
|
+
assert_log(" WARN log: Hello World\n", :level => Log4r::WARN){
|
33
|
+
@log.debug("Hello World") #catched by logger-level
|
34
|
+
@log.info("Hello World") #catched by outputter-level
|
35
|
+
@log.warn("Hello World")
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_regexp
|
40
|
+
assert_log(/Hello World/){ @log.info("Hello World") }
|
41
|
+
assert_log(/Hello/){ @log.info("Hello World") }
|
42
|
+
assert_log(/World/){ @log.info("Hello World") }
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_silent
|
46
|
+
assert_silent_log(){@log.debug("Hello World") }
|
47
|
+
assert_silent_log(:level => Log4r::ERROR){@log.warn("Hello World") }
|
48
|
+
end
|
49
|
+
def test_not_silent
|
50
|
+
refute_silent_log(){ @log.info("Hello World") }
|
51
|
+
refute_silent_log(){ @log.warn("Hello World") }
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
=begin
|
57
|
+
Same with Specifications
|
58
|
+
=end
|
59
|
+
describe Log4r::Logger do
|
60
|
+
before do
|
61
|
+
@log = Log4r::Logger.new('log')
|
62
|
+
@log.level = Log4r::INFO
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "When a debug-message is posted" do
|
66
|
+
it "must not be reported" do
|
67
|
+
lambda{ @log.debug('Hello World') }.must_log(nil)
|
68
|
+
end
|
69
|
+
it "must not be reported, even if we set the level to debug" do
|
70
|
+
lambda{ @log.debug('Hello World')}.must_log( nil, :level => Log4r::DEBUG)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "When a info-message is posted" do
|
75
|
+
it "must be reported" do
|
76
|
+
lambda{ @log.info('Hello World')}.must_log( " INFO log: Hello World\n")
|
77
|
+
end
|
78
|
+
|
79
|
+
it "must be not reported if we set the level to warn" do
|
80
|
+
lambda{ @log.info('Hello World')}.must_log( nil, :level => Log4r::WARN)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "the logger must not be silent" do
|
84
|
+
lambda{ @log.info('Hello World')}.must_not_silent_log()
|
85
|
+
end
|
86
|
+
|
87
|
+
it "the logger must be silent on level warn" do
|
88
|
+
lambda{ @log.info('Hello World')}.must_silent_log(:level => Log4r::WARN)
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin rdoc
|
3
|
+
Tests for minitest-logger
|
4
|
+
=end
|
5
|
+
gem 'minitest'
|
6
|
+
require 'minitest/autorun'
|
7
|
+
|
8
|
+
$:.unshift('../lib')
|
9
|
+
#~ require 'logger'
|
10
|
+
#~ require 'minitest-logger'
|
11
|
+
require 'minitest/logger'
|
12
|
+
|
13
|
+
class Test_minitest_logger_with_Logger_format < MiniTest::Test
|
14
|
+
|
15
|
+
def setup
|
16
|
+
@log = Logger.new(IO.new(File::RDONLY,'w'))
|
17
|
+
@log.level = Logger::INFO
|
18
|
+
#Same format as Logger
|
19
|
+
@log.formatter = proc{ |serverity, time, progname, msg|
|
20
|
+
"%5s log: %s\n" % [serverity, msg]
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_silent
|
25
|
+
assert_silent{ @log.debug("hello world") }
|
26
|
+
assert_log(nil){ @log.debug("Hello World") }
|
27
|
+
end
|
28
|
+
def test_default_level
|
29
|
+
assert_log(" INFO log: Hello World\n"){ @log.info("Hello World") }
|
30
|
+
assert_log(" INFO log: Hello World\n WARN log: Hello World\n"){
|
31
|
+
@log.debug("Hello World")
|
32
|
+
@log.info("Hello World")
|
33
|
+
@log.warn("Hello World")
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_warn
|
38
|
+
assert_log(" WARN log: Hello World\n", :level => Logger::WARN){
|
39
|
+
@log.debug("Hello World") #catched by logger-level
|
40
|
+
@log.info("Hello World")
|
41
|
+
@log.warn("Hello World")
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_regexp
|
46
|
+
assert_log(/Hello World/){ @log.info("Hello World") }
|
47
|
+
assert_log(/Hello/){ @log.info("Hello World") }
|
48
|
+
assert_log(/World/){ @log.info("Hello World") }
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_silent
|
52
|
+
assert_silent_log(){@log.debug("Hello World") }
|
53
|
+
assert_silent_log(:level => Logger::ERROR){@log.warn("Hello World") }
|
54
|
+
end
|
55
|
+
def test_not_silent
|
56
|
+
refute_silent_log(){ @log.info("Hello World") }
|
57
|
+
refute_silent_log(){ @log.warn("Hello World") }
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
=begin rdoc
|
63
|
+
Logger-messages contain the actual date/time.
|
64
|
+
|
65
|
+
So it may be a good idea to use regexp.
|
66
|
+
=end
|
67
|
+
class Test_minitest_logger < MiniTest::Test
|
68
|
+
|
69
|
+
def setup
|
70
|
+
@log = Logger.new(IO.new(File::RDONLY,'w'))
|
71
|
+
@log.level = Logger::INFO
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_silent
|
75
|
+
assert_silent{ @log.debug("hello world") }
|
76
|
+
assert_log(nil){ @log.debug("Hello World") }
|
77
|
+
end
|
78
|
+
def test_default_level
|
79
|
+
assert_log(/I, \[.*\] INFO -- : Hello World\n/){ @log.info("Hello World") }
|
80
|
+
assert_log(/I, \[.*\] INFO -- : Hello World\nW, \[.*\] WARN -- : Hello World\n/){
|
81
|
+
@log.debug("Hello World")
|
82
|
+
@log.info("Hello World")
|
83
|
+
@log.warn("Hello World")
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_warn
|
88
|
+
assert_log(/W, \[.*\] WARN -- : Hello World\n/, :level => Logger::WARN){
|
89
|
+
@log.debug("Hello World") #catched by logger-level
|
90
|
+
@log.info("Hello World")
|
91
|
+
@log.warn("Hello World")
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_with_date_and_pid
|
96
|
+
#This test may fail, if the processor is too slow.
|
97
|
+
assert_log(
|
98
|
+
Time.now.strftime("I, [%Y-%m-%dT%H:%M:%S.%6N ##{Process.pid}] INFO -- : Hello World\n")
|
99
|
+
){
|
100
|
+
@log.info("Hello World")
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
=begin
|
108
|
+
Same with Specifications
|
109
|
+
=end
|
110
|
+
describe Logger do
|
111
|
+
before do
|
112
|
+
@log = Logger.new(IO.new(File::RDONLY,'w'))
|
113
|
+
@log.level = Logger::INFO
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "When a debug-message is posted" do
|
117
|
+
it "must not be reported" do
|
118
|
+
lambda{ @log.debug('Hello World') }.must_log(nil)
|
119
|
+
end
|
120
|
+
it "must not be reported, even if we set the level to debug" do
|
121
|
+
lambda{ @log.debug('Hello World')}.must_log( nil, :level => Logger::DEBUG)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "When a info-message is posted" do
|
126
|
+
it "must be reported (If the processor is fast enough to get the same system time)" do
|
127
|
+
lambda{@log.info('Hello World')}.must_log(
|
128
|
+
Time.now.strftime("I, [%Y-%m-%dT%H:%M:%S.%6N ##{Process.pid}] INFO -- : Hello World\n"))
|
129
|
+
end
|
130
|
+
|
131
|
+
it "must be not reported if we set the level to warn" do
|
132
|
+
lambda{ @log.info('Hello World')}.must_log( nil, :level => Logger::WARN)
|
133
|
+
end
|
134
|
+
|
135
|
+
it "the logger must not be silent" do
|
136
|
+
lambda{ @log.info('Hello World')}.must_not_silent_log()
|
137
|
+
end
|
138
|
+
|
139
|
+
it "the logger must be silent on level warn" do
|
140
|
+
lambda{ @log.info('Hello World')}.must_silent_log(:level => Logger::WARN)
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: minitest-logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Knut Lickert
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: |
|
28
|
+
Extend minitest by assert_log and enable minitest to test log messages.
|
29
|
+
Supports Logger and Log4r::Logger.
|
30
|
+
email: knut@lickert.net
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files:
|
34
|
+
- examples/example_assertions.rb
|
35
|
+
- examples/example_specification.rb
|
36
|
+
files:
|
37
|
+
- examples/example_assertions.rb
|
38
|
+
- examples/example_specification.rb
|
39
|
+
- lib/minitest-logger.rb
|
40
|
+
- lib/minitest/log4r.rb
|
41
|
+
- lib/minitest/logger.rb
|
42
|
+
- rakefile_minitest-logger.rb
|
43
|
+
- unittest/test_load_minitest-logger.rb
|
44
|
+
- unittest/test_minitest-log4r.rb
|
45
|
+
- unittest/test_minitest-logger.rb
|
46
|
+
homepage:
|
47
|
+
licenses: []
|
48
|
+
metadata: {}
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options:
|
51
|
+
- "--main lib/minitest-logger.rb"
|
52
|
+
- '--title "Rdoc: Minitest-logger"'
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
requirements:
|
66
|
+
- Log4r or Logger
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 2.4.5
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
71
|
+
summary: Extend minitest by assert_log
|
72
|
+
test_files:
|
73
|
+
- unittest/test_load_minitest-logger.rb
|
74
|
+
- unittest/test_minitest-logger.rb
|
75
|
+
- unittest/test_minitest-log4r.rb
|