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:
446 447 448 449 450 451 |
# File 'lib/minitest.rb', line 446 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.
282 283 284 |
# File 'lib/minitest.rb', line 282 def assertions @assertions end |
#failures ⇒ Object
An assertion raised during the run, if any.
287 288 289 |
# File 'lib/minitest.rb', line 287 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!
461 462 463 |
# File 'lib/minitest.rb', line 461 def @metadata ||= {} end |
#time ⇒ Object
The time it took to run.
292 293 294 |
# File 'lib/minitest.rb', line 292 def time @time end |
Class Method Details
.inherited(klass) ⇒ Object
:nodoc:
1117 1118 1119 1120 |
# File 'lib/minitest.rb', line 1117 def self.inherited klass # :nodoc: self.runnables << klass super end |
.methods_matching(re) ⇒ Object
Returns all instance methods matching the pattern re
.
319 320 321 |
# File 'lib/minitest.rb', line 319 def self.methods_matching re public_instance_methods(true).grep(re).map(&:to_s) end |
.on_signal(name, action) ⇒ Object
:nodoc:
398 399 400 401 402 403 404 405 406 407 408 409 |
# File 'lib/minitest.rb', line 398 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:
323 324 325 |
# File 'lib/minitest.rb', line 323 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.
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 |
# File 'lib/minitest.rb', line 334 def self.run reporter, = {} filtered_methods = if [:filter] filter = [:filter] filter = Regexp.new $1 if filter.is_a?(String) && filter =~ %r%/(.*)/% self.runnable_methods.find_all { |m| filter === m || filter === "#{self}##{m}" } else self.runnable_methods end if [:exclude] exclude = [:exclude] exclude = Regexp.new $1 if exclude =~ %r%/(.*)/% filtered_methods.delete_if { |m| exclude === m || exclude === "#{self}##{m}" } end return if filtered_methods.empty? with_info_handler reporter do filtered_methods.each do |method_name| 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.
370 371 372 373 |
# File 'lib/minitest.rb', line 370 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.
415 416 417 |
# File 'lib/minitest.rb', line 415 def self.runnable_methods raise NotImplementedError, "subclass responsibility" end |
.runnables ⇒ Object
Returns all subclasses of Runnable.
422 423 424 |
# File 'lib/minitest.rb', line 422 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.
379 380 381 |
# File 'lib/minitest.rb', line 379 def self.test_order :random end |
.with_info_handler(reporter, &block) ⇒ Object
:nodoc:
383 384 385 386 387 388 389 390 391 392 393 394 |
# File 'lib/minitest.rb', line 383 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 ::Minitest.info_signal, handler, &block end |
Instance Method Details
#failure ⇒ Object
:nodoc:
442 443 444 |
# File 'lib/minitest.rb', line 442 def failure # :nodoc: self.failures.first end |
#marshal_dump ⇒ Object
:nodoc:
428 429 430 431 432 433 434 435 436 |
# File 'lib/minitest.rb', line 428 def marshal_dump # :nodoc: unless @@marshal_dump_warned then warn ["Minitest::Runnable#marshal_dump is deprecated.", "You might be violating internals. From", caller.first].join " " @@marshal_dump_warned = true end [self.name, self.failures, self.assertions, self.time] end |
#marshal_load(ary) ⇒ Object
:nodoc:
438 439 440 |
# File 'lib/minitest.rb', line 438 def marshal_load ary # :nodoc: self.name, self.failures, self.assertions, self.time = ary end |
#metadata? ⇒ Boolean
Returns true if metadata exists.
473 474 475 |
# File 'lib/minitest.rb', line 473 def defined? @metadata end |
#name=(o) ⇒ Object
Set the name of the run.
312 313 314 |
# File 'lib/minitest.rb', line 312 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.
490 491 492 |
# File 'lib/minitest.rb', line 490 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"
.
499 500 501 |
# File 'lib/minitest.rb', line 499 def result_code raise NotImplementedError, "subclass responsibility" end |
#run ⇒ Object
Runs a single method. Needs to return self.
480 481 482 |
# File 'lib/minitest.rb', line 480 def run raise NotImplementedError, "subclass responsibility" end |
#skipped? ⇒ Boolean
Was this run skipped? See #passed? for more information.
506 507 508 |
# File 'lib/minitest.rb', line 506 def skipped? raise NotImplementedError, "subclass responsibility" end |
#time_it ⇒ Object
:nodoc:
294 295 296 297 298 299 300 |
# File 'lib/minitest.rb', line 294 def time_it # :nodoc: t0 = Minitest.clock_time yield ensure self.time = Minitest.clock_time - t0 end |