minitest 5.25.5 → 6.0.1

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/History.rdoc +132 -0
  4. data/Manifest.txt +13 -4
  5. data/README.rdoc +18 -98
  6. data/Rakefile +7 -2
  7. data/bin/minitest +5 -0
  8. data/design_rationale.rb +21 -19
  9. data/lib/hoe/minitest.rb +2 -1
  10. data/lib/minitest/assertions.rb +37 -74
  11. data/lib/minitest/autorun.rb +3 -4
  12. data/lib/minitest/benchmark.rb +3 -3
  13. data/lib/minitest/bisect.rb +306 -0
  14. data/lib/minitest/complete.rb +56 -0
  15. data/lib/minitest/find_minimal_combination.rb +127 -0
  16. data/lib/minitest/hell.rb +1 -1
  17. data/lib/minitest/manual_plugins.rb +4 -16
  18. data/lib/minitest/parallel.rb +5 -3
  19. data/lib/minitest/path_expander.rb +425 -0
  20. data/lib/minitest/pride.rb +2 -2
  21. data/lib/minitest/pride_plugin.rb +1 -1
  22. data/lib/minitest/server.rb +45 -0
  23. data/lib/minitest/server_plugin.rb +84 -0
  24. data/lib/minitest/spec.rb +11 -37
  25. data/lib/minitest/sprint.rb +104 -0
  26. data/lib/minitest/sprint_plugin.rb +39 -0
  27. data/lib/minitest/test.rb +8 -13
  28. data/lib/minitest/test_task.rb +44 -20
  29. data/lib/minitest.rb +99 -107
  30. data/test/minitest/metametameta.rb +1 -1
  31. data/test/minitest/test_bisect.rb +235 -0
  32. data/test/minitest/test_find_minimal_combination.rb +138 -0
  33. data/test/minitest/test_minitest_assertions.rb +51 -108
  34. data/test/minitest/test_minitest_benchmark.rb +14 -0
  35. data/test/minitest/test_minitest_reporter.rb +6 -5
  36. data/test/minitest/test_minitest_spec.rb +60 -128
  37. data/test/minitest/test_minitest_test.rb +22 -101
  38. data/test/minitest/test_path_expander.rb +229 -0
  39. data/test/minitest/test_server.rb +149 -0
  40. data.tar.gz.sig +0 -0
  41. metadata +58 -25
  42. metadata.gz.sig +0 -0
  43. data/.autotest +0 -34
  44. data/lib/minitest/mock.rb +0 -347
  45. data/lib/minitest/unit.rb +0 -42
  46. data/test/minitest/test_minitest_mock.rb +0 -1218
@@ -0,0 +1,229 @@
1
+ require "minitest/autorun"
2
+ require "minitest/path_expander"
3
+
4
+ class TestPathExpander < Minitest::Test
5
+ attr_accessor :args
6
+ attr_accessor :expander
7
+
8
+ MT_VPE = Minitest::VendoredPathExpander
9
+
10
+ def setup
11
+ super
12
+
13
+ self.args = []
14
+
15
+ self.expander = MT_VPE.new args, "*.rb"
16
+
17
+ @pe_tmp_path = "test/pe_tmp"
18
+ @pe_tst_path = "test/pe_tmp/test"
19
+
20
+ @orig_pwd = Dir.pwd
21
+ FileUtils.mkdir_p @pe_tst_path
22
+ FileUtils.touch ["#{@pe_tst_path}/test_path_expander.rb", "#{@pe_tst_path}/test_bad.rb"]
23
+ Dir.chdir @pe_tmp_path
24
+ end
25
+
26
+ def teardown
27
+ super
28
+
29
+ Dir.chdir @orig_pwd
30
+
31
+ FileUtils.rm_rf @pe_tmp_path
32
+ end
33
+
34
+ def assert_filter_files exp, filter, files = %w[test/dog_and_cat.rb]
35
+ ignore = StringIO.new filter
36
+ act = expander.filter_files files, ignore
37
+ assert_equal exp, act
38
+ end
39
+
40
+ def assert_filter_files_absolute_paths exp, filter, files = [File.join(Dir.pwd, 'test/dog_and_cat.rb')]
41
+ assert_filter_files exp, filter, files
42
+ end
43
+
44
+ def assert_process_args exp_files, exp_args, *args
45
+ expander.args.concat args
46
+
47
+ assert_equal [exp_files.sort, exp_args], expander.process_args
48
+ end
49
+
50
+ def test_expand_dirs_to_files
51
+ exp = %w[test/test_bad.rb test/test_path_expander.rb]
52
+
53
+ assert_equal exp, expander.expand_dirs_to_files("test")
54
+ assert_equal %w[Rakefile], expander.expand_dirs_to_files("Rakefile")
55
+ end
56
+
57
+ def test_expand_dirs_to_files__sorting
58
+ exp = %w[test/test_bad.rb test/test_path_expander.rb]
59
+ input = %w[test/test_path_expander.rb test/test_bad.rb]
60
+
61
+ assert_equal exp, expander.expand_dirs_to_files(*input)
62
+ assert_equal %w[Rakefile], expander.expand_dirs_to_files("Rakefile")
63
+ end
64
+
65
+ def test_expand_dirs_to_files__leading_dot
66
+ exp = %w[test/test_bad.rb test/test_path_expander.rb]
67
+
68
+ assert_equal exp, expander.expand_dirs_to_files("./test")
69
+ end
70
+
71
+ def test_filter_files_dir
72
+ assert_filter_files [], "test/"
73
+ assert_filter_files_absolute_paths [], "test/"
74
+ end
75
+
76
+ def test_filter_files_files
77
+ example = %w[test/file.rb test/sub/file.rb top/test/perf.rb]
78
+ example_absolute_paths = example.map { |e| File.join(Dir.pwd, e) }
79
+
80
+ assert_filter_files [], "test/*.rb"
81
+
82
+ assert_filter_files example[1..-1], "test/*.rb", example
83
+
84
+ assert_filter_files_absolute_paths [], "test/*.rb"
85
+
86
+ assert_filter_files_absolute_paths example_absolute_paths[1..-1], "test/*.rb", example_absolute_paths
87
+ end
88
+
89
+ def test_filter_files_glob
90
+ assert_filter_files [], "test*"
91
+ assert_filter_files [], "test*", ["test/lib/woot.rb"]
92
+ assert_filter_files [], "*.rb"
93
+ assert_filter_files [], "*dog*.rb"
94
+
95
+ assert_filter_files_absolute_paths [], "test*"
96
+ assert_filter_files_absolute_paths [], "test*", [File.join(Dir.pwd, "test/lib/woot.rb")]
97
+ assert_filter_files_absolute_paths [], "*.rb"
98
+ assert_filter_files_absolute_paths [], "*dog*.rb"
99
+ end
100
+
101
+ def test_filter_files_glob_miss
102
+ miss = %w[test/dog_and_cat.rb]
103
+ miss_absolute = [File.join(Dir.pwd, 'test/dog_and_cat.rb')]
104
+
105
+ assert_filter_files miss, "test"
106
+ assert_filter_files miss, "nope"
107
+
108
+ assert_filter_files_absolute_paths miss_absolute, "test"
109
+ assert_filter_files_absolute_paths miss_absolute, "nope"
110
+ end
111
+
112
+ def test_filter_files__ignore_file
113
+ files = expander.expand_dirs_to_files "test"
114
+
115
+ File.write ".mtignore", "test/*.rb"
116
+
117
+ act = expander.filter_files files, ".mtignore"
118
+
119
+ assert_equal [], act
120
+ end
121
+
122
+ def test_process
123
+ self.args.concat %w[test --seed 42]
124
+
125
+ act = expander.process
126
+
127
+ assert_kind_of Enumerator, act
128
+ assert_equal %w[test/test_bad.rb test/test_path_expander.rb], act.to_a
129
+ assert_equal %w[--seed 42], expander.args
130
+ assert_equal %w[--seed 42], args # affected our original array (eg, ARGV)
131
+ end
132
+
133
+ def test_process__block
134
+ self.args.concat %w[test --seed 42]
135
+
136
+ act = []
137
+ result = expander.process { |x| act << x }
138
+
139
+ assert_same expander, result
140
+ assert_equal %w[test/test_bad.rb test/test_path_expander.rb], act.to_a
141
+ assert_equal %w[--seed 42], expander.args
142
+ assert_equal %w[--seed 42], args # affected our original array (eg, ARGV)
143
+ end
144
+
145
+ def with_tempfile *lines
146
+ require "tempfile"
147
+
148
+ Tempfile.open("tmp") do |f|
149
+ f.puts lines
150
+ f.flush
151
+ f.rewind
152
+
153
+ yield f
154
+ end
155
+ end
156
+
157
+ def test_process_args_at
158
+ with_tempfile %w[test -test/test_bad.rb --seed 24] do |f|
159
+ assert_process_args(%w[test/test_path_expander.rb],
160
+ %w[--seed 24],
161
+ "@#{f.path}")
162
+ end
163
+ end
164
+
165
+ def test_process_args_dash_dir
166
+ assert_process_args(%w[],
167
+ %w[],
168
+ "test", "-test")
169
+ end
170
+
171
+ def test_process_args_dash_file
172
+ assert_process_args(%w[test/test_path_expander.rb],
173
+ %w[],
174
+ "test", "-test/test_bad.rb")
175
+
176
+ end
177
+
178
+ def test_process_args_dash_other
179
+ assert_process_args(%w[],
180
+ %w[--verbose],
181
+ "--verbose")
182
+ end
183
+
184
+ def test_process_args_dir
185
+ assert_process_args(%w[test/test_bad.rb test/test_path_expander.rb],
186
+ %w[],
187
+ "test")
188
+ end
189
+
190
+ def test_process_args_file
191
+ assert_process_args(%w[test/test_path_expander.rb],
192
+ %w[],
193
+ "test/test_path_expander.rb")
194
+ end
195
+
196
+ def test_process_args_other
197
+ assert_process_args(%w[],
198
+ %w[42],
199
+ "42")
200
+ end
201
+
202
+ def test_process_args_root
203
+ assert_process_args(%w[],
204
+ %w[-n /./],
205
+ "-n",
206
+ "/./")
207
+ end
208
+
209
+ def test_process_args_no_files
210
+ self.expander = MT_VPE.new args, "*.rb", "test" # extra test default
211
+
212
+ assert_process_args(%w[test/test_bad.rb test/test_path_expander.rb],
213
+ %w[-v],
214
+ "-v")
215
+ end
216
+
217
+ def test_process_args_dash
218
+ assert_process_args(%w[-],
219
+ %w[-v],
220
+ "-", "-v")
221
+ end
222
+
223
+ def test_process_flags
224
+ exp = %w[a b c]
225
+ act = expander.process_flags %w[a b c]
226
+
227
+ assert_equal exp, act
228
+ end
229
+ end
@@ -0,0 +1,149 @@
1
+ require "minitest/autorun"
2
+ require "minitest/server"
3
+ require "minitest/server_plugin"
4
+
5
+ require "minitest"
6
+ require "minitest/test"
7
+ require "minitest/server"
8
+ require "minitest/server_plugin"
9
+ require "minitest/autorun"
10
+
11
+ class BogoTests < Minitest::Test
12
+ def pass_test
13
+ assert true
14
+ end
15
+
16
+ def fail_test
17
+ assert false, "fail"
18
+ end
19
+
20
+ def error_test
21
+ raise "error"
22
+ end
23
+
24
+ def unmarshalable_ivar_test
25
+ raise "error"
26
+ rescue => e
27
+ e.instance_variable_set :@binding, binding
28
+ raise
29
+ end
30
+
31
+ def unmarshalable_class_test
32
+ exc = Class.new RuntimeError
33
+ raise exc, "error"
34
+ rescue => e
35
+ e.instance_variable_set :@binding, binding
36
+ raise
37
+ end
38
+
39
+ def wtf_test
40
+ assert false, "wtf"
41
+ rescue Minitest::Assertion => e
42
+ e.instance_variable_set :@proc, proc { 42 }
43
+ raise e
44
+ end
45
+ end
46
+
47
+ class TestServerReporter < Minitest::ServerReporter
48
+ def record o
49
+ super
50
+
51
+ Marshal.dump o
52
+ end
53
+ end
54
+
55
+ class Client
56
+ def run pid, type
57
+ reporter = TestServerReporter.new pid
58
+
59
+ unless Minitest.respond_to? :run_one_method then # MT6
60
+ BogoTests.run BogoTests, "#{type}_test", reporter
61
+ else
62
+ reporter.start
63
+ reporter.record Minitest.run_one_method(BogoTests, "#{type}_test")
64
+ end
65
+ end
66
+ end
67
+
68
+ class Server
69
+ attr_accessor :results
70
+
71
+ def self.run type = nil
72
+ s = self.new
73
+ s.run type
74
+ s.results
75
+ end
76
+
77
+ def run type = nil
78
+ Minitest::Server.run self
79
+
80
+ Client.new.run $$, type
81
+ ensure
82
+ Minitest::Server.stop
83
+ end
84
+
85
+ def minitest_start
86
+ # do nothing
87
+ end
88
+
89
+ def minitest_result(*vals)
90
+ self.results = vals
91
+ end
92
+ end
93
+
94
+ class ServerTest < Minitest::Test
95
+ def test_pass
96
+ assert_run "pass", [], 1
97
+ end
98
+
99
+ def test_fail
100
+ assert_run "fail", ["fail"], 1
101
+ end
102
+
103
+ FILE = __FILE__.delete_prefix "#{Dir.pwd}/"
104
+
105
+ def test_error
106
+ msg = <<~EOM.chomp
107
+ RuntimeError: error
108
+ #{FILE}:21:in `error_test'
109
+ EOM
110
+
111
+ assert_run "error", [msg], 0
112
+ end
113
+
114
+ def test_error_unmarshalable__ivar
115
+ msg = <<~EOM.chomp
116
+ RuntimeError: error
117
+ #{FILE}:25:in `unmarshalable_ivar_test'
118
+ EOM
119
+
120
+ assert_run "unmarshalable_ivar", [msg], 0
121
+ end
122
+
123
+ def test_error_unmarshalable__class
124
+ msg = <<~EOM.chomp
125
+ RuntimeError: Neutered Exception #<Class:0xXXXXXX>: error
126
+ #{FILE}:33:in `unmarshalable_class_test'
127
+ EOM
128
+
129
+ assert_run "unmarshalable_class", [msg], 0
130
+ end
131
+
132
+ def test_wtf
133
+ assert_run "wtf", ["wtf"], 1
134
+ end
135
+
136
+ def assert_run type, e, n
137
+ e[0] = e[0].sub "`", "'BogoTests#" if RUBY_VERSION > "3.4" if e[0]
138
+
139
+ act = Server.run type
140
+ act[-1] = 0 # time
141
+ act[-3].map!(&:message)
142
+
143
+ act[-3][0] = act[-3][0].gsub(/0x\h+/, "0xXXXXXX") if act[-3][0]
144
+
145
+ exp = ["test/minitest/test_server.rb", "BogoTests", "#{type}_test", e, n, 0]
146
+
147
+ assert_equal exp, act
148
+ end
149
+ end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.25.5
4
+ version: 6.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -28,45 +28,73 @@ cert_chain:
28
28
  bwfinv7Yp5fA6AysuZLhCykyfDuZVRrUp0Vb68YCKsLjJly/Theak+euNTxvHsB+
29
29
  al9oSgPPHICMEX65qvLywitx
30
30
  -----END CERTIFICATE-----
31
- date: 2025-03-12 00:00:00.000000000 Z
31
+ date: 1980-01-02 00:00:00.000000000 Z
32
32
  dependencies:
33
+ - !ruby/object:Gem::Dependency
34
+ name: prism
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.5'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.5'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: rdoc
35
49
  requirement: !ruby/object:Gem::Requirement
36
50
  requirements:
37
51
  - - ">="
38
52
  - !ruby/object:Gem::Version
39
- version: '4.0'
53
+ version: '6.0'
40
54
  - - "<"
41
55
  - !ruby/object:Gem::Version
42
- version: '7'
56
+ version: '8'
43
57
  type: :development
44
58
  prerelease: false
45
59
  version_requirements: !ruby/object:Gem::Requirement
46
60
  requirements:
47
61
  - - ">="
48
62
  - !ruby/object:Gem::Version
49
- version: '4.0'
63
+ version: '6.0'
50
64
  - - "<"
51
65
  - !ruby/object:Gem::Version
52
- version: '7'
66
+ version: '8'
67
+ - !ruby/object:Gem::Dependency
68
+ name: simplecov
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '0.21'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '0.21'
53
81
  - !ruby/object:Gem::Dependency
54
82
  name: hoe
55
83
  requirement: !ruby/object:Gem::Requirement
56
84
  requirements:
57
85
  - - "~>"
58
86
  - !ruby/object:Gem::Version
59
- version: '4.2'
87
+ version: '4.5'
60
88
  type: :development
61
89
  prerelease: false
62
90
  version_requirements: !ruby/object:Gem::Requirement
63
91
  requirements:
64
92
  - - "~>"
65
93
  - !ruby/object:Gem::Version
66
- version: '4.2'
94
+ version: '4.5'
67
95
  description: |-
68
96
  minitest provides a complete suite of testing facilities supporting
69
- TDD, BDD, mocking, and benchmarking.
97
+ TDD, BDD, and benchmarking.
70
98
 
71
99
  "I had a class with Jim Weirich on testing last week and we were
72
100
  allowed to choose our testing frameworks. Kirk Haines and I were
@@ -92,9 +120,6 @@ description: |-
92
120
  co-worker doesn't replace your linear algorithm with an exponential
93
121
  one!
94
122
 
95
- minitest/mock by Steven Baker, is a beautifully tiny mock (and stub)
96
- object framework.
97
-
98
123
  minitest/pride shows pride in testing and adds coloring to your test
99
124
  output. I guess it is an example of how to write IO pipes too. :P
100
125
 
@@ -120,50 +145,61 @@ description: |-
120
145
  extract-method refactorings still apply.
121
146
  email:
122
147
  - ryand-ruby@zenspider.com
123
- executables: []
148
+ executables:
149
+ - minitest
124
150
  extensions: []
125
151
  extra_rdoc_files:
126
152
  - History.rdoc
127
153
  - Manifest.txt
128
154
  - README.rdoc
129
155
  files:
130
- - ".autotest"
131
156
  - History.rdoc
132
157
  - Manifest.txt
133
158
  - README.rdoc
134
159
  - Rakefile
160
+ - bin/minitest
135
161
  - design_rationale.rb
136
162
  - lib/hoe/minitest.rb
137
163
  - lib/minitest.rb
138
164
  - lib/minitest/assertions.rb
139
165
  - lib/minitest/autorun.rb
140
166
  - lib/minitest/benchmark.rb
167
+ - lib/minitest/bisect.rb
168
+ - lib/minitest/complete.rb
141
169
  - lib/minitest/compress.rb
142
170
  - lib/minitest/error_on_warning.rb
143
171
  - lib/minitest/expectations.rb
172
+ - lib/minitest/find_minimal_combination.rb
144
173
  - lib/minitest/hell.rb
145
174
  - lib/minitest/manual_plugins.rb
146
- - lib/minitest/mock.rb
147
175
  - lib/minitest/parallel.rb
176
+ - lib/minitest/path_expander.rb
148
177
  - lib/minitest/pride.rb
149
178
  - lib/minitest/pride_plugin.rb
179
+ - lib/minitest/server.rb
180
+ - lib/minitest/server_plugin.rb
150
181
  - lib/minitest/spec.rb
182
+ - lib/minitest/sprint.rb
183
+ - lib/minitest/sprint_plugin.rb
151
184
  - lib/minitest/test.rb
152
185
  - lib/minitest/test_task.rb
153
- - lib/minitest/unit.rb
154
186
  - test/minitest/metametameta.rb
187
+ - test/minitest/test_bisect.rb
188
+ - test/minitest/test_find_minimal_combination.rb
155
189
  - test/minitest/test_minitest_assertions.rb
156
190
  - test/minitest/test_minitest_benchmark.rb
157
- - test/minitest/test_minitest_mock.rb
158
191
  - test/minitest/test_minitest_reporter.rb
159
192
  - test/minitest/test_minitest_spec.rb
160
193
  - test/minitest/test_minitest_test.rb
161
194
  - test/minitest/test_minitest_test_task.rb
162
- homepage: https://github.com/minitest/minitest
195
+ - test/minitest/test_path_expander.rb
196
+ - test/minitest/test_server.rb
197
+ homepage: https://minite.st/
163
198
  licenses:
164
199
  - MIT
165
200
  metadata:
166
- homepage_uri: https://github.com/minitest/minitest
201
+ homepage_uri: https://minite.st/
202
+ source_code_uri: https://github.com/minitest/minitest
167
203
  bug_tracker_uri: https://github.com/minitest/minitest/issues
168
204
  changelog_uri: https://github.com/minitest/minitest/blob/master/History.rdoc
169
205
  rdoc_options:
@@ -175,18 +211,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
175
211
  requirements:
176
212
  - - ">="
177
213
  - !ruby/object:Gem::Version
178
- version: '2.7'
179
- - - "<"
180
- - !ruby/object:Gem::Version
181
- version: '4.0'
214
+ version: '3.2'
182
215
  required_rubygems_version: !ruby/object:Gem::Requirement
183
216
  requirements:
184
217
  - - ">="
185
218
  - !ruby/object:Gem::Version
186
219
  version: '0'
187
220
  requirements: []
188
- rubygems_version: 3.6.3
221
+ rubygems_version: 3.7.2
189
222
  specification_version: 4
190
223
  summary: minitest provides a complete suite of testing facilities supporting TDD,
191
- BDD, mocking, and benchmarking
224
+ BDD, and benchmarking
192
225
  test_files: []
metadata.gz.sig CHANGED
Binary file
data/.autotest DELETED
@@ -1,34 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- require 'autotest/restart'
4
- require 'autotest/rcov' if ENV['RCOV']
5
-
6
- Autotest.add_hook :initialize do |at|
7
- at.testlib = 'minitest/autorun'
8
-
9
- bench_tests = %w(TestMinitestBenchmark)
10
- mock_tests = %w(TestMinitestMock TestMinitestStub)
11
- spec_tests = %w(TestMinitestReporter TestMetaStatic TestMeta
12
- TestSpecInTestCase)
13
- unit_tests = %w(TestMinitestGuard TestMinitestRunnable
14
- TestMinitestRunner TestMinitestTest TestMinitestUnit
15
- TestMinitestUnitInherited TestMinitestUnitOrder
16
- TestMinitestUnitRecording TestMinitestUnitTestCase)
17
-
18
- {
19
- bench_tests => "test/minitest/test_minitest_benchmark.rb",
20
- mock_tests => "test/minitest/test_minitest_mock.rb",
21
- spec_tests => "test/minitest/test_minitest_reporter.rb",
22
- unit_tests => "test/minitest/test_minitest_unit.rb",
23
- }.each do |klasses, file|
24
- klasses.each do |klass|
25
- at.extra_class_map[klass] = file
26
- end
27
- end
28
-
29
- at.add_exception 'coverage.info'
30
- at.add_exception 'coverage'
31
- end
32
-
33
- # require 'autotest/rcov'
34
- # Autotest::RCov.command = 'rcov_info'