Sha256: 925be5e04a93a4f35014ab5dd0b722472eb761430b6cbe7f65102d20f1b1c70e

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

module Mutant
  # Runner
  module Runner
    # Run against env
    #
    # @return [Either<String, Result>]
    def self.call(env)
      reporter(env).start(env)

      Either::Right.new(run_mutation_analysis(env))
    end

    def self.run_mutation_analysis(env)
      reporter = reporter(env)

      run_driver(
        reporter,
        Parallel.async(mutation_test_config(env))
      ).tap do |result|
        reporter.report(result)
      end
    end
    private_class_method :run_mutation_analysis

    def self.run_driver(reporter, driver)
      loop do
        status = driver.wait_timeout(reporter.delay)
        break status.payload if status.done?
        reporter.progress(status)
      end
    end
    private_class_method :run_driver

    def self.mutation_test_config(env)
      world = env.world

      Parallel::Config.new(
        condition_variable: world.condition_variable,
        jobs:               env.config.jobs,
        mutex:              world.mutex,
        processor:          env.method(:kill),
        sink:               Sink.new(env),
        source:             Parallel::Source::Array.new(env.mutations),
        thread:             world.thread
      )
    end
    private_class_method :mutation_test_config

    def self.reporter(env)
      env.config.reporter
    end
    private_class_method :reporter

  end # Runner
end # Mutant

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mutant-0.10.20 lib/mutant/runner.rb
mutant-0.10.19 lib/mutant/runner.rb
mutant-0.10.18 lib/mutant/runner.rb