127 lines
2.8 KiB
Ruby
127 lines
2.8 KiB
Ruby
#
|
|
# 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
|
|
|
|
|