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.
@@ -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