From e43f304478fddea3ee8c53a82d5f9ae83b379768 Mon Sep 17 00:00:00 2001 From: mame Date: Thu, 14 Sep 2017 06:07:05 +0000 Subject: Measure branch and method coverage for `make test-all` To measure coverage of C code: `./configure --enable-gcov && make && make exam && make lcov` To measure coverage of Ruby code: `./configure && make && make exam COVERAGE=true && make lcov` To measure coverage of both languages at a time: `./configure --enable-gcov && make && make exam COVERAGE=true && make lcov` git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59890 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- tool/test-coverage.rb | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'tool/test-coverage.rb') diff --git a/tool/test-coverage.rb b/tool/test-coverage.rb index 0c002f4d1a..0719e5e703 100644 --- a/tool/test-coverage.rb +++ b/tool/test-coverage.rb @@ -1,6 +1,7 @@ require "coverage" -Coverage.start +ENV["COVERAGE_EXPERIMENTAL_MODE"] = "true" +Coverage.start(lines: true, branches: true, methods: true) TEST_COVERAGE_DATA_FILE = "test-coverage.dat" @@ -8,14 +9,22 @@ def merge_coverage_data(res1, res2) res1.each do |path, cov1| cov2 = res2[path] if cov2 - cov1.each_with_index do |count1, i| + cov1[:lines].each_with_index do |count1, i| next unless count1 - if cov2[i] - cov2[i] += count1 + add_count(cov2[:lines], i, count1) + end + cov1[:branches].each do |base_key, targets1| + if cov2[:branches][base_key] + targets1.each do |target_key, count1| + add_count(cov2[:branches][base_key], target_key, count1) + end else - cov2[i] = count1 + cov2[:branches][base_key] = targets1 end end + cov1[:methods].each do |key, count1| + add_count(cov2[:methods], key, count1) + end else res2[path] = cov1 end @@ -23,6 +32,14 @@ def merge_coverage_data(res1, res2) res2 end +def add_count(h, key, count) + if h[key] + h[key] += count + else + h[key] = count + end +end + def save_coverage_data(res1) File.open(TEST_COVERAGE_DATA_FILE, File::RDWR | File::CREAT | File::BINARY) do |f| f.flock(File::LOCK_EX) @@ -49,7 +66,7 @@ def invoke_simplecov_formatter res.each do |path, cov| next unless path.start_with?(base_dir) next if path.start_with?(File.join(base_dir, "test")) - simplecov_result[path] = cov + simplecov_result[path] = cov[:lines] end res = SimpleCov::Result.new(simplecov_result) -- cgit v1.2.3