Module: Testament::Probe

Defined in:
lib/testament/probe.rb,
lib/testament/probe/version.rb

Defined Under Namespace

Modules: MinitestIntegration

Constant Summary collapse

DEFAULT_OUTPUT =
".testament/per-test-coverage.json"
DEFAULT_TRACE_OUTPUT =
".testament/trace.json"
DEFAULT_TRACE_WINDOW =
200
ASSERTION_METHODS =
%i[
  expect should should_not to not_to to_not
  assert assert_equal assert_same assert_nil assert_not_nil assert_empty
  assert_includes assert_match assert_operator assert_predicate
  assert_instance_of assert_kind_of assert_raises assert_throws
  assert_output assert_silent
  refute refute_equal refute_same refute_nil refute_empty
  refute_includes refute_match refute_operator refute_predicate
  refute_instance_of refute_kind_of
  must_be must_equal must_include must_match must_raise must_be_nil
  wont_be wont_equal wont_include wont_match wont_be_nil
].freeze
VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.install!(output: ENV.fetch("TESTAMENT_PROBE_OUTPUT", DEFAULT_OUTPUT), trace_output: ENV.fetch("TESTAMENT_TRACE_OUTPUT", DEFAULT_TRACE_OUTPUT)) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/testament/probe.rb', line 25

def install!(
  output: ENV.fetch("TESTAMENT_PROBE_OUTPUT", DEFAULT_OUTPUT),
  trace_output: ENV.fetch("TESTAMENT_TRACE_OUTPUT", DEFAULT_TRACE_OUTPUT)
)
  @output = output
  @trace_output = trace_output
  @root = File.expand_path(ENV.fetch("TESTAMENT_PROJECT_ROOT", Dir.pwd))
  @probe_file = File.expand_path(__FILE__)
  @trace_window = ENV.fetch("TESTAMENT_TRACE_WINDOW", DEFAULT_TRACE_WINDOW).to_i
  @trace_enabled = ENV.fetch("TESTAMENT_TRACE", "1") != "0"
  start_coverage
  capture_coverage
  install_rspec if defined?(RSpec)
  install_minitest if defined?(Minitest::Test)
  at_exit { write! }
end

.record(case_id) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/testament/probe.rb', line 42

def record(case_id)
  start_coverage
  start_trace
  previous_case = @current_case
  previous_recent_lines = @recent_lines
  previous_assertion_depth = @assertion_depth
  @recent_lines = []
  @assertion_depth = 0
  @current_case = case_id
  trace_cases[case_id]
  yield
ensure
  merge_case(case_id, capture_coverage) if case_id
  @recent_lines = previous_recent_lines || []
  @assertion_depth = previous_assertion_depth || 0
  @current_case = previous_case
end

.write!Object



60
61
62
63
64
65
66
67
68
# File 'lib/testament/probe.rb', line 60

def write!
  output = @output || DEFAULT_OUTPUT
  FileUtils.mkdir_p(File.dirname(output))
  File.write(output, JSON.pretty_generate("cases" => cases))

  trace_output = @trace_output || DEFAULT_TRACE_OUTPUT
  FileUtils.mkdir_p(File.dirname(trace_output))
  File.write(trace_output, JSON.pretty_generate("cases" => trace_cases))
end