diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-20 13:00:41 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-20 13:00:41 +0000 |
commit | 33710d4581a1eec94778e2041ca55e3f08849bd0 (patch) | |
tree | 238026a5a22bcbb29125d58cd507a89972cf7f59 /tool | |
parent | 41e800f6a8eb00147a366161b0893d97bb01b6b0 (diff) | |
download | ruby-33710d4581a1eec94778e2041ca55e3f08849bd0.tar.gz |
Add coverage measurement mode by using gcov
This experimental feature is only for Ruby-core team, not for casual users.
Usage: `./configure --enable-gcov && make && make exam && make gcov`
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool')
-rw-r--r-- | tool/run-gcov.rb | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tool/run-gcov.rb b/tool/run-gcov.rb new file mode 100644 index 0000000000..cbeb900d3f --- /dev/null +++ b/tool/run-gcov.rb @@ -0,0 +1,52 @@ +#!ruby +require "pathname" +require "open3" + +Pathname.glob("**/*.gcda").sort.each do |gcda| + if gcda.fnmatch("ext/*") + cwd, gcda = gcda.split.map {|s| s.to_s } + objdir = "." + else + cwd, objdir, gcda = ".", gcda.dirname.to_s, gcda.to_s + end + puts "$ gcov -lpbc -o #{ objdir } #{ gcda }" + out, err, _status = Open3.capture3("gcov", "-lpbc", "-o", objdir, gcda, chdir: cwd) + puts out + puts err + + # a black list of source files that contains wrong #line directives + if err !~ %r( + \A( + Cannot\ open\ source\ file\ ( + defs/keywords + |zonetab\.list + |enc/jis/props\.kwd + |parser\.c + |parser\.rl + )\n + )*\z + )x + raise "Unexpected gcov output" + end + + if out !~ %r( + \A( + File\ .*\nLines\ executed:.*\n + ( + Branches\ executed:.*\n + Taken\ at\ least\ once:.*\n + | + No\ branches\n + )? + ( + Calls\ executed:.*\n + | + No\ calls\n + )? + Creating\ .*\n + \n + )+\z + )x + raise "Unexpected gcov output" + end +end |