Class: Henitai::PerTestCoverageSelector
- Inherits:
-
Object
- Object
- Henitai::PerTestCoverageSelector
- 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
-
#coverage_report_reader ⇒ CoverageReportReader
readonly
Returns the value of attribute coverage_report_reader.
Instance Method Summary collapse
- #filter(tests, mutant, reports_dir:) ⇒ Array[String]
-
#initialize(coverage_report_reader: CoverageReportReader.new) ⇒ PerTestCoverageSelector
constructor
A new instance of PerTestCoverageSelector.
- #per_test_coverage(reports_dir) ⇒ PerTestCoverage
Constructor Details
#initialize(coverage_report_reader: CoverageReportReader.new) ⇒ PerTestCoverageSelector
Returns a new instance of PerTestCoverageSelector.
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_reader ⇒ CoverageReportReader (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]
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
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 |