rake/testing.rb
changeset 1 1d3cfd4837a8
--- /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
+
+