Class: Minitest::Runnable
Overview
re-open
Constant Summary collapse
- SIGNALS =
:nodoc:
Signal.list
- @@marshal_dump_warned =
false
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
-
.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
Runs a single method and has the reporter record the result.
-
.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.
-
.test_order ⇒ Object
Defines the order to run tests (:random by default).
-
.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:.
-
#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:
528 529 530 531 532 533 |
# File 'lib/minitest.rb', line 528 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.
368 369 370 |
# File 'lib/minitest.rb', line 368 def assertions @assertions end |
#failures ⇒ Object
An assertion raised during the run, if any.
373 374 375 |
# File 'lib/minitest.rb', line 373 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!
543 544 545 |
# File 'lib/minitest.rb', line 543 def ||= {} end |
#time ⇒ Object
The time it took to run.
378 379 380 |
# File 'lib/minitest.rb', line 378 def time @time end |
Class Method Details
.inherited(klass) ⇒ Object
:nodoc:
1242 1243 1244 1245 |
# File 'lib/minitest.rb', line 1242 def self.inherited klass # :nodoc: self.runnables << klass super end |
.methods_matching(re) ⇒ Object
Returns all instance methods matching the pattern re.
405 406 407 |
# File 'lib/minitest.rb', line 405 def self.methods_matching re public_instance_methods(true).grep(re).map(&:to_s) end |
.on_signal(name, action) ⇒ Object
:nodoc:
480 481 482 483 484 485 486 487 488 489 490 491 |
# File 'lib/minitest.rb', line 480 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:
409 410 411 |
# File 'lib/minitest.rb', line 409 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.
420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 |
# File 'lib/minitest.rb', line 420 def self.run reporter, = {} pos = [:filter] 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 filtered_methods = self.runnable_methods .select { |m| !pos || pos === m || pos === "#{self}##{m}" } .reject { |m| neg && (neg === m || neg === "#{self}##{m}") } 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 reporter do filtered_methods.each do |method_name| name = method_name t0 = Minitest.clock_time run_one_method self, method_name, reporter end end end |
.run_one_method(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.
461 462 463 464 |
# File 'lib/minitest.rb', line 461 def self.run_one_method klass, method_name, reporter reporter.prerecord klass, method_name 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.
497 498 499 |
# File 'lib/minitest.rb', line 497 def self.runnable_methods raise NotImplementedError, "subclass responsibility" end |
.runnables ⇒ Object
Returns all subclasses of Runnable.
504 505 506 |
# File 'lib/minitest.rb', line 504 def self.runnables @@runnables end |
.test_order ⇒ Object
Defines the order to run tests (:random by default). Override this or use a convenience method to change it for your tests.
470 471 472 |
# File 'lib/minitest.rb', line 470 def self.test_order :random end |
.with_info_handler(reporter, &block) ⇒ Object
:nodoc:
474 475 476 |
# File 'lib/minitest.rb', line 474 def self.with_info_handler reporter, &block # :nodoc: on_signal ::Minitest.info_signal, @_info_handler, &block end |
Instance Method Details
#failure ⇒ Object
:nodoc:
524 525 526 |
# File 'lib/minitest.rb', line 524 def failure # :nodoc: self.failures.first end |
#marshal_dump ⇒ Object
:nodoc:
510 511 512 513 514 515 516 517 518 |
# File 'lib/minitest.rb', line 510 def marshal_dump # :nodoc: unless @@marshal_dump_warned then warn ["Minitest::Runnable#marshal_dump is deprecated.", "You might be violating internals. From", caller(1..1).first].join " " @@marshal_dump_warned = true end [self.name, self.failures, self.assertions, self.time] end |
#marshal_load(ary) ⇒ Object
:nodoc:
520 521 522 |
# File 'lib/minitest.rb', line 520 def marshal_load ary # :nodoc: self.name, self.failures, self.assertions, self.time = ary end |
#metadata? ⇒ Boolean
Returns true if metadata exists.
555 556 557 |
# File 'lib/minitest.rb', line 555 def defined? end |
#name=(o) ⇒ Object
Set the name of the run.
398 399 400 |
# File 'lib/minitest.rb', line 398 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.
572 573 574 |
# File 'lib/minitest.rb', line 572 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".
581 582 583 |
# File 'lib/minitest.rb', line 581 def result_code raise NotImplementedError, "subclass responsibility" end |
#run ⇒ Object
Runs a single method. Needs to return self.
562 563 564 |
# File 'lib/minitest.rb', line 562 def run raise NotImplementedError, "subclass responsibility" end |
#skipped? ⇒ Boolean
Was this run skipped? See #passed? for more information.
588 589 590 |
# File 'lib/minitest.rb', line 588 def skipped? raise NotImplementedError, "subclass responsibility" end |
#time_it ⇒ Object
:nodoc:
380 381 382 383 384 385 386 |
# File 'lib/minitest.rb', line 380 def time_it # :nodoc: t0 = Minitest.clock_time yield ensure self.time = Minitest.clock_time - t0 end |