free_mutant/lib/mutant/runner.rb
Markus Schirp d03e7fbdc2 Change integrations to reference config object
* Future changes depend on this one
* Also fixes the smell of "stateless" integration objects we had in the
  past
2015-06-29 18:39:08 +00:00

102 lines
1.7 KiB
Ruby

module Mutant
# Runner baseclass
class Runner
include Adamantium::Flat, Concord.new(:env), Procto.call(:result)
# Initialize object
#
# @return [undefined]
#
# @api private
#
def initialize(*)
super
reporter.start(env)
run_mutation_analysis
end
# Return result
#
# @return [Result::Env]
#
# @api private
#
attr_reader :result
private
# Run mutation analysis
#
# @return [undefined]
#
# @api private
#
def run_mutation_analysis
@result = run_driver(Parallel.async(mutation_test_config))
reporter.report(@result)
end
# Run driver
#
# @param [Driver] driver
#
# @return [Object]
# the last returned status payload
#
# @api private
#
def run_driver(driver)
status = nil
loop do
status = driver.status
reporter.progress(status)
break if status.done
Kernel.sleep(reporter.delay)
end
driver.stop
status.payload
end
# Return mutation test config
#
# @return [Parallell::Config]
#
# @api private
#
def mutation_test_config
Parallel::Config.new(
env: env.actor_env,
jobs: config.jobs,
source: Parallel::Source::Array.new(env.mutations),
sink: Sink::Mutation.new(env),
processor: env.method(:kill)
)
end
# Return reporter
#
# @return [Reporter]
#
# @api private
#
def reporter
env.config.reporter
end
# Return config
#
# @return [Config]
#
# @api private
#
def config
env.config
end
end # Runner
end # Mutant