]> git.openstreetmap.org Git - rails.git/blob - vendor/gems/rspec-1.1.2/lib/spec/rake/verify_rcov.rb
Show whether a trace is public or private in the trace list, so that a user can easil...
[rails.git] / vendor / gems / rspec-1.1.2 / lib / spec / rake / verify_rcov.rb
1 module RCov
2   # A task that can verify that the RCov coverage doesn't
3   # drop below a certain threshold. It should be run after
4   # running Spec::Rake::SpecTask.
5   class VerifyTask < Rake::TaskLib
6     # Name of the task. Defaults to :verify_rcov
7     attr_accessor :name
8     
9     # Path to the index.html file generated by RCov, which
10     # is the file containing the total coverage.
11     # Defaults to 'coverage/index.html'
12     attr_accessor :index_html
13     
14     # Whether or not to output details. Defaults to true.
15     attr_accessor :verbose
16     
17     # The threshold value (in percent) for coverage. If the 
18     # actual coverage is not equal to this value, the task will raise an 
19     # exception. 
20     attr_accessor :threshold
21     
22     # Require the threshold value be met exactly.  This is the default.
23     attr_accessor :require_exact_threshold
24     
25     def initialize(name=:verify_rcov)
26       @name = name
27       @index_html = 'coverage/index.html'
28       @verbose = true
29       @require_exact_threshold = true
30       yield self if block_given?
31       raise "Threshold must be set" if @threshold.nil?
32       define
33     end
34     
35     def define
36       desc "Verify that rcov coverage is at least #{threshold}%"
37       task @name do
38         total_coverage = nil
39
40         File.open(index_html).each_line do |line|
41           if line =~ /<tt class='coverage_total'>(\d+\.\d+)%<\/tt>/
42             total_coverage = eval($1)
43             break
44           end
45         end
46         puts "Coverage: #{total_coverage}% (threshold: #{threshold}%)" if verbose
47         raise "Coverage must be at least #{threshold}% but was #{total_coverage}%" if total_coverage < threshold
48         raise "Coverage has increased above the threshold of #{threshold}% to #{total_coverage}%. You should update your threshold value." if (total_coverage > threshold) and require_exact_threshold
49       end
50     end
51   end
52 end