hoe 3.25.0 → 4.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55420e46afc4913200cd7bcb4ec75e026722a4b66471c95b3ba7e9d111782697
4
- data.tar.gz: 0ef8f2b3e9703c82a3e7fa84df62a18f28b8a10131afcd7a98064c3bcd98d349
3
+ metadata.gz: 59df54d9f8fe0c2c52e71f8fb63f492924a5f10e2a5fd6cb9246adbe14a49ebe
4
+ data.tar.gz: 8c0800c24176f4b2285b2f2d4283014dcb3c06a5951cc881b98d8c802070e81b
5
5
  SHA512:
6
- metadata.gz: a2a1f33e796aa3a0c2f442275d4da908558d7829bedf5e72fd329b2453b1a9621287ec6605099b207ac1bca8db2c089dbeba921c1976a4e147709bf59923a147
7
- data.tar.gz: 8a58eccbbb9270167a0edcd007cf0ca1278d2b1f5abae7e2c8d2846c1d4d63456976d69541806f63aa5f894f15c1e2f19506d8f8baf9aa29c43c74b9db9046d0
6
+ metadata.gz: 04f3f8733c99aa5aa427a7c74e8afe126b5bcad496f0b9acd3bd8793fcf167c3e78aad2b0acc789a92eca77f97f12526029a37afa2a8fe3a246b2a3c79a28bfb
7
+ data.tar.gz: 1a475a4a4288b64d8816ba8d093af3da57195165606462752060b65daf93567640992ed1517da756d52bc836703195137e67d8478d37b9a671367e0092ad60a1
checksums.yaml.gz.sig CHANGED
@@ -1,4 +1,3 @@
1
- o5�ܘΣ��2z@ޙ_<�Ym��+~ ���m��:+ZX$�@I�FB($��N�!@����fX1Q�*��?
2
- {W�?�ڳo��ߙeCa*%NE��Y7��ԯ��]3�'/i���vK��qu}�/������u���(KP�*dN�+�YS3n�o4Q3TsG�u0:(Bj4_g������:=�vcL`���OQo����M��d�ps�
3
- ����kpK�Ɨ�JE/=���(��o#��y
4
- �c%G�ݪ�~
1
+ ��D.���k�;���'���Pf����E)��X���w'�;�[���i@���=��0����N'[(�����пf�Y�� �>�r?��BE*�\�h;€t�Ͼ��T�T�' JظG
2
+ n"Z��w��Sh�\�&��u��h�8��2^nJ���hc6L�$S[*.u�� N)�٥XTY��%��T 7�BWF���^/�����H��r _
3
+ I�+6<�X��w){S"�PT ���YV��^azk�x
data/History.rdoc CHANGED
@@ -1,3 +1,14 @@
1
+ === 3.26.0 / 2022-10-20
2
+
3
+ * 2 minor enhancements:
4
+
5
+ * Added warning to bundled minitest/test_task.
6
+ * Removed dead rcov plugin and added (simple)cov plugin.
7
+
8
+ * 1 bug fix:
9
+
10
+ * Fixed test task load path issue, prepend Hoe.include_dirs to ensure they come first.
11
+
1
12
  === 3.25.0 / 2022-08-18
2
13
 
3
14
  * 1 minor enhancement:
data/Manifest.txt CHANGED
@@ -8,6 +8,7 @@ bin/sow
8
8
  lib/hoe.rb
9
9
  lib/hoe/clean.rb
10
10
  lib/hoe/compiler.rb
11
+ lib/hoe/cov.rb
11
12
  lib/hoe/debug.rb
12
13
  lib/hoe/deps.rb
13
14
  lib/hoe/flay.rb
@@ -20,11 +21,9 @@ lib/hoe/package.rb
20
21
  lib/hoe/publish.rb
21
22
  lib/hoe/racc.rb
22
23
  lib/hoe/rake.rb
23
- lib/hoe/rcov.rb
24
24
  lib/hoe/rdoc.rb
25
25
  lib/hoe/signing.rb
26
26
  lib/hoe/test.rb
27
- lib/minitest/test_task.rb
28
27
  template/.autotest.erb
29
28
  template/History.txt.erb
30
29
  template/Manifest.txt.erb
data/Rakefile CHANGED
@@ -6,6 +6,7 @@ require "./lib/hoe.rb"
6
6
  Hoe.plugin :seattlerb
7
7
  Hoe.plugin :isolate
8
8
  Hoe.plugin :rdoc
9
+ Hoe.plugin :cov
9
10
 
10
11
  Hoe.spec "hoe" do
11
12
  developer "Ryan Davis", "ryand-ruby@zenspider.com"
data/lib/hoe/clean.rb CHANGED
@@ -16,7 +16,7 @@ module Hoe::Clean
16
16
 
17
17
  def initialize_clean
18
18
  self.clean_globs ||= %w[diff diff.txt TAGS ri deps .source_index
19
- *.gem **/*~ **/.*~ **/*.rbc coverage*]
19
+ *.gem **/*~ **/.*~ **/*.rbc]
20
20
  end
21
21
 
22
22
  ##
data/lib/hoe/cov.rb ADDED
@@ -0,0 +1,34 @@
1
+ ##
2
+ # Coverage plugin for hoe. Uses simplecov.
3
+ #
4
+ # === Tasks Provided:
5
+ #
6
+ # cov:: Analyze code coverage with tests using simplecov.
7
+
8
+ module Hoe::Cov
9
+
10
+ ##
11
+ # Activate the cov dependencies.
12
+
13
+ def activate_cov_deps
14
+ dependency "simplecov", "~> 0.21", :development
15
+ end
16
+
17
+ ##
18
+ # Define tasks for plugin.
19
+
20
+ def define_cov_tasks
21
+ task :isolate # ensure it exists
22
+
23
+ self.clean_globs << "coverage"
24
+
25
+ desc "Run tests and analyze code coverage"
26
+ task :cov => :isolate do
27
+ test_task.test_prelude = "require \"simplecov\"; SimpleCov.start"
28
+
29
+ Rake::Task[:test].invoke
30
+ end
31
+ rescue LoadError
32
+ warn "simplecov not found"
33
+ end
34
+ end
data/lib/hoe/test.rb CHANGED
@@ -10,17 +10,10 @@
10
10
  # test_deps:: Show which test files fail when run alone.
11
11
 
12
12
  module Hoe::Test
13
- def deprecate msg # :nodoc:
14
- where = caller_locations[1]
15
-
16
- warn "DEPRECATED: %s from %s" % [msg, where]
17
- end
18
-
19
13
  ##
20
14
  # Configuration for the supported test frameworks for test task.
21
15
 
22
16
  SUPPORTED_TEST_FRAMEWORKS = {
23
- :testunit => "test/unit",
24
17
  :minitest => "minitest/autorun",
25
18
  :none => nil,
26
19
  }
@@ -47,14 +40,9 @@ module Hoe::Test
47
40
  attr_accessor :test_prelude
48
41
 
49
42
  ##
50
- # Optional: RSpec dirs. [default: %w(spec lib)]
51
-
52
- attr_accessor :rspec_dirs
53
-
54
- ##
55
- # Optional: RSpec options. [default: []]
43
+ # The test task created for this plugin.
56
44
 
57
- attr_accessor :rspec_options
45
+ attr_accessor :test_task
58
46
 
59
47
  ##
60
48
  # Initialize variables for plugin.
@@ -63,8 +51,7 @@ module Hoe::Test
63
51
  self.multiruby_skip ||= []
64
52
  self.testlib ||= :minitest
65
53
  self.test_prelude ||= nil
66
- self.rspec_dirs ||= %w[spec lib]
67
- self.rspec_options ||= []
54
+ self.test_task = nil
68
55
  end
69
56
 
70
57
  ##
@@ -78,43 +65,12 @@ module Hoe::Test
78
65
  if File.directory? "test" then
79
66
  case testlib
80
67
  when :minitest then
81
- require "minitest/test_task" # currently in hoe, but will move
68
+ require "minitest/test_task" # in minitest 5.16+
82
69
 
83
70
  test_prelude = self.test_prelude
84
- Minitest::TestTask.create :test do |t|
71
+ self.test_task = Minitest::TestTask.create :test do |t|
85
72
  t.test_prelude = test_prelude
86
- t.libs += Hoe.include_dirs.uniq
87
- end
88
- when :testunit then
89
- desc "Run the test suite. Use FILTER or TESTOPTS to add flags/args."
90
- task :test do
91
- ruby make_test_cmd
92
- end
93
-
94
- desc "Print out the test command. Good for profiling and other tools."
95
- task :test_cmd do
96
- puts make_test_cmd
97
- end
98
-
99
- desc "Show which test files fail when run alone."
100
- task :test_deps do
101
- tests = Dir[*self.test_globs].uniq
102
-
103
- paths = %w[bin lib test].join(File::PATH_SEPARATOR)
104
- null_dev = Hoe::WINDOZE ? "> NUL 2>&1" : "> /dev/null 2>&1"
105
-
106
- tests.each do |test|
107
- unless system "ruby -I#{paths} #{test} #{null_dev}" then
108
- puts "Dependency Issues: #{test}"
109
- end
110
- end
111
- end
112
-
113
- if testlib == :minitest then
114
- desc "Show bottom 25 tests wrt time."
115
- task "test:slow" do
116
- sh "rake TESTOPTS=-v | sort -n -k2 -t= | tail -25"
117
- end
73
+ t.libs.prepend Hoe.include_dirs.uniq
118
74
  end
119
75
  when :none then
120
76
  # do nothing
@@ -135,16 +91,6 @@ module Hoe::Test
135
91
  default_tasks << :test
136
92
  end
137
93
 
138
- if File.directory? "spec" then
139
- found = try_loading_rspec2 || try_loading_rspec1
140
-
141
- if found then
142
- default_tasks << :spec
143
- else
144
- warn "Found spec dir, but couldn't load rspec (1 or 2) task. skipping."
145
- end
146
- end
147
-
148
94
  desc "Run the default task(s)."
149
95
  task :default => default_tasks
150
96
 
@@ -154,71 +100,4 @@ module Hoe::Test
154
100
  sh "zentest -I=#{libs} #{spec.files.grep(/^(lib|test)/).join(" ")}"
155
101
  end
156
102
  end
157
-
158
- ##
159
- # Generate the test command-line.
160
-
161
- def make_test_cmd
162
- unless SUPPORTED_TEST_FRAMEWORKS.key?(testlib)
163
- raise "unsupported test framework #{testlib}"
164
- end
165
-
166
- deprecate "Moving to Minitest::TestTask. Let me know if you use this!"
167
-
168
- framework = SUPPORTED_TEST_FRAMEWORKS[testlib]
169
-
170
- tests = ["rubygems"]
171
- tests << framework if framework
172
- tests << test_globs.sort.map { |g| Dir.glob(g) }
173
- tests.flatten!
174
- tests.map! { |f| %(require "#{f}") }
175
-
176
- tests.insert 1, test_prelude if test_prelude
177
-
178
- filter = (ENV["FILTER"] || ENV["TESTOPTS"] || "").dup
179
- filter << " -n #{ENV["N"]}" if ENV["N"]
180
- filter << " -e #{ENV["X"]}" if ENV["X"]
181
-
182
- "#{Hoe::RUBY_FLAGS} -e '#{tests.join("; ")}' -- #{filter}"
183
- end
184
-
185
- ##
186
- # Attempt to load RSpec 2, returning true if successful
187
-
188
- def try_loading_rspec2
189
- deprecate "I want to drop this entirely. Let me know if you use this!"
190
-
191
- require "rspec/core/rake_task"
192
-
193
- desc "Run all specifications"
194
- RSpec::Core::RakeTask.new(:spec) do |t|
195
- t.rspec_opts = self.rspec_options
196
- t.rspec_opts << "-I#{self.rspec_dirs.join(":")}" unless
197
- rspec_dirs.empty?
198
- end
199
-
200
- true
201
- rescue LoadError => err
202
- warn "%p while trying to load RSpec 2: %s" % [ err.class, err.message ]
203
- false
204
- end
205
-
206
- ##
207
- # Attempt to load RSpec 1, returning true if successful
208
-
209
- def try_loading_rspec1
210
- deprecate "I want to drop this entirely. Let me know if you use this!"
211
-
212
- require "spec/rake/spectask"
213
-
214
- desc "Run all specifications"
215
- Spec::Rake::SpecTask.new(:spec) do |t|
216
- t.libs = self.rspec_dirs
217
- t.spec_opts = self.rspec_options
218
- end
219
- true
220
- rescue LoadError => err
221
- warn "%p while trying to load RSpec 1: %s" % [ err.class, err.message ]
222
- false
223
- end
224
103
  end
data/lib/hoe.rb CHANGED
@@ -87,7 +87,7 @@ class Hoe
87
87
  include Rake::DSL if defined?(Rake::DSL)
88
88
 
89
89
  # duh
90
- VERSION = "3.25.0"
90
+ VERSION = "4.0.0"
91
91
 
92
92
  @@plugins = [:clean, :debug, :deps, :flay, :flog, :newb, :package,
93
93
  :publish, :gemcutter, :signing, :test]
@@ -726,10 +726,7 @@ class Hoe
726
726
  if lines.first =~ /::/ then
727
727
  Hash[lines.map { |line| line.split(/\s*::\s*/) }]
728
728
  else
729
- warn "DEPRECATED: Please switch readme to hash format for urls."
730
- warn " Only defining 'home' url."
731
- warn " This will be removed on or after 2020-10-28."
732
- { "home" => lines.first }
729
+ raise "Please switch readme to hash format for urls."
733
730
  end
734
731
  end
735
732
 
data/test/test_hoe.rb CHANGED
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  require "minitest/autorun"
3
2
  require "hoe"
4
3
  require "tempfile"
@@ -192,11 +191,8 @@ class TestHoe < Minitest::Test
192
191
  "* http://docs.seattlerb.org/hoe/Hoe.pdf",
193
192
  "* http://github.com/jbarnette/hoe-plugin-examples"].join "\n"
194
193
 
195
- exp = { "home" => "https://github.com/seattlerb/hoe" }
196
- err = /DEPRECATED: Please switch readme to hash format/
197
-
198
- assert_output "", err do
199
- assert_equal exp, hoe.parse_urls(ary)
194
+ assert_raises RuntimeError do
195
+ hoe.parse_urls ary
200
196
  end
201
197
  end
202
198
 
@@ -265,7 +261,7 @@ class TestHoe < Minitest::Test
265
261
  h = nil
266
262
  nokogiri_readme = <<~EOM
267
263
  ## Links
268
-
264
+
269
265
  * https://nokogiri.org
270
266
  * [Installation Help](https://nokogiri.org/tutorials/installing_nokogiri.html)
271
267
  * [Tutorials](https://nokogiri.org/tutorials/toc.html)
@@ -1,8 +1,7 @@
1
+ require "minitest/autorun"
1
2
  require "hoe"
2
- require File.expand_path "lib/hoe/debug.rb" # ugh. avoid dupe warnings
3
+ require_relative "../lib/hoe/debug"
3
4
  require "tmpdir"
4
- require "tempfile"
5
- require "minitest/autorun"
6
5
 
7
6
  class TestHoeDebug < Minitest::Test
8
7
 
@@ -1,6 +1,6 @@
1
- require "hoe"
2
- require "hoe/gemcutter" unless defined? Hoe::Gemcutter
3
1
  require "minitest/autorun"
2
+ require "hoe"
3
+ require_relative "../lib/hoe/gemcutter"
4
4
 
5
5
  class TestHoeGemcutter < Minitest::Test
6
6
  include Hoe::Gemcutter
@@ -1,5 +1,5 @@
1
- require "hoe"
2
1
  require "minitest/autorun"
2
+ require "hoe"
3
3
 
4
4
  Hoe.load_plugins
5
5
 
@@ -1,4 +1,3 @@
1
- require "rubygems"
2
1
  require "minitest/autorun"
3
2
  require "hoe"
4
3
 
@@ -1,5 +1,6 @@
1
1
  require "minitest/autorun"
2
2
  require "hoe"
3
+ require "minitest/test_task" # currently in hoe, but will move
3
4
 
4
5
  Hoe.load_plugins # make sure Hoe::Test is loaded
5
6
 
@@ -18,14 +19,6 @@ class TestHoeTest < Minitest::Test
18
19
  end
19
20
  end
20
21
 
21
- def assert_deprecated
22
- err_re = /DEPRECATED:/
23
-
24
- assert_output "", err_re do
25
- yield
26
- end
27
- end
28
-
29
22
  path = %w[lib bin test .].join File::PATH_SEPARATOR
30
23
  mt_path = %w[lib test .].join File::PATH_SEPARATOR
31
24
 
@@ -37,34 +30,12 @@ class TestHoeTest < Minitest::Test
37
30
  -e '%srequire "test/test_hoe_test.rb"'
38
31
  --].join(" ") + " "
39
32
 
40
- def test_make_test_cmd_defaults_to_minitest
41
- skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
42
-
43
- # default
44
- assert_deprecated do
45
- autorun = %(require "minitest/autorun"; )
46
- assert_equal EXPECTED % autorun, @tester.make_test_cmd
47
- end
48
- end
49
-
50
- def test_make_test_cmd_for_testunit
51
- skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
52
-
53
- assert_deprecated do
54
- @tester.testlib = :testunit
55
- testunit = %(require "test/unit"; )
56
- assert_equal EXPECTED % testunit, @tester.make_test_cmd
57
- end
58
- end
59
-
60
33
  def test_make_test_cmd_for_minitest
61
34
  skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
62
35
 
63
- require "minitest/test_task" # currently in hoe, but will move
64
-
65
36
  framework = %(require "minitest/autorun"; )
66
37
 
67
- @tester = Minitest::TestTask.create :test do |t|
38
+ @tester = Minitest::TestTask.create :testtest do |t|
68
39
  t.libs += Hoe.include_dirs.uniq
69
40
  t.test_globs = ["test/test_hoe_test.rb"]
70
41
  end
@@ -75,8 +46,6 @@ class TestHoeTest < Minitest::Test
75
46
  def test_make_test_cmd_for_minitest_prelude
76
47
  skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
77
48
 
78
- require "minitest/test_task" # currently in hoe, but will move
79
-
80
49
  prelude = %(require "other/file")
81
50
  framework = %(require "minitest/autorun"; )
82
51
 
@@ -88,24 +57,4 @@ class TestHoeTest < Minitest::Test
88
57
 
89
58
  assert_equal MT_EXPECTED % [prelude, framework].join("; "), @tester.make_test_cmd
90
59
  end
91
-
92
- def test_make_test_cmd_for_no_framework
93
- skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
94
-
95
- assert_deprecated do
96
- @tester.testlib = :none
97
- assert_equal EXPECTED % "", @tester.make_test_cmd
98
- end
99
- end
100
-
101
- def test_make_test_cmd_for_faketestlib
102
- skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
103
-
104
- @tester.testlib = :faketestlib
105
- e = assert_raises(RuntimeError) do
106
- @tester.make_test_cmd
107
- end
108
-
109
- assert_equal "unsupported test framework faketestlib", e.to_s
110
- end
111
60
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hoe
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.25.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -29,7 +29,7 @@ cert_chain:
29
29
  JFmxn4h9YO/pVdB962BdBNNDia0kgIjI3ENnkLq0dKpYU3+F3KhEuTksLO0L6X/V
30
30
  YsuyUzsMz6GQA4khyaMgKNSD
31
31
  -----END CERTIFICATE-----
32
- date: 2022-08-18 00:00:00.000000000 Z
32
+ date: 2022-12-15 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: rake
@@ -51,20 +51,6 @@ dependencies:
51
51
  - - "<"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '15.0'
54
- - !ruby/object:Gem::Dependency
55
- name: minitest
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '5.16'
61
- type: :development
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '5.16'
68
54
  - !ruby/object:Gem::Dependency
69
55
  name: rdoc
70
56
  requirement: !ruby/object:Gem::Requirement
@@ -85,6 +71,20 @@ dependencies:
85
71
  - - "<"
86
72
  - !ruby/object:Gem::Version
87
73
  version: '7'
74
+ - !ruby/object:Gem::Dependency
75
+ name: simplecov
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '0.21'
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '0.21'
88
88
  description: |-
89
89
  Hoe is a rake/rubygems helper for project Rakefiles. It helps you
90
90
  manage, maintain, and release your project and includes a dynamic
@@ -116,6 +116,7 @@ files:
116
116
  - lib/hoe.rb
117
117
  - lib/hoe/clean.rb
118
118
  - lib/hoe/compiler.rb
119
+ - lib/hoe/cov.rb
119
120
  - lib/hoe/debug.rb
120
121
  - lib/hoe/deps.rb
121
122
  - lib/hoe/flay.rb
@@ -128,11 +129,9 @@ files:
128
129
  - lib/hoe/publish.rb
129
130
  - lib/hoe/racc.rb
130
131
  - lib/hoe/rake.rb
131
- - lib/hoe/rcov.rb
132
132
  - lib/hoe/rdoc.rb
133
133
  - lib/hoe/signing.rb
134
134
  - lib/hoe/test.rb
135
- - lib/minitest/test_task.rb
136
135
  - template/.autotest.erb
137
136
  - template/History.txt.erb
138
137
  - template/Manifest.txt.erb
metadata.gz.sig CHANGED
Binary file
data/lib/hoe/rcov.rb DELETED
@@ -1,68 +0,0 @@
1
- ##
2
- # RCov plugin for hoe.
3
- #
4
- # === Tasks Provided:
5
- #
6
- # rcov:: Analyze code coverage with tests
7
-
8
- module Hoe::RCov
9
-
10
- ##
11
- # Activate the rcov dependencies.
12
-
13
- def activate_rcov_deps
14
- dependency "rcov", "~> 0.9", :development
15
- end
16
-
17
- ##
18
- # Define tasks for plugin.
19
-
20
- def define_rcov_tasks
21
- task :isolate # ensure it exists
22
-
23
- task :rcov => :isolate do
24
- sh(*make_rcov_cmd)
25
- end
26
-
27
- task :clobber_rcov do
28
- rm_rf "coverage"
29
- end
30
-
31
- task :clobber => :clobber_rcov
32
-
33
- # this is for my emacs rcov overlay stuff on emacswiki.
34
- task :rcov_overlay do
35
- path = ENV["FILE"]
36
- rcov, eol = Marshal.load(File.read("coverage.info")).last[path], 1
37
- puts rcov[:lines].zip(rcov[:coverage]).map { |line, coverage|
38
- bol, eol = eol, eol + line.length
39
- [bol, eol, "#ffcccc"] unless coverage
40
- }.compact.inspect
41
- end
42
- rescue LoadError
43
- # skip
44
- task :clobber_rcov # in case rcov didn't load
45
- # TODO: didn't load? this must be terribly historical
46
- end
47
-
48
- def make_rcov_cmd # :nodoc:
49
- rcov = Gem.bin_wrapper "rcov"
50
- tests = test_globs.sort.map { |g| Dir.glob(g) }.flatten.map(&:inspect)
51
-
52
- cmd = %W[#{rcov}
53
- #{Hoe::RUBY_FLAGS}
54
- --text-report
55
- --no-color
56
- --save coverage.info
57
- -x ^/
58
- -x tmp/isolate
59
- --sort coverage
60
- --sort-reverse
61
- -o coverage
62
- ] + tests
63
-
64
- cmd
65
- end
66
- end
67
-
68
- task :clean => :clobber_rcov
@@ -1,305 +0,0 @@
1
- require "shellwords"
2
- require "rbconfig"
3
- require "rake/tasklib"
4
-
5
- module Minitest # :nodoc:
6
-
7
- ##
8
- # Minitest::TestTask is a rake helper that generates several rake
9
- # tasks under the main test task's name-space.
10
- #
11
- # task <name> :: the main test task
12
- # task <name>:cmd :: prints the command to use
13
- # task <name>:deps :: runs each test file by itself to find dependency errors
14
- # task <name>:slow :: runs the tests and reports the slowest 25 tests.
15
- #
16
- # Examples:
17
- #
18
- # Minitest::TestTask.create
19
- #
20
- # The most basic and default setup.
21
- #
22
- # Minitest::TestTask.create :my_tests
23
- #
24
- # The most basic/default setup, but with a custom name
25
- #
26
- # Minitest::TestTask.create :unit do |t|
27
- # t.test_globs = ["test/unit/**/*_test.rb"]
28
- # t.warning = false
29
- # end
30
- #
31
- # Customize the name and only run unit tests.
32
-
33
- class TestTask < Rake::TaskLib
34
- WINDOWS = RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ # :nodoc:
35
-
36
- ##
37
- # Create several test-oriented tasks under +name+. Takes an
38
- # optional block to customize variables.
39
-
40
- def self.create name = :test, &block
41
- task = new name
42
- task.instance_eval(&block) if block
43
- task.process_env
44
- task.define
45
- task
46
- end
47
-
48
- ##
49
- # Extra arguments to pass to the tests. Defaults empty but gets
50
- # populated by a number of enviroment variables:
51
- #
52
- # N (-n flag) :: a string or regexp of tests to run.
53
- # X (-e flag) :: a string or regexp of tests to exclude.
54
- # A (arg) :: quick way to inject an arbitrary argument (eg A=--help).
55
- #
56
- # See #process_env
57
-
58
- attr_accessor :extra_args
59
-
60
- ##
61
- # The code to load the framework. Defaults to requiring
62
- # minitest/autorun...
63
- #
64
- # Why do I have this as an option?
65
-
66
- attr_accessor :framework
67
-
68
- ##
69
- # Extra library directories to include. Defaults to %w[lib test
70
- # .]. Also uses $MT_LIB_EXTRAS allowing you to dynamically
71
- # override/inject directories for custom runs.
72
-
73
- attr_accessor :libs
74
-
75
- ##
76
- # The name of the task and base name for the other tasks generated.
77
-
78
- attr_accessor :name
79
-
80
- ##
81
- # File globs to find test files. Defaults to something sensible to
82
- # find test files under the test directory.
83
-
84
- attr_accessor :test_globs
85
-
86
- ##
87
- # Turn on ruby warnings (-w flag). Defaults to true.
88
-
89
- attr_accessor :warning
90
-
91
- ##
92
- # Optional: Additional ruby to run before the test framework is loaded.
93
-
94
- attr_accessor :test_prelude
95
-
96
- ##
97
- # Print out commands as they run. Defaults to Rake's +trace+ (-t
98
- # flag) option.
99
-
100
- attr_accessor :verbose
101
-
102
- ##
103
- # Use TestTask.create instead.
104
-
105
- def initialize name = :test # :nodoc:
106
- self.extra_args = []
107
- self.framework = %(require "minitest/autorun")
108
- self.libs = %w[lib test .]
109
- self.name = name
110
- self.test_globs = ["test/**/{test,spec}_*.rb",
111
- "test/**/*_{test,spec}.rb"]
112
- self.test_prelude = nil
113
- self.verbose = Rake.application.options.trace
114
- self.warning = true
115
- end
116
-
117
- ##
118
- # Extract variables from the environment and convert them to
119
- # command line arguments. See #extra_args.
120
- #
121
- # Environment Variables:
122
- #
123
- # MT_LIB_EXTRAS :: Extra libs to dynamically override/inject for custom runs.
124
- # N :: Tests to run (string or /regexp/).
125
- # X :: Tests to exclude (string or /regexp/).
126
- # A :: Any extra arguments. Honors shell quoting.
127
- #
128
- # Deprecated:
129
- #
130
- # TESTOPTS :: For argument passing, use +A+.
131
- # N :: For parallel testing, use +MT_CPU+.
132
- # FILTER :: Same as +TESTOPTS+.
133
-
134
- def process_env
135
- warn "TESTOPTS is deprecated in Minitest::TestTask. Use A instead" if
136
- ENV["TESTOPTS"]
137
- warn "FILTER is deprecated in Minitest::TestTask. Use A instead" if
138
- ENV["FILTER"]
139
- warn "N is deprecated in Minitest::TestTask. Use MT_CPU instead" if
140
- ENV["N"] && ENV["N"].to_i > 0
141
-
142
- lib_extras = (ENV["MT_LIB_EXTRAS"] || "").split File::PATH_SEPARATOR
143
- self.libs[0,0] = lib_extras
144
-
145
- extra_args << "-n" << ENV["N"] if ENV["N"]
146
- extra_args << "-e" << ENV["X"] if ENV["X"]
147
- extra_args.concat Shellwords.split(ENV["TESTOPTS"]) if ENV["TESTOPTS"]
148
- extra_args.concat Shellwords.split(ENV["FILTER"]) if ENV["FILTER"]
149
- extra_args.concat Shellwords.split(ENV["A"]) if ENV["A"]
150
-
151
- ENV.delete "N" if ENV["N"]
152
-
153
- # TODO? RUBY_DEBUG = ENV["RUBY_DEBUG"]
154
- # TODO? ENV["RUBY_FLAGS"]
155
-
156
- extra_args.compact!
157
- end
158
-
159
- def define # :nodoc:
160
- default_tasks = []
161
-
162
- desc "Run the test suite. Use N, X, A, and TESTOPTS to add flags/args."
163
- task name do
164
- ruby make_test_cmd, verbose:verbose
165
- end
166
-
167
- desc "Print out the test command. Good for profiling and other tools."
168
- task "#{name}:cmd" do
169
- puts "ruby #{make_test_cmd}"
170
- end
171
-
172
- desc "Show which test files fail when run in isolation."
173
- task "#{name}:isolated" do
174
- tests = Dir[*self.test_globs].uniq
175
-
176
- # 3 seems to be the magic number... (tho not by that much)
177
- bad, good, n = {}, [], (ENV.delete("K") || 3).to_i
178
- file = ENV.delete("F")
179
- times = {}
180
-
181
- tt0 = Time.now
182
-
183
- n.threads_do tests.sort do |path|
184
- t0 = Time.now
185
- output = `#{Gem.ruby} #{make_test_cmd path} 2>&1`
186
- t1 = Time.now - t0
187
-
188
- times[path] = t1
189
-
190
- if $?.success?
191
- $stderr.print "."
192
- good << path
193
- else
194
- $stderr.print "x"
195
- bad[path] = output
196
- end
197
- end
198
-
199
- puts "done"
200
- puts "Ran in %.2f seconds" % [ Time.now - tt0 ]
201
-
202
- if file then
203
- require "json"
204
- File.open file, "w" do |io|
205
- io.puts JSON.pretty_generate times
206
- end
207
- end
208
-
209
- unless good.empty?
210
- puts
211
- puts "# Good tests:"
212
- puts
213
- good.sort.each do |path|
214
- puts "%.2fs: %s" % [times[path], path]
215
- end
216
- end
217
-
218
- unless bad.empty?
219
- puts
220
- puts "# Bad tests:"
221
- puts
222
- bad.keys.sort.each do |path|
223
- puts "%.2fs: %s" % [times[path], path]
224
- end
225
- puts
226
- puts "# Bad Test Output:"
227
- puts
228
- bad.sort.each do |path, output|
229
- puts
230
- puts "# #{path}:"
231
- puts output
232
- end
233
- exit 1
234
- end
235
- end
236
-
237
- task "#{name}:deps" => "#{name}:isolated" # now just an alias
238
-
239
- desc "Show bottom 25 tests wrt time."
240
- task "#{name}:slow" do
241
- sh ["rake #{name} TESTOPTS=-v",
242
- "egrep '#test_.* s = .'",
243
- "sort -n -k2 -t=",
244
- "tail -25"].join " | "
245
- end
246
-
247
- default_tasks << name
248
-
249
- desc "Run the default task(s)."
250
- task :default => default_tasks
251
- end
252
-
253
- ##
254
- # Generate the test command-line.
255
-
256
- def make_test_cmd globs = test_globs
257
- tests = []
258
- tests.concat Dir[*globs].sort.shuffle # TODO: SEED -> srand first?
259
- tests.map! { |f| %(require "#{f}") }
260
-
261
- runner = []
262
- runner << test_prelude if test_prelude
263
- runner << framework
264
- runner.concat tests
265
- runner = runner.join "; "
266
-
267
- args = []
268
- args << "-I#{libs.join(File::PATH_SEPARATOR)}" unless libs.empty?
269
- args << "-w" if warning
270
- args << '-e'
271
- args << "'#{runner}'"
272
- args << '--'
273
- args << extra_args.map(&:shellescape)
274
-
275
- args.join " "
276
- end
277
- end
278
- end
279
-
280
- class Work < Queue
281
- def initialize jobs = []
282
- super()
283
-
284
- jobs.each do |job|
285
- self << job
286
- end
287
-
288
- close
289
- end
290
- end
291
-
292
- class Integer
293
- def threads_do(jobs) # :nodoc:
294
- require "thread"
295
- q = Work.new jobs
296
-
297
- self.times.map {
298
- Thread.new do
299
- while job = q.pop # go until quit value
300
- yield job
301
- end
302
- end
303
- }.each(&:join)
304
- end
305
- end