3 Coverage.start(lines: true, branches: true, methods: true)
5 TEST_COVERAGE_DATA_FILE = "test-coverage.dat"
9 lib/rubygems/resolver/molinillo
17 def merge_coverage_data(res1, res2)
18 res1.each do |path, cov1|
21 cov1[:lines].each_with_index do |count1, i|
23 add_count(cov2[:lines], i, count1)
25 cov1[:branches].each do |base_key, targets1|
26 if cov2[:branches][base_key]
27 targets1.each do |target_key, count1|
28 add_count(cov2[:branches][base_key], target_key, count1)
31 cov2[:branches][base_key] = targets1
34 cov1[:methods].each do |key, count1|
35 add_count(cov2[:methods], key, count1)
44 def add_count(h, key, count)
52 def save_coverage_data(res1)
53 res1.each do |_path, cov|
56 cov[:methods].each do |(klass, *key), count|
57 h[[klass.name, *key]] = count
59 cov[:methods].replace h
62 File.open(TEST_COVERAGE_DATA_FILE, File::RDWR | File::CREAT | File::BINARY) do |f|
63 f.flock(File::LOCK_EX)
65 res2 = s.size > 0 ? Marshal.load(s) : {}
66 res1 = merge_coverage_data(res1, res2)
68 f << Marshal.dump(res2)
74 def invoke_simplecov_formatter
75 # XXX docile-x.y.z and simplecov-x.y.z, simplecov-html-x.y.z, simplecov_json_formatter-x.y.z
76 %w[simplecov simplecov-html simplecov_json_formatter docile].each do |f|
77 Dir.glob("#{__dir__}/../.bundle/gems/#{f}-*/lib").each do |d|
83 res = Marshal.load(File.binread(TEST_COVERAGE_DATA_FILE))
85 base_dir = File.dirname(__dir__)
88 res.each do |path, cov|
89 next unless path.start_with?(base_dir) || path.start_with?(cur_dir)
90 next if FILTER_PATHS.any? {|dir| path.start_with?(File.join(base_dir, dir))}
91 simplecov_result[path] = cov
94 a, b = base_dir, cur_dir
104 SimpleCov.configure do
106 coverage_dir(File.join(cur_dir, "coverage"))
108 res = SimpleCov::Result.new(simplecov_result)
109 res.command_name = "Ruby's `make test-all`"
110 SimpleCov::Formatter::HTMLFormatter.new.format(res)
120 save_coverage_data(Coverage.result)
123 nil while Process.waitpid(-1)
125 invoke_simplecov_formatter
130 raise exit_exc if exit_exc