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/run-lcov.rb | |
parent | 3c8c17d30defb41399eed65f2cf0f30e5469fa07 (diff) |
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/run-lcov.rb')
-rw-r--r-- | tool/run-lcov.rb | 65 |
1 files changed, 60 insertions, 5 deletions
diff --git a/tool/run-lcov.rb b/tool/run-lcov.rb index daf52e69b3..47f4591463 100644 --- a/tool/run-lcov.rb +++ b/tool/run-lcov.rb @@ -50,6 +50,61 @@ def gen_rb_lcov(file) end end +def gen_rb_lcov(file) + res = Marshal.load(File.binread(file)) + + open("lcov-rb-all.info", "w") do |f| + f.puts "TN:" # no test name + base_dir = File.dirname(File.dirname(__dir__)) + res.each do |path, cov| + next unless path.start_with?(base_dir) + next if path.start_with?(File.join(base_dir, "test")) + f.puts "SF:#{ path }" + + # function coverage + total = covered = 0 + cov[:methods].each do |(name, lineno), count| + f.puts "FN:#{ lineno },#{ name }" + total += 1 + covered += 1 if count > 0 + end + f.puts "FNF:#{ total }" + f.puts "FNF:#{ covered }" + cov[:methods].each do |(name, _), count| + f.puts "FNDA:#{ count },#{ name }" + end + + # line coverage + total = covered = 0 + cov[:lines].each_with_index do |count, lineno| + next unless count + f.puts "DA:#{ lineno + 1 },#{ count }" + total += 1 + covered += 1 if count > 0 + end + f.puts "LF:#{ total }" + f.puts "LH:#{ covered }" + + # branch coverage + total = covered = 0 + id = 0 + cov[:branches].each do |(base_type, base_lineno), targets| + i = 0 + targets.each do |(target_type, target_lineno), count| + f.puts "BRDA:#{ base_lineno },#{ id },#{ i },#{ count }" + total += 1 + covered += 1 if count > 0 + i += 1 + end + id += 1 + end + f.puts "BRF:#{ total }" + f.puts "BRH:#{ covered }" + f.puts "end_of_record" + end + end +end + gcda_files = Pathname.glob("**/*.gcda") ext_gcda_files = gcda_files.select {|f| f.fnmatch("ext/*") } rubyspec_temp_gcda_files = gcda_files.select {|f| f.fnmatch("rubyspec_temp/*") } @@ -67,16 +122,16 @@ backup_gcda_files(rubyspec_temp_gcda_files) do end end if $info_files != [] - system("lcov", *$info_files.flat_map {|f| ["-a", f] }, "-o", "lcov-c-all.info") - system("genhtml", "--ignore-errors", "source", "lcov-c-all.info", "-o", "lcov-c-out") + system("lcov", *$info_files.flat_map {|f| ["-a", f] }, "--rc", "lcov_branch_coverage=1", "-o", "lcov-c-all.info") + system("genhtml", "--branch-coverage", "--ignore-errors", "source", "lcov-c-all.info", "-o", "lcov-c-out") end if File.readable?("test-coverage.dat") gen_rb_lcov("test-coverage.dat") - system("genhtml", "--ignore-errors", "source", "lcov-rb-all.info", "-o", "lcov-rb-out") + system("genhtml", "--branch-coverage", "--ignore-errors", "source", "lcov-rb-all.info", "-o", "lcov-rb-out") end if File.readable?("lcov-c-all.info") && File.readable?("lcov-rb-all.info") - system("lcov", "-a", "lcov-c-all.info", "-a", "lcov-rb-all.info", "-o", "lcov-all.info") || raise - system("genhtml", "--ignore-errors", "source", "lcov-all.info", "-o", "lcov-out") + system("lcov", "-a", "lcov-c-all.info", "-a", "lcov-rb-all.info", "--rc", "lcov_branch_coverage=1", "-o", "lcov-all.info") || raise + system("genhtml", "--branch-coverage", "--ignore-errors", "source", "lcov-all.info", "-o", "lcov-out") end |