minitest-logger 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|