diff -r 1b096869b568 -r 1d3cfd4837a8 rake/testing.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rake/testing.rb Wed May 07 18:22:04 2008 +0000 @@ -0,0 +1,127 @@ +# +# Testing Rake Tasks +# $Id$ +# +# + + +# Keep these tasks optional by handling LoadErrors with stub task +# replacements. +begin + gem 'rspec', '>= 1.1.1' + require 'spec/rake/spectask' + + COMMON_SPEC_OPTS = ['-c', '-f', 's'] + + ### Task: spec + Spec::Rake::SpecTask.new( :spec ) do |task| + task.spec_files = SPEC_FILES + task.libs += [LIBDIR] + task.spec_opts = COMMON_SPEC_OPTS + end + task :test => [:spec] + + + namespace :spec do + desc "Generate HTML output for a spec run" + Spec::Rake::SpecTask.new( :html ) do |task| + task.spec_files = SPEC_FILES + task.spec_opts = ['-f','h', '-D'] + end + + desc "Generate plain-text output for a CruiseControl.rb build" + Spec::Rake::SpecTask.new( :text ) do |task| + task.spec_files = SPEC_FILES + task.spec_opts = ['-f','p'] + end + end +rescue LoadError => err + task :no_rspec do + $stderr.puts "Testing tasks not defined: RSpec rake tasklib not available: %s" % + [ err.message ] + end + + task :spec => :no_rspec + namespace :spec do + task :autotest => :no_rspec + task :html => :no_rspec + task :text => :no_rspec + end +end + + + +### RCov (via RSpec) tasks +begin + gem 'rcov' + gem 'rspec', '>= 1.1.1' + + COVERAGE_TARGETDIR = STATICWWWDIR + 'coverage' + + RCOV_OPTS = ['--exclude', SPEC_EXCLUDES, '--xrefs', '--save'] + + ### Task: coverage (via RCov) + ### Task: spec + desc "Build test coverage reports" + Spec::Rake::SpecTask.new( :coverage ) do |task| + task.spec_files = SPEC_FILES + task.libs += [LIBDIR] + task.spec_opts = ['-f', 'p', '-b'] + task.rcov_opts = RCOV_OPTS + task.rcov = true + end + + + task :rcov => [:coverage] do; end + + ### Other coverage tasks + namespace :coverage do + desc "Generate a detailed text coverage report" + Spec::Rake::SpecTask.new( :text ) do |task| + task.spec_files = SPEC_FILES + task.rcov_opts = RCOV_OPTS + ['--text-report'] + task.rcov = true + end + + desc "Show differences in coverage from last run" + Spec::Rake::SpecTask.new( :diff ) do |task| + task.spec_files = SPEC_FILES + task.rcov_opts = ['--text-coverage-diff'] + task.rcov = true + end + + ### Task: verify coverage + desc "Build coverage statistics" + VerifyTask.new( :verify => :rcov ) do |task| + task.threshold = 85.0 + end + + desc "Run RCov in 'spec-only' mode to check coverage from specs" + Spec::Rake::SpecTask.new( :speconly ) do |task| + task.spec_files = SPEC_FILES + task.rcov_opts = ['--exclude', SPEC_EXCLUDES, '--text-report', '--save'] + task.rcov = true + end + end + + task :clobber_coverage do + rmtree( COVERAGE_TARGETDIR ) + end + +rescue LoadError => err + task :no_rcov do + $stderr.puts "Coverage tasks not defined: RSpec+RCov tasklib not available: %s" % + [ err.message ] + end + + task :coverage => :no_rcov + task :clobber_coverage + task :rcov => :no_rcov + namespace :coverage do + task :text => :no_rcov + task :diff => :no_rcov + end + task :verify => :no_rcov +end + +