changelog shortlog tags changeset manifest revisions annotate raw

vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb

changeset 15: 64acf98d15f4
author: moriq@moriq.com
date: Mon Mar 10 10:12:58 2008 +0900 (16 years ago)
permissions: -rw-r--r--
description: add plugins rspec
1module 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
52end