Class: MutationTester::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/mutation_tester/configuration.rb

Constant Summary collapse

RUNNER_MODES =
%i[auto fork spawn in_memory].freeze
TIMEOUT_POLICIES =
%i[killed separate].freeze
AUTO_PARALLEL_CAP =
8
DEFAULT_MINIMUM_SCORE =
80.0
DEFAULT_TIMEOUT =
30
DEFAULT_TIMEOUT_FACTOR =
5
CALIBRATED_TIMEOUT_FLOOR =
5

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/mutation_tester/configuration.rb', line 37

def initialize
  self.parallel_processes = ENV['MUTATION_TESTER_PARALLEL_PROCESSES'] || self.class.auto_parallel_processes
  self.runner = ENV['MUTATION_TESTER_RUNNER'] || :auto
  self.worker_env_var = ENV['MUTATION_TESTER_WORKER_ENV']
  @timeout = DEFAULT_TIMEOUT
  @timeout_factor = DEFAULT_TIMEOUT_FACTOR
  @timeout_policy = :killed
  @baseline_timeout = 300
  @mutation_types = {
    arithmetic: true,
    comparison: true,
    logical: true,
    boolean: true,
    number: true,
    string: true,
    conditional: true,
    call_removal: true,
    nil_injection: true,
    argument: true,
    strict_equality: false
  }
  @reporters = %i[console html json]
  @output_dir = 'tmp/mutation_reports'
  @minimum_score = DEFAULT_MINIMUM_SCORE
  @fail_on_threshold = true
  @verbose = false
  @show_file_path = true
  @show_progress = true
  @test_selection = true
  @fail_fast = false
end

Instance Attribute Details

#baseline_durationObject

Returns the value of attribute baseline_duration.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def baseline_duration
  @baseline_duration
end

#baseline_timeoutObject

Returns the value of attribute baseline_timeout.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def baseline_timeout
  @baseline_timeout
end

#fail_fastObject

Returns the value of attribute fail_fast.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def fail_fast
  @fail_fast
end

#fail_on_thresholdObject

Returns the value of attribute fail_on_threshold.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def fail_on_threshold
  @fail_on_threshold
end

#minimum_scoreObject

Returns the value of attribute minimum_score.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def minimum_score
  @minimum_score
end

#mutation_typesObject

Returns the value of attribute mutation_types.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def mutation_types
  @mutation_types
end

#output_dirObject

Returns the value of attribute output_dir.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def output_dir
  @output_dir
end

#parallel_processesObject

Returns the value of attribute parallel_processes.



22
23
24
# File 'lib/mutation_tester/configuration.rb', line 22

def parallel_processes
  @parallel_processes
end

#reportersObject

Returns the value of attribute reporters.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def reporters
  @reporters
end

#runnerObject

Returns the value of attribute runner.



22
23
24
# File 'lib/mutation_tester/configuration.rb', line 22

def runner
  @runner
end

#show_file_pathObject

Returns the value of attribute show_file_path.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def show_file_path
  @show_file_path
end

#show_progressObject

Returns the value of attribute show_progress.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def show_progress
  @show_progress
end

#test_selectionObject

Returns the value of attribute test_selection.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def test_selection
  @test_selection
end

#timeoutObject

Returns the value of attribute timeout.



22
23
24
# File 'lib/mutation_tester/configuration.rb', line 22

def timeout
  @timeout
end

#timeout_factorObject

Returns the value of attribute timeout_factor.



22
23
24
# File 'lib/mutation_tester/configuration.rb', line 22

def timeout_factor
  @timeout_factor
end

#timeout_policyObject

Returns the value of attribute timeout_policy.



22
23
24
# File 'lib/mutation_tester/configuration.rb', line 22

def timeout_policy
  @timeout_policy
end

#verboseObject

Returns the value of attribute verbose.



24
25
26
# File 'lib/mutation_tester/configuration.rb', line 24

def verbose
  @verbose
end

#worker_env_varObject

Returns the value of attribute worker_env_var.



22
23
24
# File 'lib/mutation_tester/configuration.rb', line 22

def worker_env_var
  @worker_env_var
end

Class Method Details

.auto_parallel_processesObject



13
14
15
# File 'lib/mutation_tester/configuration.rb', line 13

def self.auto_parallel_processes
  [[Etc.nprocessors, AUTO_PARALLEL_CAP].min, 1].max
end

.worker_env_value(index) ⇒ Object



17
18
19
20
# File 'lib/mutation_tester/configuration.rb', line 17

def self.worker_env_value(index)
  number = index.to_i
  number <= 0 ? '' : (number + 1).to_s
end

Instance Method Details

#effective_timeoutObject



110
111
112
113
114
# File 'lib/mutation_tester/configuration.rb', line 110

def effective_timeout
  return @timeout if timeout_explicitly_set? || @baseline_duration.nil?

  [CALIBRATED_TIMEOUT_FLOOR, @timeout_factor * @baseline_duration].max
end

#initialize_copy(source) ⇒ Object



77
78
79
80
81
# File 'lib/mutation_tester/configuration.rb', line 77

def initialize_copy(source)
  super
  @mutation_types = source.mutation_types.dup
  @reporters = source.reporters.dup
end

#merge(options) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/mutation_tester/configuration.rb', line 69

def merge(options)
  config = dup
  options.each do |key, value|
    config.public_send("#{key}=", value) if config.respond_to?("#{key}=")
  end
  config
end

#timeout_explicitly_set?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/mutation_tester/configuration.rb', line 88

def timeout_explicitly_set?
  !!@timeout_explicit
end

#worker_env_assignment(index) ⇒ Object



139
140
141
142
143
# File 'lib/mutation_tester/configuration.rb', line 139

def worker_env_assignment(index)
  return nil unless @worker_env_var

  { @worker_env_var => self.class.worker_env_value(index) }
end