Class: Minitest::Runnable
Overview
Represents anything “runnable”, like Test, Spec, Benchmark, or whatever you can dream up.
Subclasses of this are automatically registered and available in Runnable.runnables.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#assertions ⇒ Object
Number of assertions executed in this run.
-
#failures ⇒ Object
An assertion raised during the run, if any.
Class Method Summary collapse
-
.inherited(klass) ⇒ Object
:nodoc:.
-
.methods_matching(re) ⇒ Object
Returns all instance methods matching the pattern
re
. -
.on_signal(name, action) ⇒ Object
:nodoc:.
-
.reset ⇒ Object
:nodoc:.
-
.run(reporter, options = {}) ⇒ Object
Responsible for running all runnable methods in a given class, each in its own instance.
- .run_one_method(klass, method_name, reporter) ⇒ Object
-
.runnable_methods ⇒ Object
Each subclass of Runnable is responsible for overriding this method to return all runnable methods.
-
.runnables ⇒ Object
Returns all subclasses of Runnable.
-
.with_info_handler(reporter, &block) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#failure ⇒ Object
:nodoc:.
-
#initialize(name) ⇒ Runnable
constructor
:nodoc:.
-
#marshal_dump ⇒ Object
:nodoc:.
-
#marshal_load(ary) ⇒ Object
:nodoc:.
-
#name ⇒ Object
Name of the run.
-
#name=(o) ⇒ Object
Set the name of the run.
-
#passed? ⇒ Boolean
Did this run pass?.
-
#result_code ⇒ Object
Returns a single character string to print based on the result of the run.
-
#run ⇒ Object
Runs a single method.
-
#skipped? ⇒ Boolean
Was this run skipped? See #passed? for more information.
Constructor Details
#initialize(name) ⇒ Runnable
:nodoc:
350 351 352 353 354 |
# File 'lib/minitest.rb', line 350 def initialize name # :nodoc: self.name = name self.failures = [] self.assertions = 0 end |
Instance Attribute Details
#assertions ⇒ Object
Number of assertions executed in this run.
234 235 236 |
# File 'lib/minitest.rb', line 234 def assertions @assertions end |
#failures ⇒ Object
An assertion raised during the run, if any.
239 240 241 |
# File 'lib/minitest.rb', line 239 def failures @failures end |
Class Method Details
.inherited(klass) ⇒ Object
:nodoc:
255 256 257 258 |
# File 'lib/minitest.rb', line 255 def self.inherited klass # :nodoc: self.runnables << klass super end |
.methods_matching(re) ⇒ Object
Returns all instance methods matching the pattern re
.
263 264 265 |
# File 'lib/minitest.rb', line 263 def self.methods_matching re public_instance_methods(true).grep(re).map(&:to_s) end |
.on_signal(name, action) ⇒ Object
:nodoc:
310 311 312 313 314 315 316 317 318 319 320 321 |
# File 'lib/minitest.rb', line 310 def self.on_signal name, action # :nodoc: supported = Signal.list[name] old_trap = trap name do old_trap.call if old_trap.respond_to? :call action.call end if supported yield ensure trap name, old_trap if supported end |
.reset ⇒ Object
:nodoc:
267 268 269 |
# File 'lib/minitest.rb', line 267 def self.reset # :nodoc: @@runnables = [] end |
.run(reporter, options = {}) ⇒ Object
Responsible for running all runnable methods in a given class, each in its own instance. Each instance is passed to the reporter to record.
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/spec.rb', line 97 def self.run reporter, = {} filter = [:filter] || '/./' filter = Regexp.new $1 if filter =~ /\/(.*)\// io = .fetch(:io, $stdout) filtered_methods = self.runnable_methods.find_all { |m| filter === m || filter === "#{self}##{m}" } with_info_handler reporter do filtered_methods.each do |method_name| method = self.new(method_name) matched_name = method_name.match /test_(\d+)_/ if matched_name test_number = matched_name[1].to_i test_name = method_name.split(/_\d+_/).last file_path, line_number = method.method(method_name).source_location # /5/4/3/2/1/test.rb => 2/1/test.rb file_path = file_path.split(File::SEPARATOR).reject(&:empty?) file_path = (file_path.length >= 3 ? file_path[-3..-1] : file_path).join(File::SEPARATOR) # 36 = cyan, 0 = clear test_output_title = "\e[36m#{test_name} | #{test_number} | " + "#{file_path}:#{line_number}\e[0m" io.puts test_output_title end run_one_method self, method_name, reporter end end end |
.run_one_method(klass, method_name, reporter) ⇒ Object
293 294 295 |
# File 'lib/minitest.rb', line 293 def self.run_one_method klass, method_name, reporter reporter.record Minitest.run_one_method(klass, method_name) end |
.runnable_methods ⇒ Object
Each subclass of Runnable is responsible for overriding this method to return all runnable methods. See #methods_matching.
327 328 329 |
# File 'lib/minitest.rb', line 327 def self.runnable_methods raise NotImplementedError, "subclass responsibility" end |
.runnables ⇒ Object
Returns all subclasses of Runnable.
334 335 336 |
# File 'lib/minitest.rb', line 334 def self.runnables @@runnables end |
.with_info_handler(reporter, &block) ⇒ Object
:nodoc:
297 298 299 300 301 302 303 304 305 306 307 308 |
# File 'lib/minitest.rb', line 297 def self.with_info_handler reporter, &block # :nodoc: handler = lambda do unless reporter.passed? then warn "Current results:" warn "" warn reporter.reporters.first warn "" end end on_signal "INFO", handler, &block end |
Instance Method Details
#failure ⇒ Object
:nodoc:
346 347 348 |
# File 'lib/minitest.rb', line 346 def failure # :nodoc: self.failures.first end |
#marshal_dump ⇒ Object
:nodoc:
338 339 340 |
# File 'lib/minitest.rb', line 338 def marshal_dump # :nodoc: [self.name, self.failures, self.assertions] end |
#marshal_load(ary) ⇒ Object
:nodoc:
342 343 344 |
# File 'lib/minitest.rb', line 342 def marshal_load ary # :nodoc: self.name, self.failures, self.assertions = ary end |
#name=(o) ⇒ Object
Set the name of the run.
251 252 253 |
# File 'lib/minitest.rb', line 251 def name= o @NAME = o end |
#passed? ⇒ Boolean
Did this run pass?
Note: skipped runs are not considered passing, but they don’t cause the process to exit non-zero.
369 370 371 |
# File 'lib/minitest.rb', line 369 def passed? raise NotImplementedError, "subclass responsibility" end |
#result_code ⇒ Object
Returns a single character string to print based on the result of the run. Eg “.”, “F”, or “E”.
377 378 379 |
# File 'lib/minitest.rb', line 377 def result_code raise NotImplementedError, "subclass responsibility" end |
#run ⇒ Object
Runs a single method. Needs to return self.
359 360 361 |
# File 'lib/minitest.rb', line 359 def run raise NotImplementedError, "subclass responsibility" end |
#skipped? ⇒ Boolean
Was this run skipped? See #passed? for more information.
384 385 386 |
# File 'lib/minitest.rb', line 384 def skipped? raise NotImplementedError, "subclass responsibility" end |