Class: Minitest::Runnable
- Inherits:
-
Object
- Object
- Minitest::Runnable
- Defined in:
- lib/minitest.rb,
lib/minitest.rb
Overview
re-open
Constant Summary collapse
- SIGNALS =
:nodoc:
Signal.list
Instance Attribute Summary collapse
-
#assertions ⇒ Object
Number of assertions executed in this run.
-
#failures ⇒ Object
An assertion raised during the run, if any.
-
#metadata ⇒ Object
Metadata you attach to the test results that get sent to the reporter.
-
#time ⇒ Object
The time it took to run.
Class Method Summary collapse
-
.filter_runnable_methods(options = {}) ⇒ Object
Returns an array of filtered
runnable_methods. -
.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(klass, method_name, reporter) ⇒ Object
Runs a single method and has the reporter record the result.
-
.run_order ⇒ Object
Defines the order to run tests (:random by default).
-
.run_suite(reporter, options = {}) ⇒ Object
Responsible for running all runnable methods in a given class, each in its own instance.
-
.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 = nil, &block) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#failure ⇒ Object
:nodoc:.
-
#initialize(name) ⇒ Runnable
constructor
:nodoc:.
-
#metadata? ⇒ Boolean
Returns true if metadata exists.
-
#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.
-
#time_it ⇒ Object
:nodoc:.
Constructor Details
#initialize(name) ⇒ Runnable
:nodoc:
534 535 536 537 538 539 |
# File 'lib/minitest.rb', line 534 def initialize name # :nodoc: self.name = name self.failures = [] self.assertions = 0 # lazy initializer for metadata end |
Instance Attribute Details
#assertions ⇒ Object
Number of assertions executed in this run.
381 382 383 |
# File 'lib/minitest.rb', line 381 def assertions @assertions end |
#failures ⇒ Object
An assertion raised during the run, if any.
386 387 388 |
# File 'lib/minitest.rb', line 386 def failures @failures end |
#metadata ⇒ Object
Metadata you attach to the test results that get sent to the reporter.
Lazily initializes to a hash, to keep memory down.
NOTE: this data must be plain (read: marshal-able) data! Hashes! Arrays! Strings!
549 550 551 |
# File 'lib/minitest.rb', line 549 def ||= {} end |
#time ⇒ Object
The time it took to run.
391 392 393 |
# File 'lib/minitest.rb', line 391 def time @time end |
Class Method Details
.filter_runnable_methods(options = {}) ⇒ Object
433 434 435 436 437 438 439 440 441 442 443 444 |
# File 'lib/minitest.rb', line 433 def self.filter_runnable_methods ={} pos = [:include] neg = [:exclude] pos = Regexp.new $1 if pos.kind_of?(String) && pos =~ %r%/(.*)/% neg = Regexp.new $1 if neg.kind_of?(String) && neg =~ %r%/(.*)/% # at most 1-2% slower than a 1-pass version, stop optimizing this self.runnable_methods .select { |m| !pos || pos === m || pos === "#{self}##{m}" } .reject { |m| neg && (neg === m || neg === "#{self}##{m}") } end |
.inherited(klass) ⇒ Object
:nodoc:
1218 1219 1220 1221 |
# File 'lib/minitest.rb', line 1218 def self.inherited klass # :nodoc: self.runnables << klass super end |
.methods_matching(re) ⇒ Object
Returns all instance methods matching the pattern re.
418 419 420 |
# File 'lib/minitest.rb', line 418 def self.methods_matching re public_instance_methods(true).grep(re).map(&:to_s) end |
.on_signal(name, action) ⇒ Object
:nodoc:
502 503 504 505 506 507 508 509 510 511 512 513 |
# File 'lib/minitest.rb', line 502 def self.on_signal name, action # :nodoc: supported = SIGNALS[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:
422 423 424 |
# File 'lib/minitest.rb', line 422 def self.reset # :nodoc: @@runnables = [] end |
.run(klass, method_name, reporter) ⇒ Object
Runs a single method and has the reporter record the result. This was considered internal API but is factored out of run so that subclasses can specialize the running of an individual test. See Minitest::ParallelTest::ClassMethods for an example.
483 484 485 486 |
# File 'lib/minitest.rb', line 483 def Runnable.run klass, method_name, reporter reporter.prerecord klass, method_name reporter.record klass.new(method_name).run end |
.run_order ⇒ Object
Defines the order to run tests (:random by default). Override this or use a convenience method to change it for your tests.
492 493 494 |
# File 'lib/minitest.rb', line 492 def self.run_order :random end |
.run_suite(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.
451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 |
# File 'lib/minitest.rb', line 451 def Runnable.run_suite reporter, = {} filtered_methods = filter_runnable_methods return if filtered_methods.empty? t0 = name = nil @_info_handler = lambda do unless reporter.passed? then warn "Current results:" warn reporter.reporters.grep(SummaryReporter).first end warn "Current: %s#%s %.2fs" % [self, name, Minitest.clock_time - t0] end with_info_handler do filtered_methods.each do |method_name| name = method_name t0 = Minitest.clock_time run self, method_name, reporter end end end |
.runnable_methods ⇒ Object
Each subclass of Runnable is responsible for overriding this method to return all runnable methods. See #methods_matching.
519 520 521 |
# File 'lib/minitest.rb', line 519 def self.runnable_methods raise NotImplementedError, "subclass responsibility" end |
.runnables ⇒ Object
Returns all subclasses of Runnable.
526 527 528 |
# File 'lib/minitest.rb', line 526 def self.runnables @@runnables end |
.with_info_handler(_reporter = nil, &block) ⇒ Object
:nodoc:
496 497 498 |
# File 'lib/minitest.rb', line 496 def self.with_info_handler _reporter=nil, &block # :nodoc: on_signal ::Minitest.info_signal, @_info_handler, &block end |
Instance Method Details
#failure ⇒ Object
:nodoc:
530 531 532 |
# File 'lib/minitest.rb', line 530 def failure # :nodoc: self.failures.first end |
#metadata? ⇒ Boolean
Returns true if metadata exists.
561 562 563 |
# File 'lib/minitest.rb', line 561 def defined? end |
#name ⇒ Object
Name of the run.
404 405 406 |
# File 'lib/minitest.rb', line 404 def name @NAME end |
#name=(o) ⇒ Object
Set the name of the run.
411 412 413 |
# File 'lib/minitest.rb', line 411 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.
578 579 580 |
# File 'lib/minitest.rb', line 578 def passed? raise NotImplementedError, "subclass responsibility" end |
#result_code ⇒ Object
Returns a single character string to print based on the result of the run. One of ".", "F", "E" or "S".
587 588 589 |
# File 'lib/minitest.rb', line 587 def result_code raise NotImplementedError, "subclass responsibility" end |
#run ⇒ Object
Runs a single method. Needs to return self.
568 569 570 |
# File 'lib/minitest.rb', line 568 def run raise NotImplementedError, "subclass responsibility" end |
#skipped? ⇒ Boolean
Was this run skipped? See #passed? for more information.
594 595 596 |
# File 'lib/minitest.rb', line 594 def skipped? raise NotImplementedError, "subclass responsibility" end |
#time_it ⇒ Object
:nodoc:
393 394 395 396 397 398 399 |
# File 'lib/minitest.rb', line 393 def time_it # :nodoc: t0 = Minitest.clock_time yield ensure self.time = Minitest.clock_time - t0 end |