minitest 5.21.1 → 5.22.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: 93aa935fa793db73b5d06918b074bf4a096277ce370b28de02e8985e9ff9d59c
4
- data.tar.gz: 02a61902e998e427f82ed68817d8cc37d844de4ad810e306eb4d2e9f7f5157d9
3
+ metadata.gz: 36a02c1522b429152689b46166cd66d5325797d0f4efb35c96458932a7917ba8
4
+ data.tar.gz: 699070f4a0c1e0acd2e277c602638373b1d470768a668793e6890aae6e7e49b3
5
5
  SHA512:
6
- metadata.gz: 763100b3c3e55372e57bf04cb19f5cd20423df8fed5245436b5bffaac07c2265d98bddb052d924c3257c5d9c1cc9faf2c1cadbf48ffcdf47320c27a3a2e96e2d
7
- data.tar.gz: 34a53cef30066575612a61bc0d9d991c5a02598b817bc15a61762687258767fa30dcbb9263c0bb850860fc74fc267702382196d936c943f861d3dea91f10160e
6
+ metadata.gz: e95a14b71c9cd2e27a26c6593d59075357ecc177b8b618e82dd0c5e03ba13f0322f1f0b36c429022450ae98a0fe6039e210dd7a774c0af93ca970d641e6acb16
7
+ data.tar.gz: 7b1bf55227d08443c8270e04d093981fda13aa37f9fd855a3fb74e77ad0c9b8e9c8d391f519f5173151614b3c074e86639a0a9503ff89afd6fad8ddbd44b800f
checksums.yaml.gz.sig CHANGED
Binary file
data/History.rdoc CHANGED
@@ -1,3 +1,20 @@
1
+ === 5.22.0 / 2024-02-05
2
+
3
+ * 1 minor enhancement:
4
+
5
+ * Added "did you mean" output if your --name filter matches nothing. (tenderlove)
6
+
7
+ * 2 bug fixes:
8
+
9
+ * Big cleanup of test filtering. Much prettier / more functional.
10
+ * Fix situation where Assertion#location can't find the location. (pftg)
11
+
12
+ === 5.21.2 / 2024-01-17
13
+
14
+ * 1 bug fix:
15
+
16
+ * Fixed bug in Minitest::Compress#compress formatting w/ nested patterns. Now recurses properly.
17
+
1
18
  === 5.21.1 / 2024-01-11
2
19
 
3
20
  * 1 bug fix:
@@ -64,18 +64,31 @@ module Minitest
64
64
 
65
65
  ary = min.flat_map { |(n, lines)|
66
66
  if n > 1 then
67
+ [[n, compress(lines)]] # [o1 [2 s1] [2 s2]]
68
+ else
69
+ lines
70
+ end
71
+ }
72
+ end
73
+
74
+ format = ->(lines) {
75
+ lines.flat_map { |line|
76
+ case line
77
+ when Array then
78
+ n, lines = line
79
+ lines = format[lines]
67
80
  [
68
81
  " +->> #{n} cycles of #{lines.size} lines:",
69
82
  *lines.map { |s| " | #{s}" },
70
83
  " +-<<",
71
84
  ]
72
85
  else
73
- lines
86
+ line
74
87
  end
75
88
  }
76
- end
89
+ }
77
90
 
78
- ary
91
+ format[ary]
79
92
  end
80
93
  end
81
94
  end
data/lib/minitest.rb CHANGED
@@ -9,7 +9,7 @@ require_relative "minitest/compress"
9
9
  # :include: README.rdoc
10
10
 
11
11
  module Minitest
12
- VERSION = "5.21.1" # :nodoc:
12
+ VERSION = "5.22.0" # :nodoc:
13
13
 
14
14
  @@installed_at_exit ||= false
15
15
  @@after_run = []
@@ -134,7 +134,7 @@ module Minitest
134
134
  # Minitest.run(args)
135
135
  # Minitest.__run(reporter, options)
136
136
  # Runnable.runnables.each
137
- # runnable.run(reporter, options)
137
+ # runnable_klass.run(reporter, options)
138
138
  # self.runnable_methods.each
139
139
  # self.run_one_method(self, runnable_method, reporter)
140
140
  # Minitest.run_one_method(klass, runnable_method)
@@ -164,11 +164,33 @@ module Minitest
164
164
  warn "Interrupted. Exiting..."
165
165
  end
166
166
  self.parallel_executor.shutdown
167
+
168
+ # might have been removed/replaced during init_plugins:
169
+ summary = reporter.reporters.grep(SummaryReporter).first
170
+ return empty_run! options if summary && summary.count == 0
171
+
167
172
  reporter.report
168
173
 
169
174
  reporter.passed?
170
175
  end
171
176
 
177
+ def self.empty_run! options # :nodoc:
178
+ filter = options[:filter]
179
+
180
+ warn "Nothing ran for filter: %s" % [filter]
181
+
182
+ require "did_you_mean" # soft dependency, punt if it doesn't load
183
+
184
+ ms = Runnable.runnables.flat_map(&:runnable_methods)
185
+ cs = DidYouMean::SpellChecker.new(dictionary: ms).correct filter
186
+
187
+ warn DidYouMean::Formatter.message_for cs unless cs.empty?
188
+ rescue LoadError
189
+ # do nothing
190
+ ensure
191
+ false
192
+ end
193
+
172
194
  ##
173
195
  # Internal run method. Responsible for telling all Runnable
174
196
  # sub-classes to run.
@@ -338,25 +360,15 @@ module Minitest
338
360
  # reporter to record.
339
361
 
340
362
  def self.run reporter, options = {}
341
- filtered_methods = if options[:filter]
342
- filter = options[:filter]
343
- filter = Regexp.new $1 if filter.is_a?(String) && filter =~ %r%/(.*)/%
344
-
345
- self.runnable_methods.find_all { |m|
346
- filter === m || filter === "#{self}##{m}"
347
- }
348
- else
349
- self.runnable_methods
350
- end
363
+ pos = options[:filter]
364
+ neg = options[:exclude]
351
365
 
352
- if options[:exclude]
353
- exclude = options[:exclude]
354
- exclude = Regexp.new $1 if exclude =~ %r%/(.*)/%
366
+ pos = Regexp.new $1 if pos.is_a?(String) && pos =~ %r%/(.*)/%
367
+ neg = Regexp.new $1 if neg.is_a?(String) && neg =~ %r%/(.*)/%
355
368
 
356
- filtered_methods.delete_if { |m|
357
- exclude === m || exclude === "#{self}##{m}"
358
- }
359
- end
369
+ filtered_methods = self.runnable_methods
370
+ .select { |m| !pos || pos === m || pos === "#{self}##{m}" }
371
+ .reject { |m| neg && (neg === m || neg === "#{self}##{m}") }
360
372
 
361
373
  return if filtered_methods.empty?
362
374
 
@@ -961,8 +973,9 @@ module Minitest
961
973
  def location
962
974
  bt = Minitest.filter_backtrace self.backtrace
963
975
  idx = bt.rindex { |s| s.match? RE } || -1 # fall back to first item
976
+ loc = bt[idx+1] || bt.last || "unknown:-1"
964
977
 
965
- bt[idx+1].sub(/:in .*$/, "")
978
+ loc.sub(/:in .*$/, "")
966
979
  end
967
980
 
968
981
  def result_code # :nodoc:
@@ -1359,8 +1359,6 @@ class TestUnexpectedError < Minitest::Test
1359
1359
  end
1360
1360
 
1361
1361
  def test_absurd_patterns
1362
- skip "NOOOO!!! but I don't care enough right now."
1363
-
1364
1362
  assert_compress <<~EXP, %w[ a b c b c a b c b c a b c ]
1365
1363
  +->> 2 cycles of 5 lines:
1366
1364
  | a
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.21.1
4
+ version: 5.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -29,7 +29,7 @@ cert_chain:
29
29
  S7043fq9EbQdBr2AXdj92+CDwuTfHI6/Hj5FVBDULufrJaan4xUgL70Hvc6pTTeW
30
30
  deKfBjgVAq7EYHu1AczzlUly
31
31
  -----END CERTIFICATE-----
32
- date: 2024-01-12 00:00:00.000000000 Z
32
+ date: 2024-02-05 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: rdoc
@@ -57,14 +57,14 @@ dependencies:
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '4.1'
60
+ version: '4.2'
61
61
  type: :development
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '4.1'
67
+ version: '4.2'
68
68
  description: |-
69
69
  minitest provides a complete suite of testing facilities supporting
70
70
  TDD, BDD, mocking, and benchmarking.
metadata.gz.sig CHANGED
Binary file