diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-14 06:07:05 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-14 06:07:05 +0000 |
commit | e43f304478fddea3ee8c53a82d5f9ae83b379768 (patch) | |
tree | a817ce768cd90aeeb488dd7eaecbf2004f3d24e8 /tool/test-coverage.rb | |
parent | 3c8c17d30defb41399eed65f2cf0f30e5469fa07 (diff) | |
download | ruby-e43f304478fddea3ee8c53a82d5f9ae83b379768.tar.gz |
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
Diffstat (limited to 'tool/test-coverage.rb')
-rw-r--r-- | tool/test-coverage.rb | 29 |
1 files changed, 23 insertions, 6 deletions
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) |