rcov_rails 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Define a task library for performing code coverage analysis of unit tests
4
+ # using rcov.
5
+
6
+ require 'rake'
7
+ require 'rake/tasklib'
8
+
9
+ module RcovRails
10
+
11
+ # A variant of Rcov::RcovTask
12
+ # which lets me switch off descriptions on auto-generated tasks
13
+ #
14
+ # Example:
15
+ #
16
+ # require 'rcov_rails/rcovtask'
17
+ #
18
+ # RcovRails::RcovTask.new do |t|
19
+ # t.libs << "test"
20
+ # t.test_files = FileList['test/test*.rb']
21
+ # t.verbose = true
22
+ # end
23
+ #
24
+ # If rake is invoked with a "TEST=filename" command line option,
25
+ # then the list of test files will be overridden to include only the
26
+ # filename specified on the command line. This provides an easy way
27
+ # to run just one test.
28
+ #
29
+ # If rake is invoked with a "RCOVOPTS=options" command line option,
30
+ # then the given options are passed to rcov.
31
+ #
32
+ # If rake is invoked with a "RCOVPATH=path/to/rcov" command line option,
33
+ # then the given rcov executable will be used; otherwise the one in your
34
+ # PATH will be used.
35
+ #
36
+ # Examples:
37
+ #
38
+ # rake rcov # run tests normally
39
+ # rake rcov TEST=just_one_file.rb # run just one test file.
40
+ # rake rcov RCOVOPTS="-p" # run in profile mode
41
+ # rake rcov RCOVOPTS="-T" # generate text report
42
+ #
43
+ class RcovTask < Rake::TaskLib
44
+
45
+ # Name of test task. (default is :rcov)
46
+ attr_accessor :name
47
+
48
+ # List of directories to added to $LOAD_PATH before running the
49
+ # tests. (default is 'lib')
50
+ attr_accessor :libs
51
+
52
+ # True if verbose test output desired. (default is false)
53
+ attr_accessor :verbose
54
+
55
+ # Request that the tests be run with the warning flag set.
56
+ # E.g. warning=true implies "ruby -w" used to run the tests.
57
+ attr_accessor :warning
58
+
59
+ # Add Rake task descriptions to the generated tasks
60
+ attr_accessor :add_descriptions
61
+
62
+ # Glob pattern to match test files. (default is 'test/test*.rb')
63
+ attr_accessor :pattern
64
+
65
+ # Array of commandline options to pass to ruby when running the rcov loader.
66
+ attr_accessor :ruby_opts
67
+
68
+ # Array of commandline options to pass to rcov. An explicit
69
+ # RCOVOPTS=opts on the command line will override this. (default
70
+ # is <tt>["--text-report"]</tt>)
71
+ attr_accessor :rcov_opts
72
+
73
+ # Output directory for the XHTML report.
74
+ attr_accessor :output_dir
75
+
76
+ # Explicitly define the list of test files to be included in a
77
+ # test. +list+ is expected to be an array of file names (a
78
+ # FileList is acceptable). If both +pattern+ and +test_files+ are
79
+ # used, then the list of test files is the union of the two.
80
+ def test_files=(list)
81
+ @test_files = list
82
+ end
83
+
84
+ # Create a testing task.
85
+ def initialize(name=:rcov)
86
+ @name = name
87
+ @libs = ["lib"]
88
+ @pattern = nil
89
+ @test_files = nil
90
+ @verbose = false
91
+ @warning = false
92
+ @add_descriptions = true
93
+ @rcov_opts = ["--text-report"]
94
+ @ruby_opts = []
95
+ @output_dir = "coverage"
96
+ yield self if block_given?
97
+ @pattern = 'test/test*.rb' if @pattern.nil? && @test_files.nil?
98
+ define
99
+ end
100
+
101
+ # Create the tasks defined by this task lib.
102
+ def define
103
+ lib_path = @libs.join(File::PATH_SEPARATOR)
104
+ actual_name = Hash === name ? name.keys.first : name
105
+ if add_descriptions && !Rake.application.last_comment
106
+ desc "Analyze code coverage with tests" +
107
+ (@name==:rcov ? "" : " for #{actual_name}")
108
+ end
109
+ task @name do
110
+ run_code = ''
111
+ RakeFileUtils.verbose(@verbose) do
112
+ run_code =
113
+ case rcov_path
114
+ when nil, ''
115
+ "-S rcov"
116
+ else %!"#{rcov_path}"!
117
+ end
118
+ ruby_opts = @ruby_opts.clone
119
+ ruby_opts.push( "-I#{lib_path}" )
120
+ ruby_opts.push run_code
121
+ ruby_opts.push( "-w" ) if @warning
122
+ ruby ruby_opts.join(" ") + " " + option_list +
123
+ %[ -o "#{@output_dir}" ] +
124
+ file_list.collect { |fn| %["#{fn}"] }.join(' ')
125
+ end
126
+ end
127
+
128
+ desc "Remove rcov products for #{actual_name}" if add_descriptions
129
+ task paste("clobber_", actual_name) do
130
+ rm_r @output_dir rescue nil
131
+ end
132
+
133
+ clobber_task = paste("clobber_", actual_name)
134
+ task :clobber => [clobber_task]
135
+
136
+ task actual_name => clobber_task
137
+ self
138
+ end
139
+
140
+ def rcov_path # :nodoc:
141
+ ENV['RCOVPATH']
142
+ end
143
+
144
+ def option_list # :nodoc:
145
+ ENV['RCOVOPTS'] || @rcov_opts.join(" ") || ""
146
+ end
147
+
148
+ def file_list # :nodoc:
149
+ if ENV['TEST']
150
+ FileList[ ENV['TEST'] ]
151
+ else
152
+ result = []
153
+ result += @test_files.to_a if @test_files
154
+ result += FileList[ @pattern ].to_a if @pattern
155
+ FileList[result]
156
+ end
157
+ end
158
+ end
159
+ end
@@ -11,14 +11,12 @@
11
11
 
12
12
  begin
13
13
 
14
- require 'rcov/rcovtask'
14
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "rcov_rails/rcovtask"))
15
15
 
16
- def coverage_task(name, aspects, options={})
16
+ def coverage_task(name, aspects, task_description)
17
17
  aspect_tasks = aspects.map{ |aspect| "test:coverage:_#{aspect}" }
18
18
 
19
- if options[:description]
20
- desc options[:description]
21
- end
19
+ desc(task_description)
22
20
 
23
21
  task name => ["test:coverage:reset"] + aspect_tasks + ["test:coverage:generate"] do
24
22
  if PLATFORM['darwin']
@@ -34,14 +32,14 @@ begin
34
32
  namespace :coverage do
35
33
 
36
34
  ["units", "functionals", "integration"].each do |scope|
37
- Rcov::RcovTask.new("_#{scope}" => "db:test:prepare") do |t|
35
+ RcovRails::RcovTask.new("_#{scope}" => "db:test:prepare") do |t|
38
36
  t.libs << "test"
39
37
  t.test_files = Dir["test/#{scope.singularize}/**/*_test.rb"]
40
- t.add_descriptions = false if t.respond_to?(:add_descriptions=)
38
+ t.add_descriptions = false
41
39
  t.rcov_opts = ["--no-html", "--aggregate coverage.data", "--exclude '^(?!(app|lib))'"]
42
40
  end
43
41
 
44
- coverage_task(scope, [scope], :description => "run the #{scope} tests with coverage")
42
+ coverage_task(scope, [scope], "run the #{scope} tests with coverage")
45
43
  end
46
44
 
47
45
  task :reset do
@@ -49,16 +47,16 @@ begin
49
47
  rm_f "coverage"
50
48
  end
51
49
 
52
- Rcov::RcovTask.new(:generate) do |t|
50
+ RcovRails::RcovTask.new(:generate) do |t|
53
51
  t.libs << "test"
54
52
  t.test_files = []
55
- t.add_descriptions = false if t.respond_to?(:add_descriptions=)
53
+ t.add_descriptions = false
56
54
  t.rcov_opts = ["--html", "--aggregate coverage.data", "--exclude '^(?!(app|lib))'"]
57
55
  end
58
56
 
59
57
  end
60
58
 
61
- coverage_task(:coverage, [:units, :functionals, :integration])
59
+ coverage_task(:coverage, [:units, :functionals, :integration], "run all the tests with coverage")
62
60
 
63
61
  end
64
62
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 7
9
- version: 0.1.7
8
+ - 8
9
+ version: 0.1.8
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matthew Rudy Jacobs
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-12 00:00:00 +08:00
17
+ date: 2010-04-13 00:00:00 +08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -41,6 +41,7 @@ files:
41
41
  - MIT-LICENSE
42
42
  - README
43
43
  - lib/rcov_rails/railtie.rb
44
+ - lib/rcov_rails/rcovtask.rb
44
45
  - lib/rcov_rails.rb
45
46
  - lib/tasks/coverage.rake
46
47
  has_rdoc: true