Class: Henitai::ScenarioExecutionResult

Inherits:
Object
  • Object
show all
Defined in:
lib/henitai/scenario_execution_result.rb

Overview

Captures the result of one baseline or mutant test run.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(status:, stdout:, stderr:, log_path:, exit_status: nil) ⇒ ScenarioExecutionResult

Returns a new instance of ScenarioExecutionResult.



18
19
20
21
22
23
24
# File 'lib/henitai/scenario_execution_result.rb', line 18

def initialize(status:, stdout:, stderr:, log_path:, exit_status: nil)
  @status = status
  @stdout = stdout.to_s
  @stderr = stderr.to_s
  @log_path = log_path
  @exit_status = exit_status
end

Instance Attribute Details

#exit_statusObject (readonly)

Returns the value of attribute exit_status.



6
7
8
# File 'lib/henitai/scenario_execution_result.rb', line 6

def exit_status
  @exit_status
end

#log_pathObject (readonly)

Returns the value of attribute log_path.



6
7
8
# File 'lib/henitai/scenario_execution_result.rb', line 6

def log_path
  @log_path
end

#statusObject (readonly)

Returns the value of attribute status.



6
7
8
# File 'lib/henitai/scenario_execution_result.rb', line 6

def status
  @status
end

#stderrObject (readonly)

Returns the value of attribute stderr.



6
7
8
# File 'lib/henitai/scenario_execution_result.rb', line 6

def stderr
  @stderr
end

#stdoutObject (readonly)

Returns the value of attribute stdout.



6
7
8
# File 'lib/henitai/scenario_execution_result.rb', line 6

def stdout
  @stdout
end

Class Method Details

.build(wait_result:, stdout:, stderr:, log_path:) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/henitai/scenario_execution_result.rb', line 8

def self.build(wait_result:, stdout:, stderr:, log_path:)
  new(
    status: status_for(wait_result),
    stdout: stdout,
    stderr: stderr,
    log_path: log_path,
    exit_status: exit_status_for(wait_result)
  )
end

Instance Method Details

#==(other) ⇒ Object



38
39
40
41
42
43
# File 'lib/henitai/scenario_execution_result.rb', line 38

def ==(other)
  return status == other.status if other.respond_to?(:status)
  return status == other if other.is_a?(Symbol)

  super
end

#combined_outputObject



53
54
55
56
57
58
# File 'lib/henitai/scenario_execution_result.rb', line 53

def combined_output
  [
    (stdout.empty? ? nil : stream_section("stdout", stdout)),
    (stderr.empty? ? nil : stream_section("stderr", stderr))
  ].compact.join("\n")
end

#failure_tail(all_logs: nil, lines: 12) ⇒ Object



68
69
70
71
72
73
# File 'lib/henitai/scenario_execution_result.rb', line 68

def failure_tail(all_logs: nil, lines: 12)
  return combined_output if all_logs
  return "" unless should_show_logs?(all_logs:)

  tail(lines)
end

#killed?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/henitai/scenario_execution_result.rb', line 30

def killed?
  status == :killed
end

#log_textObject



45
46
47
48
49
50
51
# File 'lib/henitai/scenario_execution_result.rb', line 45

def log_text
  @log_text ||= if File.exist?(log_path)
                  File.read(log_path)
                else
                  combined_output
                end
end

#should_show_logs?(all_logs: nil) ⇒ Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/henitai/scenario_execution_result.rb', line 64

def should_show_logs?(all_logs: nil)
  all_logs || timeout?
end

#survived?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/henitai/scenario_execution_result.rb', line 26

def survived?
  status == :survived
end

#tail(lines = 12) ⇒ Object



60
61
62
# File 'lib/henitai/scenario_execution_result.rb', line 60

def tail(lines = 12)
  log_text.lines.last(lines).join
end

#timeout?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/henitai/scenario_execution_result.rb', line 34

def timeout?
  status == :timeout
end