Skip to content

Commit

Permalink
Futureport RSpex 1.x's Rcov::VerifyTask.
Browse files Browse the repository at this point in the history
  • Loading branch information
aughr committed Sep 8, 2010
1 parent 9692666 commit 36082a2
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 8 deletions.
16 changes: 8 additions & 8 deletions Rakefile
Expand Up @@ -3,7 +3,7 @@ rspec_base = File.expand_path(File.dirname(__FILE__) + '/../rspec/lib')
$LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base) and !$LOAD_PATH.include?(rspec_base)

require 'rspec/core/rake_task'
#require 'spec/rake/verify_rcov'
require 'spec/verify_rcov' # a local file future-ported from RSpec 1.x

plugin_name = 'resources_controller'

Expand All @@ -22,13 +22,13 @@ RSpec::Core::RakeTask.new(:rcov) do |t|
t.rcov_opts = ['--output', 'doc/coverage','--text-report', '--exclude', "gems/,spec/,rcov.rb,#{File.expand_path(File.join(File.dirname(__FILE__),'../../..'))}"]
end

# namespace :rcov do
# desc "Verify RCov threshold for #{plugin_name}"
# RCov::VerifyTask.new(:verify => :rcov) do |t|
# t.threshold = 100.0
# t.index_html = File.join(File.dirname(__FILE__), 'doc/coverage/index.html')
# end
# end
namespace :rcov do
desc "Verify RCov threshold for #{plugin_name}"
RCov::VerifyTask.new(:verify => :rcov) do |t|
t.threshold = 100.0
t.index_html = File.join(File.dirname(__FILE__), 'doc/coverage/index.html')
end
end

# load up the tasks for testing rspec generators against RC
require File.join(File.dirname(__FILE__), 'spec/generate_rake_task')
Expand Down
52 changes: 52 additions & 0 deletions spec/verify_rcov.rb
@@ -0,0 +1,52 @@
module RCov
# A task that can verify that the RCov coverage doesn't
# drop below a certain threshold. It should be run after
# running Spec::Rake::SpecTask.
class VerifyTask < Rake::TaskLib
# Name of the task. Defaults to :verify_rcov
attr_accessor :name

# Path to the index.html file generated by RCov, which
# is the file containing the total coverage.
# Defaults to 'coverage/index.html'
attr_accessor :index_html

# Whether or not to output details. Defaults to true.
attr_accessor :verbose

# The threshold value (in percent) for coverage. If the
# actual coverage is not equal to this value, the task will raise an
# exception.
attr_accessor :threshold

# Require the threshold value be met exactly. This is the default.
attr_accessor :require_exact_threshold

def initialize(name=:verify_rcov)
@name = name
@index_html = 'coverage/index.html'
@verbose = true
@require_exact_threshold = true
yield self if block_given?
raise "Threshold must be set" if @threshold.nil?
define
end

def define
desc "Verify that rcov coverage is at least #{threshold}%"
task @name do
total_coverage = 0

File.open(index_html).each_line do |line|
if line =~ /<tt class='coverage_total'>\s*(\d+\.\d+)%\s*<\/tt>/
total_coverage = $1.to_f
break
end
end
puts "Coverage: #{total_coverage}% (threshold: #{threshold}%)" if verbose
raise "Coverage must be at least #{threshold}% but was #{total_coverage}%" if total_coverage < threshold
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
end
end
end
end

0 comments on commit 36082a2

Please sign in to comment.