minitest-logger 0.1.0

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