test-unit 3.4.3 → 3.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -3
- data/Rakefile +0 -9
- data/doc/text/getting-started.md +1 -1
- data/doc/text/news.md +53 -0
- data/lib/test/unit/assertion-failed-error.rb +35 -0
- data/lib/test/unit/assertions.rb +101 -20
- data/lib/test/unit/autorunner.rb +13 -1
- data/lib/test/unit/collector/descendant.rb +1 -0
- data/lib/test/unit/collector/dir.rb +4 -2
- data/lib/test/unit/collector/load.rb +2 -0
- data/lib/test/unit/collector/objectspace.rb +1 -0
- data/lib/test/unit/collector.rb +31 -0
- data/lib/test/unit/testcase.rb +31 -1
- data/lib/test/unit/testsuite.rb +1 -1
- data/lib/test/unit/util/memory-usage.rb +47 -0
- data/lib/test/unit/version.rb +1 -1
- data/lib/test/unit.rb +4 -4
- metadata +6 -83
- data/test/collector/test-descendant.rb +0 -182
- data/test/collector/test-load.rb +0 -475
- data/test/collector/test_dir.rb +0 -407
- data/test/collector/test_objectspace.rb +0 -102
- data/test/fixtures/header-label.csv +0 -3
- data/test/fixtures/header-label.tsv +0 -3
- data/test/fixtures/header.csv +0 -3
- data/test/fixtures/header.tsv +0 -3
- data/test/fixtures/no-header.csv +0 -2
- data/test/fixtures/no-header.tsv +0 -2
- data/test/fixtures/plus.csv +0 -3
- data/test/run-test.rb +0 -22
- data/test/test-assertions.rb +0 -2281
- data/test/test-attribute-matcher.rb +0 -38
- data/test/test-attribute.rb +0 -123
- data/test/test-code-snippet.rb +0 -79
- data/test/test-color-scheme.rb +0 -123
- data/test/test-color.rb +0 -47
- data/test/test-data.rb +0 -419
- data/test/test-diff.rb +0 -518
- data/test/test-emacs-runner.rb +0 -60
- data/test/test-error.rb +0 -26
- data/test/test-failure.rb +0 -33
- data/test/test-fault-location-detector.rb +0 -163
- data/test/test-fixture.rb +0 -713
- data/test/test-notification.rb +0 -33
- data/test/test-omission.rb +0 -81
- data/test/test-pending.rb +0 -70
- data/test/test-priority.rb +0 -184
- data/test/test-test-case.rb +0 -1284
- data/test/test-test-result.rb +0 -113
- data/test/test-test-suite-creator.rb +0 -97
- data/test/test-test-suite.rb +0 -151
- data/test/testunit-test-util.rb +0 -33
- data/test/ui/test_testrunmediator.rb +0 -20
- data/test/util/test-method-owner-finder.rb +0 -38
- data/test/util/test-output.rb +0 -11
- data/test/util/test_backtracefilter.rb +0 -52
- data/test/util/test_observable.rb +0 -102
- data/test/util/test_procwrapper.rb +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c560e1a37cdbf43985f90a72db8f9e58032f6c78a4cab6a0eed1043dcb432b82
|
4
|
+
data.tar.gz: e8c8c21c52598a8e1db27fea5532893f8ec6c6464f60fb426fbfefd16638326d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 526a4fe5b67806bcb084f147876c4b8202f4065d948b306ad90d0cff5358166bdea6d71aa83fb772ee8a9c02040c7a9b50fe280cde50b6289eacecc11b88e328
|
7
|
+
data.tar.gz: 20f8d27643640248a29f583c63a00de7937ca6788d5cf6e358c6587387cc3c5fb9d376be519218a3ec0532455524566460871f34783f1a9ec2cc7da0020b8d81
|
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# test-unit
|
2
2
|
|
3
|
-
[![](https://badge.fury.io/rb/test-unit.
|
4
|
-
[![](https://
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/test-unit.png)](http://badge.fury.io/rb/test-unit)
|
4
|
+
[![Build Status for Ruby 2.1+](https://github.com/test-unit/test-unit/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/test-unit/test-unit/actions/workflows/test.yml?query=branch%3Amaster+)
|
5
|
+
[![Build Status for Ruby 1.9 and 2.0](https://travis-ci.com/test-unit/test-unit.svg?branch=master)](https://travis-ci.com/test-unit/test-unit)
|
5
6
|
|
6
7
|
* http://test-unit.github.io/
|
7
8
|
* https://github.com/test-unit/test-unit
|
@@ -24,7 +25,7 @@ writing tests, checking results and automated testing in Ruby.
|
|
24
25
|
to radically change very soon).
|
25
26
|
|
26
27
|
* test-unit will be improved actively and may break
|
27
|
-
|
28
|
+
compatibility with test-unit 1.2.3. (We will not hope it
|
28
29
|
if it isn't needed.)
|
29
30
|
|
30
31
|
* Some features exist as separated gems like GUI test
|
data/Rakefile
CHANGED
@@ -24,7 +24,6 @@ require "packnga"
|
|
24
24
|
task :default => :test
|
25
25
|
|
26
26
|
base_dir = File.dirname(__FILE__)
|
27
|
-
html_base_dir = File.join(base_dir, "doc", "html")
|
28
27
|
|
29
28
|
helper = Bundler::GemHelper.new(base_dir)
|
30
29
|
def helper.version_tag
|
@@ -53,14 +52,6 @@ def rake(*arguments)
|
|
53
52
|
ruby($0, *arguments)
|
54
53
|
end
|
55
54
|
|
56
|
-
namespace :html do
|
57
|
-
desc "Publish HTML to Web site."
|
58
|
-
task :publish do
|
59
|
-
# FIXME Do nothing for now
|
60
|
-
#rsync_to_rubyforge(spec, "#{html_base_dir}/", "")
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
55
|
task :test do
|
65
56
|
ruby("test/run-test.rb")
|
66
57
|
end
|
data/doc/text/getting-started.md
CHANGED
data/doc/text/news.md
CHANGED
@@ -1,5 +1,58 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 3.4.7 - 2021-09-14 {#version-3-4-7}
|
4
|
+
|
5
|
+
### Fixes
|
6
|
+
|
7
|
+
* Suppressed a warning on Ruby 2.
|
8
|
+
[GitHub#205][Patch by Kenichi Kamiya]
|
9
|
+
|
10
|
+
### Thanks
|
11
|
+
|
12
|
+
* Kenichi Kamiya
|
13
|
+
|
14
|
+
## 3.4.6 - 2021-09-11 {#version-3-4-6}
|
15
|
+
|
16
|
+
### Improvements
|
17
|
+
|
18
|
+
* Added support for tests that use Ractor. Use
|
19
|
+
`Test::Unit::TestCase.ractor` to declare that these tests use
|
20
|
+
Ractor.
|
21
|
+
|
22
|
+
* Added `--debug-on-failure` option.
|
23
|
+
|
24
|
+
## 3.4.5 - 2021-09-04 {#version-3-4-5}
|
25
|
+
|
26
|
+
### Improvements
|
27
|
+
|
28
|
+
* Added more metadata to gemspec.
|
29
|
+
[GitHub#183][Patch by Kenichi Kamiya]
|
30
|
+
|
31
|
+
* Removed needless files from gem.
|
32
|
+
[GitHub#184][Patch by Kenichi Kamiya]
|
33
|
+
|
34
|
+
* Updated documents.
|
35
|
+
[GitHub#191][GitHub#192][GitHub#193][GitHub#199][GitHub#200]
|
36
|
+
[GitHub#201][Patch by Kenichi Kamiya]
|
37
|
+
|
38
|
+
* Added `assert_nothing_leaked_memory`.
|
39
|
+
|
40
|
+
### Fixes
|
41
|
+
|
42
|
+
* Fixed typos in documents.
|
43
|
+
[GitHub#189][GitHub#190][GitHub#195][GitHub#197][Patch by Kenichi Kamiya]
|
44
|
+
|
45
|
+
### Thanks
|
46
|
+
|
47
|
+
* Kenichi Kamiya
|
48
|
+
|
49
|
+
## 3.4.4 - 2021-06-04 {#version-3-4-4}
|
50
|
+
|
51
|
+
### Improvements
|
52
|
+
|
53
|
+
* Renamed `assert_all?` to `assert_all`. `assert_all?` is deprecated
|
54
|
+
but is available.
|
55
|
+
|
3
56
|
## 3.4.3 - 2021-06-04 {#version-3-4-3}
|
4
57
|
|
5
58
|
### Improvements
|
@@ -9,6 +9,17 @@ module Test
|
|
9
9
|
|
10
10
|
# Thrown by Test::Unit::Assertions when an assertion fails.
|
11
11
|
class AssertionFailedError < StandardError
|
12
|
+
@debug_on_failure = false
|
13
|
+
class << self
|
14
|
+
def debug_on_failure=(boolean)
|
15
|
+
@debug_on_failure = boolean
|
16
|
+
end
|
17
|
+
|
18
|
+
def debug_on_failure?
|
19
|
+
@debug_on_failure
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
12
23
|
attr_accessor :expected, :actual, :user_message
|
13
24
|
attr_accessor :inspected_expected, :inspected_actual
|
14
25
|
def initialize(message=nil, options=nil)
|
@@ -19,6 +30,30 @@ module Test
|
|
19
30
|
@inspected_actual = options[:inspected_actual]
|
20
31
|
@user_message = options[:user_message]
|
21
32
|
super(message)
|
33
|
+
debug_on_failure
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def debug_on_failure
|
38
|
+
return unless self.class.debug_on_failure?
|
39
|
+
|
40
|
+
begin
|
41
|
+
require "debug"
|
42
|
+
rescue LoadError
|
43
|
+
return
|
44
|
+
end
|
45
|
+
|
46
|
+
return unless binding.respond_to?(:break)
|
47
|
+
|
48
|
+
frames = caller(0)
|
49
|
+
pre = nil
|
50
|
+
Util::BacktraceFilter.filter_backtrace(frames).each do |location|
|
51
|
+
frame_index = frames.index(location)
|
52
|
+
next if frame_index.nil?
|
53
|
+
pre = "frame #{frame_index}"
|
54
|
+
break
|
55
|
+
end
|
56
|
+
binding.break(pre: pre)
|
22
57
|
end
|
23
58
|
end
|
24
59
|
end
|
data/lib/test/unit/assertions.rb
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
require 'test/unit/assertion-failed-error'
|
7
7
|
require 'test/unit/util/backtracefilter'
|
8
|
+
require 'test/unit/util/memory-usage'
|
8
9
|
require 'test/unit/util/method-owner-finder'
|
9
10
|
require 'test/unit/diff'
|
10
11
|
|
@@ -43,7 +44,7 @@ module Test
|
|
43
44
|
|
44
45
|
##
|
45
46
|
# The assertion upon which all other assertions are based. Passes if the
|
46
|
-
# block yields
|
47
|
+
# block yields not false nor nil.
|
47
48
|
#
|
48
49
|
# @example
|
49
50
|
# assert_block "Couldn't do the thing" do
|
@@ -454,7 +455,7 @@ EOT
|
|
454
455
|
alias_method :refute_instance_of, :assert_not_instance_of
|
455
456
|
|
456
457
|
##
|
457
|
-
# Passes if `object
|
458
|
+
# Passes if `object`.nil?.
|
458
459
|
#
|
459
460
|
# @example
|
460
461
|
# assert_nil [1, 2].uniq!
|
@@ -627,7 +628,7 @@ EOT
|
|
627
628
|
##
|
628
629
|
# Compares the `object1` with `object2` using `operator`.
|
629
630
|
#
|
630
|
-
# Passes if object1.__send__(operator, object2) is
|
631
|
+
# Passes if object1.__send__(operator, object2) is not false nor nil.
|
631
632
|
#
|
632
633
|
# @example
|
633
634
|
# assert_operator 5, :>=, 4
|
@@ -647,7 +648,7 @@ EOT
|
|
647
648
|
##
|
648
649
|
# Compares the `object1` with `object2` using `operator`.
|
649
650
|
#
|
650
|
-
# Passes if object1.__send__(operator, object2) is
|
651
|
+
# Passes if object1.__send__(operator, object2) is false or nil.
|
651
652
|
#
|
652
653
|
# @example
|
653
654
|
# assert_not_operator(5, :<, 4) # => pass
|
@@ -787,7 +788,7 @@ EOT
|
|
787
788
|
alias_method :refute_match, :assert_not_match
|
788
789
|
|
789
790
|
##
|
790
|
-
#
|
791
|
+
# @deprecated Use {#assert_not_match} instead.
|
791
792
|
#
|
792
793
|
# Passes if `regexp` !~ `string`
|
793
794
|
#
|
@@ -1177,7 +1178,7 @@ EOT
|
|
1177
1178
|
|
1178
1179
|
public
|
1179
1180
|
##
|
1180
|
-
# Passes if the method
|
1181
|
+
# Passes if the method `__send__` returns not false nor nil.
|
1181
1182
|
#
|
1182
1183
|
# `send_array` is composed of:
|
1183
1184
|
# * A receiver
|
@@ -1217,7 +1218,7 @@ EOT
|
|
1217
1218
|
end
|
1218
1219
|
|
1219
1220
|
##
|
1220
|
-
# Passes if the method
|
1221
|
+
# Passes if the method `__send__` returns false or nil.
|
1221
1222
|
#
|
1222
1223
|
# `send_array` is composed of:
|
1223
1224
|
# * A receiver
|
@@ -1267,7 +1268,7 @@ EOT
|
|
1267
1268
|
assert_block(build_message(message,
|
1268
1269
|
"<true> or <false> expected but was\n<?>",
|
1269
1270
|
actual)) do
|
1270
|
-
|
1271
|
+
true == actual || false == actual
|
1271
1272
|
end
|
1272
1273
|
end
|
1273
1274
|
end
|
@@ -1283,7 +1284,7 @@ EOT
|
|
1283
1284
|
assert_block(build_message(message,
|
1284
1285
|
"<true> expected but was\n<?>",
|
1285
1286
|
actual)) do
|
1286
|
-
|
1287
|
+
true == actual
|
1287
1288
|
end
|
1288
1289
|
end
|
1289
1290
|
end
|
@@ -1299,14 +1300,14 @@ EOT
|
|
1299
1300
|
assert_block(build_message(message,
|
1300
1301
|
"<false> expected but was\n<?>",
|
1301
1302
|
actual)) do
|
1302
|
-
|
1303
|
+
false == actual
|
1303
1304
|
end
|
1304
1305
|
end
|
1305
1306
|
end
|
1306
1307
|
|
1307
1308
|
##
|
1308
1309
|
# Passes if expression "`expected` `operator`
|
1309
|
-
# `actual`" is
|
1310
|
+
# `actual`" is not false nor nil.
|
1310
1311
|
#
|
1311
1312
|
# @example
|
1312
1313
|
# assert_compare(1, "<", 10) # -> pass
|
@@ -1435,7 +1436,7 @@ EOT
|
|
1435
1436
|
end
|
1436
1437
|
|
1437
1438
|
##
|
1438
|
-
# Passes if `object`.`predicate` is
|
1439
|
+
# Passes if `object`.`predicate` is not false nor nil.
|
1439
1440
|
#
|
1440
1441
|
# @example
|
1441
1442
|
# assert_predicate([], :empty?) # -> pass
|
@@ -1457,7 +1458,7 @@ EOT
|
|
1457
1458
|
end
|
1458
1459
|
|
1459
1460
|
##
|
1460
|
-
# Passes if `object`.`predicate` is
|
1461
|
+
# Passes if `object`.`predicate` is false or nil.
|
1461
1462
|
#
|
1462
1463
|
# @example
|
1463
1464
|
# assert_not_predicate([1], :empty?) # -> pass
|
@@ -1677,7 +1678,7 @@ EOT
|
|
1677
1678
|
# @since 3.0.0
|
1678
1679
|
alias_method :refute_empty, :assert_not_empty
|
1679
1680
|
|
1680
|
-
# @overload assert_all
|
1681
|
+
# @overload assert_all(collection, message=nil, &block)
|
1681
1682
|
#
|
1682
1683
|
# Asserts that all `block.call(item)` where `item` is each
|
1683
1684
|
# item in `collection` are not false nor nil.
|
@@ -1686,12 +1687,12 @@ EOT
|
|
1686
1687
|
# with any `block`.
|
1687
1688
|
#
|
1688
1689
|
# @example Pass patterns
|
1689
|
-
# assert_all
|
1690
|
-
# assert_all
|
1691
|
-
# assert_all
|
1690
|
+
# assert_all([1, 2, 3]) {|item| item > 0} # => pass
|
1691
|
+
# assert_all([1, 2, 3], &:positive?) # => pass
|
1692
|
+
# assert_all([]) {|item| false} # => pass
|
1692
1693
|
#
|
1693
1694
|
# @example Failure pattern
|
1694
|
-
# assert_all
|
1695
|
+
# assert_all([0, 1, 2], &:zero?) # => failure
|
1695
1696
|
#
|
1696
1697
|
# @param [#each] collection The check target.
|
1697
1698
|
# @param [String] message The additional user message. It is
|
@@ -1700,8 +1701,8 @@ EOT
|
|
1700
1701
|
# @yieldreturn [Object] The checked object.
|
1701
1702
|
# @return [void]
|
1702
1703
|
#
|
1703
|
-
# @since 3.4.
|
1704
|
-
def assert_all
|
1704
|
+
# @since 3.4.4
|
1705
|
+
def assert_all(collection, message=nil)
|
1705
1706
|
_wrap_assertion do
|
1706
1707
|
failed = false
|
1707
1708
|
result = {}
|
@@ -1724,6 +1725,86 @@ EOT
|
|
1724
1725
|
end
|
1725
1726
|
end
|
1726
1727
|
|
1728
|
+
# Just for Ruby's tool/lib/test/unit compatibility.
|
1729
|
+
#
|
1730
|
+
# @since 3.4.3
|
1731
|
+
alias_method :assert_all?, :assert_all
|
1732
|
+
|
1733
|
+
# @overload assert_nothing_leaked_memory(max_increasable_size, target=:physical, message=nil, &block)
|
1734
|
+
#
|
1735
|
+
# Asserts that increased memory usage by `block.call` is less
|
1736
|
+
# than `max_increasable_size`. `GC.start` is called before and
|
1737
|
+
# after `block.call`.
|
1738
|
+
#
|
1739
|
+
# This assertion may be fragile. Because memory usage is
|
1740
|
+
# depends on the current Ruby process's memory
|
1741
|
+
# usage. Launching a new Ruby process for this will produce
|
1742
|
+
# more stable result but we need to specify target code as
|
1743
|
+
# `String` instead of block for the approach. We choose easy
|
1744
|
+
# to write API approach rather than more stable result
|
1745
|
+
# approach for this case.
|
1746
|
+
#
|
1747
|
+
# @example Pass pattern
|
1748
|
+
# require "objspace"
|
1749
|
+
# size_per_object = ObjectSpace.memsize_of("Hello")
|
1750
|
+
# # If memory isn't leaked, physical memory of almost created objects
|
1751
|
+
# # (1000 - 10 objects) must be freed.
|
1752
|
+
# assert_nothing_leaked_memory(size_per_object * 10) do
|
1753
|
+
# 1_000.times do
|
1754
|
+
# "Hello".dup
|
1755
|
+
# end
|
1756
|
+
# end # => pass
|
1757
|
+
#
|
1758
|
+
# @example Failure pattern
|
1759
|
+
# require "objspace"
|
1760
|
+
# size_per_object = ObjectSpace.memsize_of("Hello")
|
1761
|
+
# strings = []
|
1762
|
+
# assert_nothing_leaked_memory(size_per_object * 10) do
|
1763
|
+
# 10_000.times do
|
1764
|
+
# # Created objects aren't GC-ed because they are referred.
|
1765
|
+
# strings << "Hello".dup
|
1766
|
+
# end
|
1767
|
+
# end # => failure
|
1768
|
+
#
|
1769
|
+
# @param target [:physical, :virtual] which memory usage is
|
1770
|
+
# used for comparing. `:physical` means physical memory usage
|
1771
|
+
# also known as Resident Set Size (RSS). `:virtual` means
|
1772
|
+
# virtual memory usage.
|
1773
|
+
# @yield [] do anything you want to measure memory usage
|
1774
|
+
# in the block.
|
1775
|
+
# @yieldreturn [void]
|
1776
|
+
# @return [void]
|
1777
|
+
#
|
1778
|
+
# @since 3.4.5
|
1779
|
+
def assert_nothing_leaked_memory(max_increasable_size,
|
1780
|
+
target=:physical,
|
1781
|
+
message=nil)
|
1782
|
+
_wrap_assertion do
|
1783
|
+
GC.start
|
1784
|
+
before = Util::MemoryUsage.new
|
1785
|
+
unless before.collected?
|
1786
|
+
omit("memory usage collection isn't supported on this platform")
|
1787
|
+
end
|
1788
|
+
yield
|
1789
|
+
GC.start
|
1790
|
+
after = Util::MemoryUsage.new
|
1791
|
+
before_value = before.__send__(target)
|
1792
|
+
after_value = after.__send__(target)
|
1793
|
+
actual_increased_size = after_value - before_value
|
1794
|
+
template = <<-TEMPLATE
|
1795
|
+
<?> was expected to be less than
|
1796
|
+
<?>.
|
1797
|
+
TEMPLATE
|
1798
|
+
full_message = build_message(message,
|
1799
|
+
template,
|
1800
|
+
actual_increased_size,
|
1801
|
+
max_increasable_size)
|
1802
|
+
assert_block(full_message) do
|
1803
|
+
actual_increased_size < max_increasable_size
|
1804
|
+
end
|
1805
|
+
end
|
1806
|
+
end
|
1807
|
+
|
1727
1808
|
##
|
1728
1809
|
# Builds a failure message. `user_message` is added before the
|
1729
1810
|
# `template` and `arguments` replaces the '?'s positionally in
|
data/lib/test/unit/autorunner.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require "English"
|
2
|
+
require "optparse"
|
2
3
|
|
3
4
|
require "test/unit/color-scheme"
|
4
5
|
require "test/unit/priority"
|
5
6
|
require "test/unit/attribute-matcher"
|
6
7
|
require "test/unit/testcase"
|
7
|
-
require "optparse"
|
8
8
|
|
9
9
|
module Test
|
10
10
|
module Unit
|
@@ -144,6 +144,7 @@ module Test
|
|
144
144
|
attr_accessor :pattern, :exclude, :base, :workdir
|
145
145
|
attr_accessor :color_scheme, :listeners
|
146
146
|
attr_writer :stop_on_failure
|
147
|
+
attr_writer :debug_on_failure
|
147
148
|
attr_writer :runner, :collector
|
148
149
|
|
149
150
|
def initialize(standalone)
|
@@ -159,6 +160,7 @@ module Test
|
|
159
160
|
@workdir = nil
|
160
161
|
@listeners = []
|
161
162
|
@stop_on_failure = false
|
163
|
+
@debug_on_failure = false
|
162
164
|
config_file = "test-unit.yml"
|
163
165
|
if File.exist?(config_file)
|
164
166
|
load_config(config_file)
|
@@ -172,6 +174,10 @@ module Test
|
|
172
174
|
@stop_on_failure
|
173
175
|
end
|
174
176
|
|
177
|
+
def debug_on_failure?
|
178
|
+
@debug_on_failure
|
179
|
+
end
|
180
|
+
|
175
181
|
def prepare
|
176
182
|
PREPARE_HOOKS.each do |handler|
|
177
183
|
handler.call(self)
|
@@ -381,6 +387,12 @@ module Test
|
|
381
387
|
@stop_on_failure = boolean
|
382
388
|
end
|
383
389
|
|
390
|
+
o.on("--[no-]debug-on-failure",
|
391
|
+
"Run debugger if available on failure",
|
392
|
+
"(#{AssertionFailedError.debug_on_failure?})") do |boolean|
|
393
|
+
AssertionFailedError.debug_on_failure = boolean
|
394
|
+
end
|
395
|
+
|
384
396
|
ADDITIONAL_OPTIONS.each do |option_builder|
|
385
397
|
option_builder.call(self, o)
|
386
398
|
end
|