Class: Henitai::PerTestCoverageSelector

Inherits:
Object
  • Object
show all
Defined in:
lib/henitai/per_test_coverage_selector.rb,
sig/henitai.rbs

Overview

Narrows candidate test files using the per-test coverage report.

The intersection check itself lives in PerTestCoverage; this class only adds the selection policy: when no candidate provably covers the mutant (or the map / location is unavailable), it falls back to all candidates — over-selection costs time, never correctness.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(coverage_report_reader: CoverageReportReader.new) ⇒ PerTestCoverageSelector

Returns a new instance of PerTestCoverageSelector.

Parameters:



11
12
13
# File 'lib/henitai/per_test_coverage_selector.rb', line 11

def initialize(coverage_report_reader: CoverageReportReader.new)
  @coverage_report_reader = coverage_report_reader
end

Instance Attribute Details

#coverage_report_readerCoverageReportReader (readonly)

Returns the value of attribute coverage_report_reader.



36
37
38
# File 'lib/henitai/per_test_coverage_selector.rb', line 36

def coverage_report_reader
  @coverage_report_reader
end

Instance Method Details

#filter(tests, mutant, reports_dir:) ⇒ Array[String]

Parameters:

  • (Array[String])
  • (Mutant)
  • reports_dir: (String)

Returns:

  • (Array[String])


15
16
17
18
19
20
21
22
23
24
# File 'lib/henitai/per_test_coverage_selector.rb', line 15

def filter(tests, mutant, reports_dir:)
  candidates = Array(tests)
  return candidates if candidates.empty?

  coverage = per_test_coverage(reports_dir)
  covered_tests = candidates.select do |test|
    coverage.covers?(test, mutant)
  end
  covered_tests.empty? ? candidates : covered_tests
end

#per_test_coverage(reports_dir) ⇒ PerTestCoverage

Parameters:

  • (String)

Returns:



28
29
30
31
32
33
34
# File 'lib/henitai/per_test_coverage_selector.rb', line 28

def per_test_coverage(reports_dir)
  @per_test_coverage ||= {}
  @per_test_coverage[reports_dir] ||= PerTestCoverage.new(
    reports_dir:,
    coverage_report_reader:
  )
end