9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/covet/test_runners/rspec.rb', line 9
def self.hook_into_test_methods!
if @hooked
warn "Warning - Covet.register_coverage_collection! called multiple times"
return
end
gem 'rspec'
require 'rspec'
::RSpec.configuration.after(:suite) do
Covet.log_collection.finish!
end
run_num = @run_num
skips = @skips
failures = @failures
::RSpec.configuration.around(:each) do |test|
if run_num == 0
base_coverage = CovetCoverage.peek_result
base_coverage = Covet.normalize_coverage_info(base_coverage)
if base_coverage.empty?
warn "Warning - covet is not properly set up, as it must be required " \
"before other libraries to properly work.\nIf it isn't already, try " \
"adding\n require 'covet'\nas the first thing in your test helper file."
end
Covet::BASE_COVERAGE.update base_coverage
Covet.log_collection << ['base', base_coverage]
end
run_num += 1
before = CovetCoverage.peek_result
test.call
rspec_metadata = test.metadata
file = rspec_metadata[:file_path].sub(%r{\A\./}, '')
line = rspec_metadata[:line_number]
after = CovetCoverage.peek_result
before_orig = Covet.normalize_coverage_info(before)
if Covet::BASE_COVERAGE.any?
before = Covet.diff_coverages(Covet::BASE_COVERAGE, before_orig)
end
after_orig = Covet.normalize_coverage_info(after)
after = Covet.diff_coverages(before, after_orig)
if run_num > 1
if [:random_seeded, :ordered].include?(Covet.options[:test_order])
Covet::BASE_COVERAGE.update(after_orig)
end
end
if after == before
after = nil
end
Covet.log_collection << ["#{file}:#{line}", after]
end
@hooked = true
end
|