merged cont.
[opensuse:yast-rest-service.git] / webservice / test / cover_all.rb
1 #!/usr/bin/ruby
2 #--
3 # Webyast Webservice framework
4 #
5 # Copyright (C) 2009, 2010 Novell, Inc. 
6 #   This library is free software; you can redistribute it and/or modify
7 # it only under the terms of version 2.1 of the GNU Lesser General Public
8 # License as published by the Free Software Foundation. 
9 #
10 #   This library is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
13 # details. 
14 #
15 #   You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software 
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 #++
19
20 #
21 # Do full coverage test for .../webservice and .../../plugins/*
22 #
23 # Usage:
24 #
25 # ruby cover_all.rb 2> /dev/null
26 #
27
28 require 'find'
29
30 def coverage_test dir = "."
31   wd = Dir.getwd
32   Dir.chdir dir
33   puts "Coverage for #{dir}:"
34   coverage= Hash.new
35   task = nil
36   Dir.new("test").each do |f|
37     next if f[0,1] == "."
38     next if f[-1..-1] == "~"
39     next if f[-3..-1] == ".rb"
40     task = nil
41     case f.split("/").pop
42     when "unit": task = "units"
43     when "functional" : task = "functionals"
44     when "integration" : task = "integration"
45     end
46     next unless task
47     res = %x{rake test:#{task}:rcov}
48     res.scan(/^\|[^\.\s].*\.rb.*$/) do |c|
49       covs = c.split "|"
50       file = covs[1]
51       percent = covs[-1].to_f
52       coverage[file] = percent unless coverage[file] && (coverage[file] > percent)
53     end
54   end rescue nil
55   puts "*** No tests for #{dir}" unless task
56   coverage.each do |file,percent|
57     next if percent > 99.0
58     puts "  %6.2f%%  %-35s" % [percent, file]
59   end
60   Dir.chdir wd
61   puts
62 end
63
64 def visit_plugins dir = ".."
65   path = File.join(dir, "plugins")
66   Dir.new(path).each do |f|
67     next if f[0,1] == "."
68     coverage_test File.join(path,f)
69   end
70 end
71
72 coverage_test
73 visit_plugins