Class: Evilution::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/evilution/runner/diagnostics.rb,
lib/evilution/runner.rb,
lib/evilution/runner/baseline_runner.rb,
lib/evilution/runner/mutation_planner.rb,
lib/evilution/runner/report_publisher.rb,
lib/evilution/runner/subject_pipeline.rb,
lib/evilution/runner/mutation_executor.rb,
lib/evilution/runner/isolation_resolver.rb

Overview

rubocop:disable Lint/EmptyClass

Defined Under Namespace

Classes: BaselineRunner, Diagnostics, IsolationResolver, MutationExecutor, MutationPlanner, ReportPublisher, SubjectPipeline

Constant Summary collapse

INTEGRATIONS =
{
  rspec: Evilution::Integration::RSpec,
  minitest: Evilution::Integration::Minitest
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config: Evilution::Config.new, on_result: nil, hooks: nil) ⇒ Runner

Returns a new instance of Runner.



35
36
37
38
39
40
41
42
# File 'lib/evilution/runner.rb', line 35

def initialize(config: Evilution::Config.new, on_result: nil, hooks: nil)
  @config = config
  @on_result = on_result
  @hooks = hooks
  @parser = Evilution::AST::Parser.new
  @registry = Evilution::Mutator::Registry.default
  @cache = config.incremental? ? Evilution::Cache.new : nil
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



33
34
35
# File 'lib/evilution/runner.rb', line 33

def config
  @config
end

Instance Method Details

#callObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/evilution/runner.rb', line 44

def call
  install_signal_handlers
  start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)

  subjects = subject_pipeline.call
  log_memory("after parse_subjects", "#{subjects.length} subjects")

  perform_preload
  log_memory("after preload") if rails_root_detected?

  baseline_result = run_baseline(subjects)

  plan = mutation_planner.call(subjects)
  release_subject_nodes(subjects)
  clear_operator_caches
  results, truncated = run_mutations(plan.enabled, baseline_result)
  results += equivalent_results(plan.equivalent)
  log_memory("after run_mutations", "#{results.length} results")

  duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time

  summary = Evilution::Result::Summary.new(results: results, duration: duration, truncated: truncated,
                                           skipped: plan.skipped_count,
                                           disabled_mutations: plan.disabled_mutations)
  output_report(summary)
  save_session(summary)

  summary
end

#parse_and_filter_subjectsObject



74
75
76
# File 'lib/evilution/runner.rb', line 74

def parse_and_filter_subjects
  subject_pipeline.call
end