Class: Mutant::Env Private

Inherits:
Object
  • Object
show all
Includes:
Unparser::Adamantium
Defined in:
lib/mutant/env.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Mutation testing execution environment rubocop:disable Metrics/ClassLength

Constant Summary collapse

SEMANTICS_MESSAGE =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

"Fix your lib to follow normal ruby semantics!\n" \
'{Module,Class}#name should return resolvable constant name as String or nil'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.empty(world, config) ⇒ Env

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Construct minimal empty env

rubocop:disable Metrics/MethodLength

Parameters:

Returns:



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/mutant/env.rb', line 31

def self.empty(world, config)
  new(
    config:,
    hooks:            Hooks.empty,
    integration:      Integration::Null.new(
      arguments:         EMPTY_ARRAY,
      expression_parser: config.expression_parser,
      world:
    ),
    matchable_scopes: EMPTY_ARRAY,
    mutations:        EMPTY_ARRAY,
    parser:           Parser.new,
    selector:         Selector::Null.new,
    subjects:         EMPTY_ARRAY,
    world:
  )
end

Instance Method Details

#amount_all_testsInteger

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Amount of all tests the integration provides

Returns:

  • (Integer)


120
121
122
# File 'lib/mutant/env.rb', line 120

def amount_all_tests
  integration.all_tests.length
end

#amount_available_testsInteger

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Amount of tests available for mutation testing

Returns:

  • (Integer)


128
129
130
# File 'lib/mutant/env.rb', line 128

def amount_available_tests
  integration.available_tests.length
end

#amount_mutationsInteger

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Amount of mutations

Returns:

  • (Integer)


112
113
114
# File 'lib/mutant/env.rb', line 112

def amount_mutations
  mutations.length
end

#amount_selected_testsInteger

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Amount of selected tests

Returns:

  • (Integer)


144
145
146
# File 'lib/mutant/env.rb', line 144

def amount_selected_tests
  selected_tests.length
end

#amount_subjectsInteger

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Amount of selected subjects

Returns:

  • (Integer)


136
137
138
# File 'lib/mutant/env.rb', line 136

def amount_subjects
  subjects.length
end

#cover_index(mutation_index) ⇒ Result::MutationIndex

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Cover mutation with specific index

Parameters:

  • mutation_index (Integer)

Returns:



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/mutant/env.rb', line 55

def cover_index(mutation_index)
  mutation = mutations.fetch(mutation_index)

  start = timer.now

  tests = selections.fetch(mutation.subject)

  Result::MutationIndex.new(
    isolation_result: run_mutation_tests(mutation, tests),
    mutation_index:,
    runtime:          timer.now - start
  )
end

#emit_mutation_worker_process_start(index:) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



73
74
75
# File 'lib/mutant/env.rb', line 73

def emit_mutation_worker_process_start(index:)
  hooks.run(:mutation_worker_process_start, index:)
end

#emit_test_worker_process_start(index:) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



77
78
79
# File 'lib/mutant/env.rb', line 77

def emit_test_worker_process_start(index:)
  hooks.run(:test_worker_process_start, index:)
end

#record(name) ⇒ self

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Record segment

Parameters:

  • name (Symbol)

Returns:

  • (self)


164
165
166
# File 'lib/mutant/env.rb', line 164

def record(name, &)
  world.record(name, &)
end

#run_test_index(test_index) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



69
70
71
# File 'lib/mutant/env.rb', line 69

def run_test_index(test_index)
  integration.call([integration.all_tests.fetch(test_index)])
end

#selected_testsSet<Test>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Selected tests

Returns:



104
105
106
# File 'lib/mutant/env.rb', line 104

def selected_tests
  selections.values.flatten.to_set
end

#selectionsObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The test selections



84
85
86
87
88
# File 'lib/mutant/env.rb', line 84

def selections
  subjects.to_h do |subject|
    [subject, selector.call(subject)]
  end
end

#test_subject_ratioRational

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Ratio between selected tests and subjects

Returns:

  • (Rational)


152
153
154
155
156
# File 'lib/mutant/env.rb', line 152

def test_subject_ratio
  return Rational(0) if amount_subjects.zero?

  Rational(amount_selected_tests, amount_subjects)
end

#warn(message) ⇒ self

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Emit warning

Parameters:

  • warning (String)

Returns:

  • (self)


96
97
98
99
# File 'lib/mutant/env.rb', line 96

def warn(message)
  config.reporter.warn(message)
  self
end