hoe 3.25.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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