Class: Evilution::Integration::TestUnitCrashDetector
- Inherits:
-
Object
- Object
- Evilution::Integration::TestUnitCrashDetector
- Defined in:
- lib/evilution/integration/test_unit_crash_detector.rb
Overview
Test::Unit analog of Evilution::Integration::MinitestCrashDetector. Tracks whether a Test::Unit test run produced only crashes (exceptions captured as Test::Unit::Error) vs assertion failures (Test::Unit::Failure). When only crashes occur, the mutation result can carry crash details while remaining classified as :killed — see classify_status / Result::MutationResult.
Hook the detector into a Test::Unit::TestResult via .attach(result), or call #record(fault) directly when iterating a finished result’s #faults.
Instance Method Summary collapse
- #assertion_failure? ⇒ Boolean
- #attach(test_result) ⇒ Object
- #crash_summary ⇒ Object
- #crashed? ⇒ Boolean
-
#initialize ⇒ TestUnitCrashDetector
constructor
A new instance of TestUnitCrashDetector.
- #only_crashes? ⇒ Boolean
- #passed? ⇒ Boolean
- #record(fault) ⇒ Object
- #reset ⇒ Object
- #unique_crash_classes ⇒ Object
Constructor Details
#initialize ⇒ TestUnitCrashDetector
Returns a new instance of TestUnitCrashDetector.
14 15 16 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 14 def initialize reset end |
Instance Method Details
#assertion_failure? ⇒ Boolean
40 41 42 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 40 def assertion_failure? @assertion_failures.positive? end |
#attach(test_result) ⇒ Object
23 24 25 26 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 23 def attach(test_result) require "test/unit/testresult" test_result.add_listener(Test::Unit::TestResult::FAULT) { |fault| record(fault) } end |
#crash_summary ⇒ Object
56 57 58 59 60 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 56 def crash_summary return nil if @crashes.empty? "#{unique_crash_classes.join(", ")} (#{@crashes.length} crash#{"es" unless @crashes.length == 1})" end |
#crashed? ⇒ Boolean
44 45 46 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 44 def crashed? @crashes.any? end |
#only_crashes? ⇒ Boolean
48 49 50 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 48 def only_crashes? @crashes.any? && @assertion_failures.zero? end |
#passed? ⇒ Boolean
36 37 38 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 36 def passed? @assertion_failures.zero? && @crashes.empty? end |
#record(fault) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 28 def record(fault) if fault.is_a?(Test::Unit::Error) @crashes << fault.exception elsif fault.is_a?(Test::Unit::Failure) @assertion_failures += 1 end end |
#reset ⇒ Object
18 19 20 21 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 18 def reset @assertion_failures = 0 @crashes = [] end |
#unique_crash_classes ⇒ Object
52 53 54 |
# File 'lib/evilution/integration/test_unit_crash_detector.rb', line 52 def unique_crash_classes @crashes.map { |e| e.class.name }.uniq end |