rake/testing.rb
changeset 9 143e61e24c08
parent 8 308f7dc97753
child 10 389e66b0d38e
equal deleted inserted replaced
8:308f7dc97753 9:143e61e24c08
     1 # 
       
     2 # Testing Rake Tasks
       
     3 # $Id$
       
     4 # 
       
     5 # 
       
     6 
       
     7 
       
     8 # Keep these tasks optional by handling LoadErrors with stub task
       
     9 # replacements.
       
    10 begin
       
    11 	gem 'rspec', '>= 1.1.1'
       
    12 	require 'spec/rake/spectask'
       
    13 
       
    14 	COMMON_SPEC_OPTS = ['-c', '-f', 's']
       
    15 
       
    16 	### Task: spec
       
    17 	Spec::Rake::SpecTask.new( :spec ) do |task|
       
    18 		task.spec_files = SPEC_FILES
       
    19 		task.libs += [LIBDIR]
       
    20 		task.spec_opts = COMMON_SPEC_OPTS
       
    21 	end
       
    22 	task :test => [:spec]
       
    23 
       
    24 
       
    25 	namespace :spec do
       
    26 		desc "Generate HTML output for a spec run"
       
    27 		Spec::Rake::SpecTask.new( :html ) do |task|
       
    28 			task.spec_files = SPEC_FILES
       
    29 			task.spec_opts = ['-f','h', '-D']
       
    30 		end
       
    31 
       
    32 		desc "Generate plain-text output for a CruiseControl.rb build"
       
    33 		Spec::Rake::SpecTask.new( :text ) do |task|
       
    34 			task.spec_files = SPEC_FILES
       
    35 			task.spec_opts = ['-f','p']
       
    36 		end
       
    37 	end
       
    38 rescue LoadError => err
       
    39 	task :no_rspec do
       
    40 		$stderr.puts "Testing tasks not defined: RSpec rake tasklib not available: %s" %
       
    41 			[ err.message ]
       
    42 	end
       
    43 	
       
    44 	task :spec => :no_rspec
       
    45 	namespace :spec do
       
    46 		task :autotest => :no_rspec
       
    47 		task :html => :no_rspec
       
    48 		task :text => :no_rspec
       
    49 	end
       
    50 end
       
    51 
       
    52 
       
    53 
       
    54 ### RCov (via RSpec) tasks
       
    55 begin
       
    56 	gem 'rcov'
       
    57 	gem 'rspec', '>= 1.1.1'
       
    58 
       
    59 	COVERAGE_TARGETDIR = STATICWWWDIR + 'coverage'
       
    60 
       
    61 	RCOV_OPTS = ['--exclude', SPEC_EXCLUDES, '--xrefs', '--save']
       
    62 
       
    63 	### Task: coverage (via RCov)
       
    64 	### Task: spec
       
    65 	desc "Build test coverage reports"
       
    66 	Spec::Rake::SpecTask.new( :coverage ) do |task|
       
    67 		task.spec_files = SPEC_FILES
       
    68 		task.libs += [LIBDIR]
       
    69 		task.spec_opts = ['-f', 'p', '-b']
       
    70 		task.rcov_opts = RCOV_OPTS
       
    71 		task.rcov = true
       
    72 	end
       
    73 
       
    74 
       
    75 	task :rcov => [:coverage] do; end
       
    76 	
       
    77 	### Other coverage tasks
       
    78 	namespace :coverage do
       
    79 		desc "Generate a detailed text coverage report"
       
    80 		Spec::Rake::SpecTask.new( :text ) do |task|
       
    81 			task.spec_files = SPEC_FILES
       
    82 			task.rcov_opts = RCOV_OPTS + ['--text-report']
       
    83 			task.rcov = true
       
    84 		end
       
    85 
       
    86 		desc "Show differences in coverage from last run"
       
    87 		Spec::Rake::SpecTask.new( :diff ) do |task|
       
    88 			task.spec_files = SPEC_FILES
       
    89 			task.rcov_opts = ['--text-coverage-diff']
       
    90 			task.rcov = true
       
    91 		end
       
    92 
       
    93 		### Task: verify coverage
       
    94 		desc "Build coverage statistics"
       
    95 		VerifyTask.new( :verify => :rcov ) do |task|
       
    96 			task.threshold = 85.0
       
    97 		end
       
    98 		
       
    99 		desc "Run RCov in 'spec-only' mode to check coverage from specs"
       
   100 		Spec::Rake::SpecTask.new( :speconly ) do |task|
       
   101 			task.spec_files = SPEC_FILES
       
   102 			task.rcov_opts = ['--exclude', SPEC_EXCLUDES, '--text-report', '--save']
       
   103 			task.rcov = true
       
   104 		end
       
   105 	end
       
   106 
       
   107 	task :clobber_coverage do
       
   108 		rmtree( COVERAGE_TARGETDIR )
       
   109 	end
       
   110 
       
   111 rescue LoadError => err
       
   112 	task :no_rcov do
       
   113 		$stderr.puts "Coverage tasks not defined: RSpec+RCov tasklib not available: %s" %
       
   114 			[ err.message ]
       
   115 	end
       
   116 
       
   117 	task :coverage => :no_rcov
       
   118 	task :clobber_coverage
       
   119 	task :rcov => :no_rcov
       
   120 	namespace :coverage do
       
   121 		task :text => :no_rcov
       
   122 		task :diff => :no_rcov
       
   123 	end
       
   124 	task :verify => :no_rcov
       
   125 end
       
   126 
       
   127