rbs 3.7.0.dev.1 → 3.7.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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -1
  3. data/.github/workflows/windows.yml +5 -3
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +6 -0
  6. data/CHANGELOG.md +53 -0
  7. data/Rakefile +23 -0
  8. data/config.yml +311 -0
  9. data/core/dir.rbs +1 -1
  10. data/core/kernel.rbs +2 -2
  11. data/core/process.rbs +1 -1
  12. data/core/set.rbs +1 -1
  13. data/docs/syntax.md +6 -4
  14. data/ext/rbs_extension/extconf.rb +10 -0
  15. data/ext/rbs_extension/parser.c +103 -110
  16. data/ext/rbs_extension/rbs_extension.h +1 -2
  17. data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
  18. data/include/rbs/ruby_objs.h +72 -0
  19. data/include/rbs.h +7 -0
  20. data/lib/rbs/collection/config/lockfile_generator.rb +34 -5
  21. data/lib/rbs/collection/config.rb +2 -2
  22. data/lib/rbs/environment_loader.rb +5 -0
  23. data/lib/rbs/prototype/rb.rb +7 -3
  24. data/lib/rbs/types.rb +10 -3
  25. data/lib/rbs/version.rb +1 -1
  26. data/sig/ancestor_graph.rbs +1 -1
  27. data/sig/collection/config/lockfile_generator.rbs +9 -1
  28. data/sig/definition.rbs +1 -1
  29. data/sig/definition_builder.rbs +1 -1
  30. data/sig/environment.rbs +1 -1
  31. data/sig/prototype/rb.rbs +1 -1
  32. data/sig/type_alias_dependency.rbs +2 -2
  33. data/sig/type_alias_regularity.rbs +1 -1
  34. data/sig/type_param.rbs +3 -3
  35. data/sig/vendorer.rbs +1 -1
  36. data/{ext/rbs_extension → src}/constants.c +35 -36
  37. data/src/ruby_objs.c +793 -0
  38. data/stdlib/cgi/0/manifest.yaml +1 -0
  39. data/stdlib/csv/0/manifest.yaml +1 -0
  40. data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -1
  41. data/stdlib/json/0/json.rbs +1 -1
  42. data/stdlib/minitest/0/kernel.rbs +2 -2
  43. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  44. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  45. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  46. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  47. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  48. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  49. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  50. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  51. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  52. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  53. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  54. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  55. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  56. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  57. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  58. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  59. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  60. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  61. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  62. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  63. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  64. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
  65. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  66. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  67. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  68. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  69. data/stdlib/minitest/0/minitest.rbs +41 -892
  70. data/stdlib/open-uri/0/manifest.yaml +1 -0
  71. data/stdlib/openssl/0/manifest.yaml +1 -0
  72. data/stdlib/openssl/0/openssl.rbs +26 -1
  73. data/stdlib/psych/0/core_ext.rbs +12 -0
  74. data/templates/include/rbs/constants.h.erb +20 -0
  75. data/templates/include/rbs/ruby_objs.h.erb +10 -0
  76. data/templates/src/constants.c.erb +36 -0
  77. data/templates/src/ruby_objs.c.erb +27 -0
  78. data/templates/template.rb +122 -0
  79. metadata +19 -9
  80. data/ext/rbs_extension/ruby_objs.c +0 -602
  81. data/ext/rbs_extension/ruby_objs.h +0 -51
  82. data/stdlib/minitest/0/manifest.yaml +0 -2
  83. /data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +0 -0
@@ -1,889 +1,16 @@
1
1
  # <!-- rdoc-file=lib/minitest.rb -->
2
- # # minitest/{test,spec,mock,benchmark}
3
- #
4
- # home
5
- # : https://github.com/seattlerb/minitest
6
- # bugs
7
- # : https://github.com/seattlerb/minitest/issues
8
- # rdoc
9
- # : http://docs.seattlerb.org/minitest
10
- # vim
11
- # : https://github.com/sunaku/vim-ruby-minitest
12
- # emacs
13
- # : https://github.com/arthurnn/minitest-emacs
14
- #
15
- #
16
- # ## DESCRIPTION:
17
- #
18
- # minitest provides a complete suite of testing facilities supporting TDD, BDD,
19
- # mocking, and benchmarking.
20
- #
21
- # "I had a class with Jim Weirich on testing last week and we were
22
- # allowed to choose our testing frameworks. Kirk Haines and I were
23
- # paired up and we cracked open the code for a few test
24
- # frameworks...
25
- #
26
- # I MUST say that minitest is *very* readable / understandable
27
- # compared to the 'other two' options we looked at. Nicely done and
28
- # thank you for helping us keep our mental sanity."
29
- #
30
- # -- Wayne E. Seguin
31
- #
32
- # minitest/test is a small and incredibly fast unit testing framework. It
33
- # provides a rich set of assertions to make your tests clean and readable.
34
- #
35
- # minitest/spec is a functionally complete spec engine. It hooks onto
36
- # minitest/test and seamlessly bridges test assertions over to spec
37
- # expectations.
38
- #
39
- # minitest/benchmark is an awesome way to assert the performance of your
40
- # algorithms in a repeatable manner. Now you can assert that your newb co-worker
41
- # doesn't replace your linear algorithm with an exponential one!
42
- #
43
- # minitest/mock by Steven Baker, is a beautifully tiny mock (and stub) object
44
- # framework.
45
- #
46
- # minitest/pride shows pride in testing and adds coloring to your test output. I
47
- # guess it is an example of how to write IO pipes too. :P
48
- #
49
- # minitest/test is meant to have a clean implementation for language
50
- # implementors that need a minimal set of methods to bootstrap a working test
51
- # suite. For example, there is no magic involved for test-case discovery.
52
- #
53
- # "Again, I can't praise enough the idea of a testing/specing
54
- # framework that I can actually read in full in one sitting!"
55
- #
56
- # -- Piotr Szotkowski
57
- #
58
- # Comparing to rspec:
59
- #
60
- # rspec is a testing DSL. minitest is ruby.
61
- #
62
- # -- Adam Hawkins, "Bow Before MiniTest"
63
- #
64
- # minitest doesn't reinvent anything that ruby already provides, like: classes,
65
- # modules, inheritance, methods. This means you only have to learn ruby to use
66
- # minitest and all of your regular OO practices like extract-method refactorings
67
- # still apply.
68
- #
69
- # ## FEATURES/PROBLEMS:
70
- #
71
- # * minitest/autorun - the easy and explicit way to run all your tests.
72
- # * minitest/test - a very fast, simple, and clean test system.
73
- # * minitest/spec - a very fast, simple, and clean spec system.
74
- # * minitest/mock - a simple and clean mock/stub system.
75
- # * minitest/benchmark - an awesome way to assert your algorithm's
76
- # performance.
77
- # * minitest/pride - show your pride in testing!
78
- # * Incredibly small and fast runner, but no bells and whistles.
79
- # * Written by squishy human beings. Software can never be perfect. We will
80
- # all eventually die.
81
- #
82
- #
83
- # ## RATIONALE:
84
- #
85
- # See design_rationale.rb to see how specs and tests work in minitest.
86
- #
87
- # ## SYNOPSIS:
88
- #
89
- # Given that you'd like to test the following class:
90
- #
91
- # class Meme
92
- # def i_can_has_cheezburger?
93
- # "OHAI!"
94
- # end
95
- #
96
- # def will_it_blend?
97
- # "YES!"
98
- # end
99
- # end
100
- #
101
- # ### Unit tests
102
- #
103
- # Define your tests as methods beginning with `test_`.
104
- #
105
- # require "minitest/autorun"
106
- #
107
- # class TestMeme < Minitest::Test
108
- # def setup
109
- # @meme = Meme.new
110
- # end
111
- #
112
- # def test_that_kitty_can_eat
113
- # assert_equal "OHAI!", @meme.i_can_has_cheezburger?
114
- # end
115
- #
116
- # def test_that_it_will_not_blend
117
- # refute_match /^no/i, @meme.will_it_blend?
118
- # end
119
- #
120
- # def test_that_will_be_skipped
121
- # skip "test this later"
122
- # end
123
- # end
124
- #
125
- # ### Specs
126
- #
127
- # require "minitest/autorun"
128
- #
129
- # describe Meme do
130
- # before do
131
- # @meme = Meme.new
132
- # end
133
- #
134
- # describe "when asked about cheeseburgers" do
135
- # it "must respond positively" do
136
- # _(@meme.i_can_has_cheezburger?).must_equal "OHAI!"
137
- # end
138
- # end
139
- #
140
- # describe "when asked about blending possibilities" do
141
- # it "won't say no" do
142
- # _(@meme.will_it_blend?).wont_match /^no/i
143
- # end
144
- # end
145
- # end
146
- #
147
- # For matchers support check out:
148
- #
149
- # * https://github.com/wojtekmach/minitest-matchers
150
- # * https://github.com/rmm5t/minitest-matchers_vaccine
151
- #
152
- #
153
- # ### Benchmarks
154
- #
155
- # Add benchmarks to your tests.
156
- #
157
- # # optionally run benchmarks, good for CI-only work!
158
- # require "minitest/benchmark" if ENV["BENCH"]
159
- #
160
- # class TestMeme < Minitest::Benchmark
161
- # # Override self.bench_range or default range is [1, 10, 100, 1_000, 10_000]
162
- # def bench_my_algorithm
163
- # assert_performance_linear 0.9999 do |n| # n is a range value
164
- # @obj.my_algorithm(n)
165
- # end
166
- # end
167
- # end
168
- #
169
- # Or add them to your specs. If you make benchmarks optional, you'll need to
170
- # wrap your benchmarks in a conditional since the methods won't be defined. In
171
- # minitest 5, the describe name needs to match `/Bench(mark)?$/`.
172
- #
173
- # describe "Meme Benchmark" do
174
- # if ENV["BENCH"] then
175
- # bench_performance_linear "my_algorithm", 0.9999 do |n|
176
- # 100.times do
177
- # @obj.my_algorithm(n)
178
- # end
179
- # end
180
- # end
181
- # end
182
- #
183
- # outputs something like:
184
- #
185
- # # Running benchmarks:
186
- #
187
- # TestBlah 100 1000 10000
188
- # bench_my_algorithm 0.006167 0.079279 0.786993
189
- # bench_other_algorithm 0.061679 0.792797 7.869932
190
- #
191
- # Output is tab-delimited to make it easy to paste into a spreadsheet.
192
- #
193
- # ### Mocks
194
- #
195
- # Mocks and stubs defined using terminology by Fowler & Meszaros at
196
- # http://www.martinfowler.com/bliki/TestDouble.html:
197
- #
198
- # "Mocks are pre-programmed with expectations which form a specification of the
199
- # calls they are expected to receive. They can throw an exception if they
200
- # receive a call they don't expect and are checked during verification to ensure
201
- # they got all the calls they were expecting."
202
- #
203
- # class MemeAsker
204
- # def initialize(meme)
205
- # @meme = meme
206
- # end
207
- #
208
- # def ask(question)
209
- # method = question.tr(" ", "_") + "?"
210
- # @meme.__send__(method)
211
- # end
212
- # end
213
- #
214
- # require "minitest/autorun"
215
- #
216
- # describe MemeAsker, :ask do
217
- # describe "when passed an unpunctuated question" do
218
- # it "should invoke the appropriate predicate method on the meme" do
219
- # @meme = Minitest::Mock.new
220
- # @meme_asker = MemeAsker.new @meme
221
- # @meme.expect :will_it_blend?, :return_value
222
- #
223
- # @meme_asker.ask "will it blend"
224
- #
225
- # @meme.verify
226
- # end
227
- # end
228
- # end
229
- #
230
- # #### Multi-threading and Mocks
231
- #
232
- # Minitest mocks do not support multi-threading. If it works, fine, if it
233
- # doesn't you can use regular ruby patterns and facilities like local variables.
234
- # Here's an example of asserting that code inside a thread is run:
235
- #
236
- # def test_called_inside_thread
237
- # called = false
238
- # pr = Proc.new { called = true }
239
- # thread = Thread.new(&pr)
240
- # thread.join
241
- # assert called, "proc not called"
242
- # end
243
- #
244
- # ### Stubs
245
- #
246
- # Mocks and stubs are defined using terminology by Fowler & Meszaros at
247
- # http://www.martinfowler.com/bliki/TestDouble.html:
248
- #
249
- # "Stubs provide canned answers to calls made during the test".
250
- #
251
- # Minitest's stub method overrides a single method for the duration of the
252
- # block.
253
- #
254
- # def test_stale_eh
255
- # obj_under_test = Something.new
256
- #
257
- # refute obj_under_test.stale?
258
- #
259
- # Time.stub :now, Time.at(0) do # stub goes away once the block is done
260
- # assert obj_under_test.stale?
261
- # end
262
- # end
263
- #
264
- # A note on stubbing: In order to stub a method, the method must actually exist
265
- # prior to stubbing. Use a singleton method to create a new non-existing method:
266
- #
267
- # def obj_under_test.fake_method
268
- # ...
269
- # end
270
- #
271
- # ### Running Your Tests
272
- #
273
- # Ideally, you'll use a rake task to run your tests, either piecemeal or all at
274
- # once. Both rake and rails ship with rake tasks for running your tests. BUT!
275
- # You don't have to:
276
- #
277
- # % ruby -Ilib:test test/minitest/test_minitest_test.rb
278
- # Run options: --seed 37685
279
- #
280
- # # Running:
281
- #
282
- # ...................................................................... (etc)
283
- #
284
- # Finished in 0.107130s, 1446.8403 runs/s, 2959.0217 assertions/s.
285
- #
286
- # 155 runs, 317 assertions, 0 failures, 0 errors, 0 skips
287
- #
288
- # There are runtime options available, both from minitest itself, and also
289
- # provided via plugins. To see them, simply run with `--help`:
290
- #
291
- # % ruby -Ilib:test test/minitest/test_minitest_test.rb --help
292
- # minitest options:
293
- # -h, --help Display this help.
294
- # -s, --seed SEED Sets random seed. Also via env. Eg: SEED=n rake
295
- # -v, --verbose Verbose. Show progress processing files.
296
- # -n, --name PATTERN Filter run on /regexp/ or string.
297
- # -e, --exclude PATTERN Exclude /regexp/ or string from run.
298
- #
299
- # Known extensions: pride, autotest
300
- # -p, --pride Pride. Show your testing pride!
301
- # -a, --autotest Connect to autotest server.
302
- #
303
- # You can set up a rake task to run all your tests by adding this to your
304
- # Rakefile:
305
- #
306
- # require "rake/testtask"
307
- #
308
- # Rake::TestTask.new(:test) do |t|
309
- # t.libs << "test"
310
- # t.libs << "lib"
311
- # t.test_files = FileList["test/**/test_*.rb"]
312
- # end
313
- #
314
- # task :default => :test
315
- #
316
- # ## Writing Extensions
317
- #
318
- # To define a plugin, add a file named minitest/XXX_plugin.rb to your
319
- # project/gem. That file must be discoverable via ruby's LOAD_PATH (via rubygems
320
- # or otherwise). Minitest will find and require that file using Gem.find_files.
321
- # It will then try to call `plugin_XXX_init` during startup. The option
322
- # processor will also try to call `plugin_XXX_options` passing the OptionParser
323
- # instance and the current options hash. This lets you register your own
324
- # command-line options. Here's a totally bogus example:
325
- #
326
- # # minitest/bogus_plugin.rb:
327
- #
328
- # module Minitest
329
- # def self.plugin_bogus_options(opts, options)
330
- # opts.on "--myci", "Report results to my CI" do
331
- # options[:myci] = true
332
- # options[:myci_addr] = get_myci_addr
333
- # options[:myci_port] = get_myci_port
334
- # end
335
- # end
336
- #
337
- # def self.plugin_bogus_init(options)
338
- # self.reporter << MyCI.new(options) if options[:myci]
339
- # end
340
- # end
341
- #
342
- # ### Adding custom reporters
343
- #
344
- # Minitest uses composite reporter to output test results using multiple
345
- # reporter instances. You can add new reporters to the composite during the
346
- # init_plugins phase. As we saw in `plugin_bogus_init` above, you simply add
347
- # your reporter instance to the composite via `<<`.
348
- #
349
- # `AbstractReporter` defines the API for reporters. You may subclass it and
350
- # override any method you want to achieve your desired behavior.
351
- #
352
- # start
353
- # : Called when the run has started.
354
- # record
355
- # : Called for each result, passed or otherwise.
356
- # report
357
- # : Called at the end of the run.
358
- # passed?
359
- # : Called to see if you detected any problems.
360
- #
361
- #
362
- # Using our example above, here is how we might implement MyCI:
363
- #
364
- # # minitest/bogus_plugin.rb
365
- #
366
- # module Minitest
367
- # class MyCI < AbstractReporter
368
- # attr_accessor :results, :addr, :port
369
- #
370
- # def initialize options
371
- # self.results = []
372
- # self.addr = options[:myci_addr]
373
- # self.port = options[:myci_port]
374
- # end
375
- #
376
- # def record result
377
- # self.results << result
378
- # end
379
- #
380
- # def report
381
- # CI.connect(addr, port).send_results self.results
382
- # end
383
- # end
384
- #
385
- # # code from above...
386
- # end
387
- #
388
- # ## FAQ
389
- #
390
- # ### What versions are compatible with what? Or what versions are supported?
391
- #
392
- # Minitest is a dependency of rails, which until fairly recently had an
393
- # overzealous backwards compatibility policy. As such, I'm stuck supporting
394
- # versions of ruby that are long past EOL. Once rails 5.2 is dropped (hopefully
395
- # April 2021), I get to drop a bunch of versions of ruby that I have to
396
- # currently test against.
397
- #
398
- # (As of 2021-01-31)
399
- #
400
- # Current versions of rails: (https://endoflife.date/rails)
401
- #
402
- # | rails | min ruby | rec ruby | minitest | status |
403
- # |-------+----------+----------+----------+----------|
404
- # | 7.0 | >= 2.7 | 3.0 | >= 5.1 | Future |
405
- # | 6.1 | >= 2.5 | 3.0 | >= 5.1 | Current |
406
- # | 6.0 | >= 2.5 | 2.6 | >= 5.1 | Security |
407
- # | 5.2 | >= 2.2.2 | 2.5 | ~> 5.1 | Security | EOL @railsconf 2021?
408
- #
409
- # Current versions of ruby: (https://endoflife.date/ruby)
410
- #
411
- # | ruby | Status | EOL Date |
412
- # |------+---------+------------|
413
- # | 3.0 | Current | 2024-03-31 |
414
- # | 2.7 | Maint | 2023-03-31 |
415
- # | 2.6 | Maint* | 2022-03-31 |
416
- # | 2.5 | EOL | 2021-03-31 |
417
- # | 2.4 | EOL | 2020-03-31 |
418
- # | 2.3 | EOL | 2019-03-31 |
419
- # | 2.2 | EOL | 2018-03-31 |
420
- #
421
- # See also:
422
- #
423
- # * https://www.fastruby.io/blog/ruby/rails/versions/compatibility-table.html
424
- # * https://jamesjeffersconsulting.com/ruby-rails-version-matrix/
425
- #
426
- #
427
- # ### How to test SimpleDelegates?
428
- #
429
- # The following implementation and test:
430
- #
431
- # class Worker < SimpleDelegator
432
- # def work
433
- # end
434
- # end
435
- #
436
- # describe Worker do
437
- # before do
438
- # @worker = Worker.new(Object.new)
439
- # end
440
- #
441
- # it "must respond to work" do
442
- # _(@worker).must_respond_to :work
443
- # end
444
- # end
445
- #
446
- # outputs a failure:
447
- #
448
- # 1) Failure:
449
- # Worker#test_0001_must respond to work [bug11.rb:16]:
450
- # Expected #<Object:0x007f9e7184f0a0> (Object) to respond to #work.
451
- #
452
- # Worker is a SimpleDelegate which in 1.9+ is a subclass of BasicObject.
453
- # Expectations are put on Object (one level down) so the Worker (SimpleDelegate)
454
- # hits `method_missing` and delegates down to the `Object.new` instance. That
455
- # object doesn't respond to work so the test fails.
456
- #
457
- # You can bypass `SimpleDelegate#method_missing` by extending the worker with
458
- # `Minitest::Expectations`. You can either do that in your setup at the instance
459
- # level, like:
460
- #
461
- # before do
462
- # @worker = Worker.new(Object.new)
463
- # @worker.extend Minitest::Expectations
464
- # end
465
- #
466
- # or you can extend the Worker class (within the test file!), like:
467
- #
468
- # class Worker
469
- # include ::Minitest::Expectations
470
- # end
471
- #
472
- # ### How to share code across test classes?
473
- #
474
- # Use a module. That's exactly what they're for:
475
- #
476
- # module UsefulStuff
477
- # def useful_method
478
- # # ...
479
- # end
480
- # end
481
- #
482
- # describe Blah do
483
- # include UsefulStuff
484
- #
485
- # def test_whatever
486
- # # useful_method available here
487
- # end
488
- # end
489
- #
490
- # Remember, `describe` simply creates test classes. It's just ruby at the end of
491
- # the day and all your normal Good Ruby Rules (tm) apply. If you want to extend
492
- # your test using setup/teardown via a module, just make sure you ALWAYS call
493
- # super. before/after automatically call super for you, so make sure you don't
494
- # do it twice.
495
- #
496
- # ### How to run code before a group of tests?
497
- #
498
- # Use a constant with begin...end like this:
499
- #
500
- # describe Blah do
501
- # SETUP = begin
502
- # # ... this runs once when describe Blah starts
503
- # end
504
- # # ...
505
- # end
506
- #
507
- # This can be useful for expensive initializations or sharing state. Remember,
508
- # this is just ruby code, so you need to make sure this technique and sharing
509
- # state doesn't interfere with your tests.
510
- #
511
- # ### Why am I seeing `uninitialized constant MiniTest::Test (NameError)`?
512
- #
513
- # Are you running the test with Bundler (e.g. via `bundle exec` )? If so, in
514
- # order to require minitest, you must first add the `gem 'minitest'` to your
515
- # Gemfile and run `bundle`. Once it's installed, you should be able to require
516
- # minitest and run your tests.
517
- #
518
- # ## Prominent Projects using Minitest:
519
- #
520
- # * arel
521
- # * journey
522
- # * mime-types
523
- # * nokogiri
524
- # * rails (active_support et al)
525
- # * rake
526
- # * rdoc
527
- # * ...and of course, everything from seattle.rb...
528
- #
529
- #
530
- # ## Developing Minitest:
531
- #
532
- # Minitest requires [Hoe](https://rubygems.org/gems/hoe).
533
- #
534
- # ### Minitest's own tests require UTF-8 external encoding.
535
- #
536
- # This is a common problem in Windows, where the default external Encoding is
537
- # often CP850, but can affect any platform. Minitest can run test suites using
538
- # any Encoding, but to run Minitest's own tests you must have a default external
539
- # Encoding of UTF-8.
540
- #
541
- # If your encoding is wrong, you'll see errors like:
542
- #
543
- # --- expected
544
- # +++ actual
545
- # @@ -1,2 +1,3 @@
546
- # # encoding: UTF-8
547
- # -"Expected /\\w+/ to not match \"blah blah blah\"."
548
- # +"Expected /\\w+/ to not match # encoding: UTF-8
549
- # +\"blah blah blah\"."
550
- #
551
- # To check your current encoding, run:
552
- #
553
- # ruby -e 'puts Encoding.default_external'
554
- #
555
- # If your output is something other than UTF-8, you can set the RUBYOPTS env
556
- # variable to a value of '-Eutf-8'. Something like:
557
- #
558
- # RUBYOPT='-Eutf-8' ruby -e 'puts Encoding.default_external'
559
- #
560
- # Check your OS/shell documentation for the precise syntax (the above will not
561
- # work on a basic Windows CMD prompt, look for the SET command). Once you've got
562
- # it successfully outputing UTF-8, use the same setting when running rake in
563
- # Minitest.
564
- #
565
- # ### Minitest's own tests require GNU (or similar) diff.
566
- #
567
- # This is also a problem primarily affecting Windows developers. PowerShell has
568
- # a command called diff, but it is not suitable for use with Minitest.
569
- #
570
- # If you see failures like either of these, you are probably missing diff tool:
571
- #
572
- # 4) Failure:
573
- # TestMinitestUnitTestCase#test_assert_equal_different_long [D:/ruby/seattlerb/minitest/test/minitest/test_minitest_test.rb:936]:
574
- # Expected: "--- expected\n+++ actual\n@@ -1 +1 @@\n-\"hahahahahahahahahahahahahahahahahahahaha\"\n+\"blahblahblahblahblahblahblahblahblahblah\"\n"
575
- # Actual: "Expected: \"hahahahahahahahahahahahahahahahahahahaha\"\n Actual: \"blahblahblahblahblahblahblahblahblahblah\""
576
- #
577
- # 5) Failure:
578
- # TestMinitestUnitTestCase#test_assert_equal_different_collection_hash_hex_invisible [D:/ruby/seattlerb/minitest/test/minitest/test_minitest_test.rb:845]:
579
- # Expected: "No visible difference in the Hash#inspect output.\nYou should look at the implementation of #== on Hash or its members.\n
580
- # {1=>#<Object:0xXXXXXX>}"
581
- # Actual: "Expected: {1=>#<Object:0x00000003ba0470>}\n Actual: {1=>#<Object:0x00000003ba0448>}"
582
- #
583
- # If you use Cygwin or MSYS2 or similar there are packages that include a GNU
584
- # diff for Windows. If you don't, you can download GNU diffutils from
585
- # http://gnuwin32.sourceforge.net/packages/diffutils.htm (make sure to add it to
586
- # your PATH).
587
- #
588
- # You can make sure it's installed and path is configured properly with:
589
- #
590
- # diff.exe -v
591
- #
592
- # There are multiple lines of output, the first should be something like:
593
- #
594
- # diff (GNU diffutils) 2.8.1
595
- #
596
- # If you are using PowerShell make sure you run diff.exe, not just diff, which
597
- # will invoke the PowerShell built in function.
598
- #
599
- # ## Known Extensions:
600
- #
601
- # capybara_minitest_spec
602
- # : Bridge between Capybara RSpec matchers and Minitest::Spec expectations
603
- # (e.g. `page.must_have_content("Title")`).
604
- # color_pound_spec_reporter
605
- # : Test names print Ruby Object types in color with your Minitest Spec style
606
- # tests.
607
- # minispec-metadata
608
- # : Metadata for describe/it blocks & CLI tag filter. E.g. `it "requires JS
609
- # driver", js: true do` & `ruby test.rb --tag js` runs tests tagged :js.
610
- # minispec-rails
611
- # : Minimal support to use Spec style in Rails 5+.
612
- # mini-apivore
613
- # : for swagger based automated API testing.
614
- # minitest-around
615
- # : Around block for minitest. An alternative to setup/teardown dance.
616
- # minitest-assert_errors
617
- # : Adds Minitest assertions to test for errors raised or not raised by
618
- # Minitest itself.
619
- # minitest-autotest
620
- # : autotest is a continuous testing facility meant to be used during
621
- # development.
622
- # minitest-bacon
623
- # : minitest-bacon extends minitest with bacon-like functionality.
624
- # minitest-bang
625
- # : Adds support for RSpec-style let! to immediately invoke let statements
626
- # before each test.
627
- # minitest-bisect
628
- # : Helps you isolate and debug random test failures.
629
- # minitest-blink1_reporter
630
- # : Display test results with a Blink1.
631
- # minitest-capistrano
632
- # : Assertions and expectations for testing Capistrano recipes.
633
- # minitest-capybara
634
- # : Capybara matchers support for minitest unit and spec.
635
- # minitest-chef-handler
636
- # : Run Minitest suites as Chef report handlers
637
- # minitest-ci
638
- # : CI reporter plugin for Minitest.
639
- # minitest-context
640
- # : Defines contexts for code reuse in Minitest specs that share common
641
- # expectations.
642
- # minitest-debugger
643
- # : Wraps assert so failed assertions drop into the ruby debugger.
644
- # minitest-display
645
- # : Patches Minitest to allow for an easily configurable output.
646
- # minitest-documentation
647
- # : Minimal documentation format inspired by rspec's.
648
- # minitest-doc_reporter
649
- # : Detailed output inspired by rspec's documentation format.
650
- # minitest-emoji
651
- # : Print out emoji for your test passes, fails, and skips.
652
- # minitest-english
653
- # : Semantically symmetric aliases for assertions and expectations.
654
- # minitest-excludes
655
- # : Clean API for excluding certain tests you don't want to run under certain
656
- # conditions.
657
- # minitest-fail-fast
658
- # : Reimplements RSpec's "fail fast" feature
659
- # minitest-filecontent
660
- # : Support unit tests with expectation results in files. Differing results
661
- # will be stored again in files.
662
- # minitest-filesystem
663
- # : Adds assertion and expectation to help testing filesystem contents.
664
- # minitest-firemock
665
- # : Makes your Minitest mocks more resilient.
666
- # minitest-focus
667
- # : Focus on one test at a time.
668
- # minitest-gcstats
669
- # : A minitest plugin that adds a report of the top tests by number of objects
670
- # allocated.
671
- # minitest-global_expectations
672
- # : Support minitest expectation methods for all objects
673
- # minitest-great_expectations
674
- # : Generally useful additions to minitest's assertions and expectations.
675
- # minitest-growl
676
- # : Test notifier for minitest via growl.
677
- # minitest-happy
678
- # : GLOBALLY ACTIVATE MINITEST PRIDE! RAWR!
679
- # minitest-have_tag
680
- # : Adds Minitest assertions to test for the existence of HTML tags, including
681
- # contents, within a provided string.
682
- # minitest-heat
683
- # : Reporting that builds a heat map of failure locations
684
- # minitest-hooks
685
- # : Around and before_all/after_all/around_all hooks
686
- # minitest-hyper
687
- # : Pretty, single-page HTML reports for your Minitest runs
688
- # minitest-implicit-subject
689
- # : Implicit declaration of the test subject.
690
- # minitest-instrument
691
- # : Instrument ActiveSupport::Notifications when test method is executed.
692
- # minitest-instrument-db
693
- # : Store information about speed of test execution provided by
694
- # minitest-instrument in database.
695
- # minitest-junit
696
- # : JUnit-style XML reporter for minitest.
697
- # minitest-keyword
698
- # : Use Minitest assertions with keyword arguments.
699
- # minitest-libnotify
700
- # : Test notifier for minitest via libnotify.
701
- # minitest-line
702
- # : Run test at line number.
703
- # minitest-logger
704
- # : Define assert_log and enable minitest to test log messages. Supports
705
- # Logger and Log4r::Logger.
706
- # minitest-macruby
707
- # : Provides extensions to minitest for macruby UI testing.
708
- # minitest-matchers
709
- # : Adds support for RSpec-style matchers to minitest.
710
- # minitest-matchers_vaccine
711
- # : Adds assertions that adhere to the matcher spec, but without any
712
- # expectation infections.
713
- # minitest-metadata
714
- # : Annotate tests with metadata (key-value).
715
- # minitest-mock_expectations
716
- # : Provides method call assertions for minitest.
717
- # minitest-mongoid
718
- # : Mongoid assertion matchers for Minitest.
719
- # minitest-must_not
720
- # : Provides must_not as an alias for wont in Minitest.
721
- # minitest-optional_retry
722
- # : Automatically retry failed test to help with flakiness.
723
- # minitest-osx
724
- # : Reporter for the Mac OS X notification center.
725
- # minitest-parallel_fork
726
- # : Fork-based parallelization
727
- # minitest-parallel-db
728
- # : Run tests in parallel with a single database.
729
- # minitest-power_assert
730
- # : PowerAssert for Minitest.
731
- # minitest-predicates
732
- # : Adds support for .predicate? methods.
733
- # minitest-profile
734
- # : List the 10 slowest tests in your suite.
735
- # minitest-rails
736
- # : Minitest integration for Rails 3.x.
737
- # minitest-rails-capybara
738
- # : Capybara integration for Minitest::Rails.
739
- # minitest-reporters
740
- # : Create customizable Minitest output formats.
741
- # minitest-rg
742
- # : Colored red/green output for Minitest.
743
- # minitest-rspec_mocks
744
- # : Use RSpec Mocks with Minitest.
745
- # minitest-server
746
- # : minitest-server provides a client/server setup with your minitest process,
747
- # allowing your test run to send its results directly to a handler.
748
- # minitest-sequel
749
- # : Minitest assertions to speed-up development and testing of Ruby Sequel
750
- # database setups.
751
- # minitest-shared_description
752
- # : Support for shared specs and shared spec subclasses
753
- # minitest-should_syntax
754
- # : RSpec-style `x.should == y` assertions for Minitest.
755
- # minitest-shouldify
756
- # : Adding all manner of shoulds to Minitest (bad idea)
757
- # minitest-snail
758
- # : Print a list of tests that take too long
759
- # minitest-spec-context
760
- # : Provides rspec-ish context method to Minitest::Spec.
761
- # minitest-spec-expect
762
- # : Expect syntax for Minitest::Spec (e.g. expect(sequences).to_include
763
- # :celery_man).
764
- # minitest-spec-magic
765
- # : Minitest::Spec extensions for Rails and beyond.
766
- # minitest-spec-rails
767
- # : Drop in Minitest::Spec superclass for ActiveSupport::TestCase.
768
- # minitest-sprint
769
- # : Runs (Get it? It's fast!) your tests and makes it easier to rerun
770
- # individual failures.
771
- # minitest-stately
772
- # : Find leaking state between tests
773
- # minitest-stub_any_instance
774
- # : Stub any instance of a method on the given class for the duration of a
775
- # block.
776
- # minitest-stub-const
777
- # : Stub constants for the duration of a block.
778
- # minitest-tags
779
- # : Add tags for minitest.
780
- # minitest-unordered
781
- # : Adds a new assertion to minitest for checking the contents of a
782
- # collection, ignoring element order.
783
- # minitest-vcr
784
- # : Automatic cassette managment with Minitest::Spec and VCR.
785
- # minitest_log
786
- # : Adds structured logging, data explication, and verdicts.
787
- # minitest_owrapper
788
- # : Get tests results as a TestResult object.
789
- # minitest_should
790
- # : Shoulda style syntax for minitest test::unit.
791
- # minitest_tu_shim
792
- # : Bridges between test/unit and minitest.
793
- # mongoid-minitest
794
- # : Minitest matchers for Mongoid.
795
- # mutant-minitest
796
- # : Minitest integration for mutant.
797
- # pry-rescue
798
- # : A pry plugin w/ minitest support. See pry-rescue/minitest.rb.
799
- # rematch
800
- # : Declutter your test files from large hardcoded data and update them
801
- # automatically when your code changes.
802
- # rspec2minitest
803
- # : Easily translate any RSpec matchers to Minitest assertions and
804
- # expectations.
805
- #
806
- #
807
- # ## Unknown Extensions:
808
- #
809
- # Authors... Please send me a pull request with a description of your minitest
810
- # extension.
811
- #
812
- # * assay-minitest
813
- # * detroit-minitest
814
- # * em-minitest-spec
815
- # * flexmock-minitest
816
- # * guard-minitest
817
- # * guard-minitest-decisiv
818
- # * minitest-activemodel
819
- # * minitest-ar-assertions
820
- # * minitest-capybara-unit
821
- # * minitest-colorer
822
- # * minitest-deluxe
823
- # * minitest-extra-assertions
824
- # * minitest-rails-shoulda
825
- # * minitest-spec
826
- # * minitest-spec-should
827
- # * minitest-sugar
828
- # * spork-minitest
829
- #
830
- #
831
- # ## Minitest related goods
832
- #
833
- # * minitest/pride fabric:
834
- # http://www.spoonflower.com/fabric/3928730-again-by-katie_allen
835
- #
836
- #
837
- # ## REQUIREMENTS:
838
- #
839
- # * Ruby 2.3+. No magic is involved. I hope.
840
- #
841
- #
842
- # ## INSTALL:
843
- #
844
- # sudo gem install minitest
845
- #
846
- # On 1.9, you already have it. To get newer candy you can still install the gem,
847
- # and then requiring "minitest/autorun" should automatically pull it in. If not,
848
- # you'll need to do it yourself:
849
- #
850
- # gem "minitest" # ensures you"re using the gem, and not the built-in MT
851
- # require "minitest/autorun"
852
- #
853
- # # ... usual testing stuffs ...
854
- #
855
- # DO NOTE: There is a serious problem with the way that ruby 1.9/2.0 packages
856
- # their own gems. They install a gem specification file, but don't install the
857
- # gem contents in the gem path. This messes up Gem.find_files and many other
858
- # things (gem which, gem contents, etc).
859
- #
860
- # Just install minitest as a gem for real and you'll be happier.
861
- #
862
- # ## LICENSE:
863
- #
864
- # (The MIT License)
865
- #
866
- # Copyright (c) Ryan Davis, seattle.rb
867
- #
868
- # Permission is hereby granted, free of charge, to any person obtaining a copy
869
- # of this software and associated documentation files (the 'Software'), to deal
870
- # in the Software without restriction, including without limitation the rights
871
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
872
- # copies of the Software, and to permit persons to whom the Software is
873
- # furnished to do so, subject to the following conditions:
874
- #
875
- # The above copyright notice and this permission notice shall be included in all
876
- # copies or substantial portions of the Software.
877
- #
878
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
879
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
880
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
881
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
882
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
883
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
884
- # SOFTWARE.
2
+ # The top-level namespace for Minitest. Also the location of the main runtime.
3
+ # See `Minitest.run` for more information.
885
4
  #
886
5
  module Minitest
6
+ @@installed_at_exit: untyped
7
+
8
+ @@after_run: untyped
9
+
10
+ self.@extensions: untyped
11
+
12
+ def self.cattr_accessor: (untyped name) -> untyped
13
+
887
14
  # <!--
888
15
  # rdoc-file=lib/minitest.rb
889
16
  # - autorun()
@@ -901,12 +28,22 @@ module Minitest
901
28
  #
902
29
  # Minitest.after_run { p $debugging_info }
903
30
  #
904
- def self.after_run: () ?{ () -> untyped } -> untyped
31
+ def self.after_run: () { (?) -> untyped } -> untyped
905
32
 
906
- def self.init_plugins: (untyped options) -> untyped
33
+ # <!--
34
+ # rdoc-file=lib/minitest.rb
35
+ # - register_plugin(name_or_mod)
36
+ # -->
37
+ # Register a plugin to be used. Does NOT require / load it.
38
+ #
39
+ def self.register_plugin: (untyped name_or_mod) -> nil
907
40
 
908
41
  def self.load_plugins: () -> (nil | untyped)
909
42
 
43
+ def self.init_plugins: (untyped options) -> untyped
44
+
45
+ def self.process_args: (?untyped args) -> untyped
46
+
910
47
  # <!--
911
48
  # rdoc-file=lib/minitest.rb
912
49
  # - run(args = [])
@@ -919,9 +56,12 @@ module Minitest
919
56
  #
920
57
  # Minitest.autorun
921
58
  # Minitest.run(args)
59
+ # Minitest.load_plugins
60
+ # Minitest.process_args
61
+ # Minitest.init_plugins
922
62
  # Minitest.__run(reporter, options)
923
63
  # Runnable.runnables.each
924
- # runnable.run(reporter, options)
64
+ # runnable_klass.run(reporter, options)
925
65
  # self.runnable_methods.each
926
66
  # self.run_one_method(self, runnable_method, reporter)
927
67
  # Minitest.run_one_method(klass, runnable_method)
@@ -929,6 +69,8 @@ module Minitest
929
69
  #
930
70
  def self.run: (?untyped args) -> untyped
931
71
 
72
+ def self.empty_run!: (untyped options) -> untyped
73
+
932
74
  # <!--
933
75
  # rdoc-file=lib/minitest.rb
934
76
  # - __run(reporter, options)
@@ -937,18 +79,25 @@ module Minitest
937
79
  #
938
80
  def self.__run: (untyped reporter, untyped options) -> untyped
939
81
 
940
- def self.process_args: (?untyped args) -> untyped
941
-
942
82
  def self.filter_backtrace: (untyped bt) -> untyped
943
83
 
944
84
  def self.run_one_method: (untyped klass, untyped method_name) -> untyped
945
85
 
946
- # :nodoc:
947
86
  def self.clock_time: () -> untyped
948
87
 
88
+ # <!--
89
+ # rdoc-file=lib/minitest/manual_plugins.rb
90
+ # - load(*names)
91
+ # -->
92
+ # Manually load plugins by name.
93
+ #
94
+ def self.load: (*untyped names) -> untyped
95
+
949
96
  def self.plugin_pride_options: (untyped opts, untyped _options) -> untyped
950
97
 
951
- def self.plugin_pride_init: (untyped options) -> (untyped | nil)
98
+ def self.plugin_pride_init: (untyped options) -> (nil | untyped)
99
+
100
+ attr_accessor self.seed: untyped
952
101
 
953
102
  attr_accessor self.parallel_executor: untyped
954
103
 
@@ -960,7 +109,7 @@ module Minitest
960
109
 
961
110
  attr_accessor self.info_signal: untyped
962
111
 
963
- VERSION: String
112
+ attr_accessor self.allow_fork: untyped
964
113
 
965
- ENCS: true
114
+ VERSION: String
966
115
  end