Class: Evilution::Integration::Minitest
- Defined in:
- lib/evilution/integration/minitest.rb
Class Method Summary collapse
- .baseline_options ⇒ Object
- .baseline_runner ⇒ Object
- .baseline_test_files(test_file) ⇒ Object
-
.dispatch_minitest_suites(reporter, options) ⇒ Object
Dispatch to the version-appropriate suite runner.
-
.initialize_minitest_state(reporter, options) ⇒ Object
Mirror Minitest.run’s preamble: seed setup + plugin init.
- .run_baseline_minitest ⇒ Object
- .run_baseline_test_file(test_file) ⇒ Object
-
.stub_autorun! ⇒ Object
User helpers that ‘require “minitest/autorun”` install an at_exit handler calling `Minitest.run(ARGV)`.
Instance Method Summary collapse
-
#initialize(test_files: nil, hooks: nil, fallback_to_full_suite: false, spec_selector: nil) ⇒ Minitest
constructor
A new instance of Minitest.
Methods inherited from Base
Constructor Details
#initialize(test_files: nil, hooks: nil, fallback_to_full_suite: false, spec_selector: nil) ⇒ Minitest
Returns a new instance of Minitest.
91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/evilution/integration/minitest.rb', line 91 def initialize(test_files: nil, hooks: nil, fallback_to_full_suite: false, spec_selector: nil) @test_files = test_files @minitest_loaded = false @spec_selector = spec_selector || Evilution::SpecSelector.new( spec_resolver: Evilution::SpecResolver.new(test_dir: "test", test_suffix: "_test.rb", request_dir: "integration") ) @fallback_to_full_suite = fallback_to_full_suite @crash_detector = nil @warned_files = Set.new super(hooks: hooks) end |
Class Method Details
.baseline_options ⇒ Object
83 84 85 86 87 88 89 |
# File 'lib/evilution/integration/minitest.rb', line 83 def self. { runner: baseline_runner, spec_resolver: Evilution::SpecResolver.new(test_dir: "test", test_suffix: "_test.rb", request_dir: "integration"), fallback_dir: "test" } end |
.baseline_runner ⇒ Object
12 13 14 |
# File 'lib/evilution/integration/minitest.rb', line 12 def self.baseline_runner ->(test_file) { run_baseline_test_file(test_file) } end |
.baseline_test_files(test_file) ⇒ Object
37 38 39 |
# File 'lib/evilution/integration/minitest.rb', line 37 def self.baseline_test_files(test_file) File.directory?(test_file) ? Dir.glob(File.join(test_file, "**/*_test.rb")) : [test_file] end |
.dispatch_minitest_suites(reporter, options) ⇒ Object
Dispatch to the version-appropriate suite runner. Minitest 6 removed ::Minitest.__run; the equivalent public entry point is run_all_suites. Minitest 5.x still exposes __run.
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/evilution/integration/minitest.rb', line 72 def self.dispatch_minitest_suites(reporter, ) if ::Minitest.respond_to?(:run_all_suites) ::Minitest.run_all_suites(reporter, ) elsif ::Minitest.respond_to?(:__run) ::Minitest.__run(reporter, ) else raise Evilution::Error, "Minitest #{::Minitest::VERSION} has neither run_all_suites nor __run" end end |
.initialize_minitest_state(reporter, options) ⇒ Object
Mirror Minitest.run’s preamble: seed setup + plugin init. Without seeding Minitest.seed before dispatching suites, Minitest 5.x raises ‘TypeError: no implicit conversion of nil into Integer` from Minitest::Test.runnable_methods calling `srand(Minitest.seed)` on nil. init_plugins also needs Minitest.reporter set first because some plugins (pride) read it during init.
60 61 62 63 64 65 66 67 |
# File 'lib/evilution/integration/minitest.rb', line 60 def self.initialize_minitest_state(reporter, ) ::Minitest.seed = [:seed] srand(::Minitest.seed) if ::Minitest.seed ::Minitest.reporter = reporter ::Minitest.init_plugins() if ::Minitest.respond_to?(:init_plugins) ::Minitest.reporter = nil end |
.run_baseline_minitest ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/evilution/integration/minitest.rb', line 41 def self.run_baseline_minitest out = StringIO.new = ::Minitest.process_args(["--seed", "0"]) [:io] = out reporter = ::Minitest::CompositeReporter.new reporter << ::Minitest::SummaryReporter.new(out, ) initialize_minitest_state(reporter, ) reporter.start dispatch_minitest_suites(reporter, ) reporter.report reporter.passed? end |
.run_baseline_test_file(test_file) ⇒ Object
16 17 18 19 20 21 22 23 |
# File 'lib/evilution/integration/minitest.rb', line 16 def self.run_baseline_test_file(test_file) require "minitest" require "stringio" stub_autorun! ::Minitest::Runnable.runnables.clear baseline_test_files(test_file).each { |f| load(File.(f)) } run_baseline_minitest end |
.stub_autorun! ⇒ Object
User helpers that ‘require “minitest/autorun”` install an at_exit handler calling `Minitest.run(ARGV)`. At evilution process exit ARGV still holds evilution flags (–integration, –spec, …) and Minitest’s option parser prints a misleading “invalid option” banner. Stubbing autorun before user code loads prevents the handler from ever being installed.
30 31 32 33 34 35 |
# File 'lib/evilution/integration/minitest.rb', line 30 def self.stub_autorun! location = ::Minitest.singleton_class.instance_method(:autorun).source_location return if location && location.first == __FILE__ ::Minitest.define_singleton_method(:autorun) { nil } end |