mega-sharp-tool 0.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.
- checksums.yaml +7 -0
- data/mega-sharp-tool.gemspec +12 -0
- data/minitest-6.0.6/History.rdoc +1860 -0
- data/minitest-6.0.6/Manifest.txt +41 -0
- data/minitest-6.0.6/README.rdoc +763 -0
- data/minitest-6.0.6/Rakefile +89 -0
- data/minitest-6.0.6/bin/minitest +5 -0
- data/minitest-6.0.6/design_rationale.rb +54 -0
- data/minitest-6.0.6/lib/hoe/minitest.rb +30 -0
- data/minitest-6.0.6/lib/minitest/assertions.rb +821 -0
- data/minitest-6.0.6/lib/minitest/autorun.rb +5 -0
- data/minitest-6.0.6/lib/minitest/benchmark.rb +452 -0
- data/minitest-6.0.6/lib/minitest/bisect.rb +304 -0
- data/minitest-6.0.6/lib/minitest/complete.rb +56 -0
- data/minitest-6.0.6/lib/minitest/compress.rb +94 -0
- data/minitest-6.0.6/lib/minitest/error_on_warning.rb +11 -0
- data/minitest-6.0.6/lib/minitest/expectations.rb +321 -0
- data/minitest-6.0.6/lib/minitest/find_minimal_combination.rb +127 -0
- data/minitest-6.0.6/lib/minitest/hell.rb +11 -0
- data/minitest-6.0.6/lib/minitest/manual_plugins.rb +4 -0
- data/minitest-6.0.6/lib/minitest/parallel.rb +72 -0
- data/minitest-6.0.6/lib/minitest/path_expander.rb +432 -0
- data/minitest-6.0.6/lib/minitest/pride.rb +4 -0
- data/minitest-6.0.6/lib/minitest/pride_plugin.rb +135 -0
- data/minitest-6.0.6/lib/minitest/server.rb +49 -0
- data/minitest-6.0.6/lib/minitest/server_plugin.rb +88 -0
- data/minitest-6.0.6/lib/minitest/spec.rb +324 -0
- data/minitest-6.0.6/lib/minitest/sprint.rb +105 -0
- data/minitest-6.0.6/lib/minitest/sprint_plugin.rb +39 -0
- data/minitest-6.0.6/lib/minitest/test.rb +232 -0
- data/minitest-6.0.6/lib/minitest/test_task.rb +331 -0
- data/minitest-6.0.6/lib/minitest.rb +1232 -0
- data/minitest-6.0.6/test/minitest/metametameta.rb +150 -0
- data/minitest-6.0.6/test/minitest/test_bisect.rb +249 -0
- data/minitest-6.0.6/test/minitest/test_find_minimal_combination.rb +138 -0
- data/minitest-6.0.6/test/minitest/test_minitest_assertions.rb +1729 -0
- data/minitest-6.0.6/test/minitest/test_minitest_benchmark.rb +151 -0
- data/minitest-6.0.6/test/minitest/test_minitest_reporter.rb +437 -0
- data/minitest-6.0.6/test/minitest/test_minitest_spec.rb +1095 -0
- data/minitest-6.0.6/test/minitest/test_minitest_test.rb +1295 -0
- data/minitest-6.0.6/test/minitest/test_minitest_test_task.rb +57 -0
- data/minitest-6.0.6/test/minitest/test_path_expander.rb +229 -0
- data/minitest-6.0.6/test/minitest/test_server.rb +146 -0
- metadata +83 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
require "minitest/autorun"
|
|
2
|
+
require "minitest/benchmark"
|
|
3
|
+
|
|
4
|
+
##
|
|
5
|
+
# Used to verify data:
|
|
6
|
+
# https://www.wolframalpha.com/examples/RegressionAnalysis.html
|
|
7
|
+
|
|
8
|
+
class TestMinitestBenchmark < Minitest::Test
|
|
9
|
+
def test_cls_bench_exp
|
|
10
|
+
assert_equal [2, 4, 8, 16, 32], Minitest::Benchmark.bench_exp(2, 32, 2)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_cls_bench_linear
|
|
14
|
+
assert_equal [2, 4, 6, 8, 10], Minitest::Benchmark.bench_linear(2, 10, 2)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_cls_runnable_methods
|
|
18
|
+
assert_equal [], Minitest::Benchmark.runnable_methods
|
|
19
|
+
|
|
20
|
+
c = Class.new Minitest::Benchmark do
|
|
21
|
+
def bench_blah
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
assert_equal ["bench_blah"], c.runnable_methods
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_cls_run
|
|
29
|
+
c = Class.new Minitest::Benchmark do
|
|
30
|
+
def bench_dummy
|
|
31
|
+
assert true
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
reporter = Minitest::StatisticsReporter.new(StringIO.new(+""))
|
|
36
|
+
|
|
37
|
+
c.run c, "bench_dummy", reporter
|
|
38
|
+
|
|
39
|
+
assert_equal 1, reporter.count
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_cls_bench_range
|
|
43
|
+
assert_equal [1, 10, 100, 1_000, 10_000], Minitest::Benchmark.bench_range
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_fit_exponential_clean
|
|
47
|
+
x = [1.0, 2.0, 3.0, 4.0, 5.0]
|
|
48
|
+
y = x.map { |n| 1.1 * Math.exp(2.1 * n) }
|
|
49
|
+
|
|
50
|
+
assert_fit :exponential, x, y, 1.0, 1.1, 2.1
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_fit_exponential_noisy
|
|
54
|
+
x = [1.0, 1.9, 2.6, 3.4, 5.0]
|
|
55
|
+
y = [12, 10, 8.2, 6.9, 5.9]
|
|
56
|
+
|
|
57
|
+
# verified with Numbers and R
|
|
58
|
+
assert_fit :exponential, x, y, 0.95, 13.81148, -0.1820
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_fit_logarithmic_clean
|
|
62
|
+
x = [1.0, 2.0, 3.0, 4.0, 5.0]
|
|
63
|
+
y = x.map { |n| 1.1 + 2.1 * Math.log(n) }
|
|
64
|
+
|
|
65
|
+
assert_fit :logarithmic, x, y, 1.0, 1.1, 2.1
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_fit_logarithmic_noisy
|
|
69
|
+
x = [1.0, 2.0, 3.0, 4.0, 5.0]
|
|
70
|
+
# Generated with
|
|
71
|
+
# y = x.map { |n| jitter = 0.999 + 0.002 * rand; (Math.log(n) ) * jitter }
|
|
72
|
+
y = [0.0, 0.6935, 1.0995, 1.3873, 1.6097]
|
|
73
|
+
|
|
74
|
+
assert_fit :logarithmic, x, y, 0.95, 0, 1
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_fit_constant_clean
|
|
78
|
+
x = (1..5).to_a
|
|
79
|
+
y = [5.0, 5.0, 5.0, 5.0, 5.0]
|
|
80
|
+
|
|
81
|
+
assert_fit :linear, x, y, nil, 5.0, 0
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_fit_constant_noisy
|
|
85
|
+
x = (1..5).to_a
|
|
86
|
+
y = [1.0, 1.2, 1.0, 0.8, 1.0]
|
|
87
|
+
|
|
88
|
+
# verified in numbers and R
|
|
89
|
+
assert_fit :linear, x, y, nil, 1.12, -0.04
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_fit_linear_clean
|
|
93
|
+
# y = m * x + b where m = 2.2, b = 3.1
|
|
94
|
+
x = (1..5).to_a
|
|
95
|
+
y = x.map { |n| 2.2 * n + 3.1 }
|
|
96
|
+
|
|
97
|
+
assert_fit :linear, x, y, 1.0, 3.1, 2.2
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_fit_linear_noisy
|
|
101
|
+
x = [ 60, 61, 62, 63, 65]
|
|
102
|
+
y = [3.1, 3.6, 3.8, 4.0, 4.1]
|
|
103
|
+
|
|
104
|
+
# verified in numbers and R
|
|
105
|
+
assert_fit :linear, x, y, 0.8315, -7.9635, 0.1878
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_fit_power_clean
|
|
109
|
+
# y = A x ** B, where B = b and A = e ** a
|
|
110
|
+
# if, A = 1, B = 2, then
|
|
111
|
+
|
|
112
|
+
x = [1.0, 2.0, 3.0, 4.0, 5.0]
|
|
113
|
+
y = [1.0, 4.0, 9.0, 16.0, 25.0]
|
|
114
|
+
|
|
115
|
+
assert_fit :power, x, y, 1.0, 1.0, 2.0
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def test_fit_power_noisy
|
|
119
|
+
# from www.engr.uidaho.edu/thompson/courses/ME330/lecture/least_squares.html
|
|
120
|
+
x = [10, 12, 15, 17, 20, 22, 25, 27, 30, 32, 35]
|
|
121
|
+
y = [95, 105, 125, 141, 173, 200, 253, 298, 385, 459, 602]
|
|
122
|
+
|
|
123
|
+
# verified in numbers
|
|
124
|
+
assert_fit :power, x, y, 0.90, 2.6217, 1.4556
|
|
125
|
+
|
|
126
|
+
# income to % of households below income amount
|
|
127
|
+
# https://library.wolfram.com/infocenter/Conferences/6461/PowerLaws.nb
|
|
128
|
+
x = [15_000, 25_000, 35_000, 50_000, 75_000, 100_000]
|
|
129
|
+
y = [0.154, 0.283, 0.402, 0.55, 0.733, 0.843]
|
|
130
|
+
|
|
131
|
+
# verified in numbers
|
|
132
|
+
assert_fit :power, x, y, 0.96, 3.119e-5, 0.8959
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def assert_fit msg, x, y, fit, exp_a, exp_b
|
|
136
|
+
bench = Minitest::Benchmark.new :blah
|
|
137
|
+
|
|
138
|
+
a, b, rr = bench.send "fit_#{msg}", x, y
|
|
139
|
+
|
|
140
|
+
assert_operator rr, :>=, fit if fit
|
|
141
|
+
assert_in_delta exp_a, a
|
|
142
|
+
assert_in_delta exp_b, b
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
describe "my class Bench" do
|
|
147
|
+
klass = self
|
|
148
|
+
it "should provide bench methods" do
|
|
149
|
+
klass.must_respond_to :bench
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
require "minitest/autorun"
|
|
2
|
+
require_relative "metametameta"
|
|
3
|
+
require "forwardable"
|
|
4
|
+
|
|
5
|
+
class FakeTest < Minitest::Test
|
|
6
|
+
def woot
|
|
7
|
+
assert true
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class TestMinitestReporter < MetaMetaMetaTestCase
|
|
12
|
+
|
|
13
|
+
attr_accessor :r, :io
|
|
14
|
+
|
|
15
|
+
def new_composite_reporter
|
|
16
|
+
reporter = Minitest::CompositeReporter.new
|
|
17
|
+
reporter << Minitest::SummaryReporter.new(self.io)
|
|
18
|
+
reporter << Minitest::ProgressReporter.new(self.io)
|
|
19
|
+
|
|
20
|
+
# eg reporter.results -> reporters.first.results
|
|
21
|
+
reporter.extend Forwardable
|
|
22
|
+
reporter.delegate :first => :reporters
|
|
23
|
+
reporter.delegate %i[results count assertions options to_s] => :first
|
|
24
|
+
|
|
25
|
+
reporter
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def setup
|
|
29
|
+
super
|
|
30
|
+
self.io = StringIO.new(+"")
|
|
31
|
+
self.r = new_composite_reporter
|
|
32
|
+
@et = @ft = @pt = @st = @sse = nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def error_test
|
|
36
|
+
unless @et then
|
|
37
|
+
@et = FakeTest.new :woot
|
|
38
|
+
@et.failures << Minitest::UnexpectedError.new(begin
|
|
39
|
+
raise "no"
|
|
40
|
+
rescue => e
|
|
41
|
+
e
|
|
42
|
+
end)
|
|
43
|
+
@et = Minitest::Result.from @et
|
|
44
|
+
end
|
|
45
|
+
@et
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def system_stack_error_test
|
|
49
|
+
unless @sse then
|
|
50
|
+
|
|
51
|
+
ex = SystemStackError.new
|
|
52
|
+
|
|
53
|
+
pre = ("a".."c").to_a
|
|
54
|
+
mid = ("aa".."ad").to_a * 67
|
|
55
|
+
post = ("d".."f").to_a
|
|
56
|
+
ary = pre + mid + post
|
|
57
|
+
|
|
58
|
+
ex.set_backtrace ary
|
|
59
|
+
|
|
60
|
+
@sse = FakeTest.new :woot
|
|
61
|
+
@sse.failures << Minitest::UnexpectedError.new(ex)
|
|
62
|
+
@sse = Minitest::Result.from @sse
|
|
63
|
+
end
|
|
64
|
+
@sse
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def fail_test
|
|
68
|
+
unless @ft then
|
|
69
|
+
@ft = FakeTest.new :woot
|
|
70
|
+
@ft.failures << begin
|
|
71
|
+
raise Minitest::Assertion, "boo"
|
|
72
|
+
rescue Minitest::Assertion => e
|
|
73
|
+
e
|
|
74
|
+
end
|
|
75
|
+
@ft = Minitest::Result.from @ft
|
|
76
|
+
end
|
|
77
|
+
@ft
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def passing_test
|
|
81
|
+
@pt ||= Minitest::Result.from FakeTest.new(:woot)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def passing_test_with_metadata
|
|
85
|
+
test = FakeTest.new :woot
|
|
86
|
+
test.metadata[:meta] = :data
|
|
87
|
+
@pt ||= Minitest::Result.from test
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def skip_test
|
|
91
|
+
unless @st then
|
|
92
|
+
@st = FakeTest.new :woot
|
|
93
|
+
@st.failures << begin
|
|
94
|
+
raise Minitest::Skip
|
|
95
|
+
rescue Minitest::Assertion => e
|
|
96
|
+
e
|
|
97
|
+
end
|
|
98
|
+
@st = Minitest::Result.from @st
|
|
99
|
+
end
|
|
100
|
+
@st
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_to_s
|
|
104
|
+
r.record passing_test
|
|
105
|
+
r.record fail_test
|
|
106
|
+
assert_match "woot", r.to_s
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def test_options_skip_F
|
|
110
|
+
r.options[:skip] = "F"
|
|
111
|
+
|
|
112
|
+
r.record passing_test
|
|
113
|
+
r.record fail_test
|
|
114
|
+
|
|
115
|
+
refute_match "woot", r.to_s
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def test_options_skip_E
|
|
119
|
+
r.options[:skip] = "E"
|
|
120
|
+
|
|
121
|
+
r.record passing_test
|
|
122
|
+
r.record error_test
|
|
123
|
+
|
|
124
|
+
refute_match "RuntimeError: no", r.to_s
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_passed_eh_empty
|
|
128
|
+
assert_predicate r, :passed?
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_passed_eh_failure
|
|
132
|
+
r.results << fail_test
|
|
133
|
+
|
|
134
|
+
refute_predicate r, :passed?
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
SKIP_MSG = "\n\nYou have skipped tests. Run with --verbose for details."
|
|
138
|
+
|
|
139
|
+
def test_passed_eh_error
|
|
140
|
+
r.start
|
|
141
|
+
|
|
142
|
+
r.results << error_test
|
|
143
|
+
|
|
144
|
+
refute_predicate r, :passed?
|
|
145
|
+
|
|
146
|
+
r.report
|
|
147
|
+
|
|
148
|
+
refute_match SKIP_MSG, io.string
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def test_passed_eh_skipped
|
|
152
|
+
r.start
|
|
153
|
+
r.results << skip_test
|
|
154
|
+
assert r.passed?
|
|
155
|
+
|
|
156
|
+
restore_env do
|
|
157
|
+
r.report
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
assert_match SKIP_MSG, io.string
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def test_passed_eh_skipped_verbose
|
|
164
|
+
r.options[:verbose] = true
|
|
165
|
+
|
|
166
|
+
r.start
|
|
167
|
+
r.results << skip_test
|
|
168
|
+
assert r.passed?
|
|
169
|
+
r.report
|
|
170
|
+
|
|
171
|
+
refute_match SKIP_MSG, io.string
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def test_start
|
|
175
|
+
r.start
|
|
176
|
+
|
|
177
|
+
exp = "Run options: \n\n# Running:\n\n"
|
|
178
|
+
|
|
179
|
+
assert_equal exp, io.string
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def test_record_pass
|
|
183
|
+
r.record passing_test
|
|
184
|
+
|
|
185
|
+
assert_equal ".", io.string
|
|
186
|
+
assert_empty r.results
|
|
187
|
+
assert_equal 1, r.count
|
|
188
|
+
assert_equal 0, r.assertions
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def test_record_pass_with_metadata
|
|
192
|
+
reporter = self.r
|
|
193
|
+
|
|
194
|
+
def reporter.metadata
|
|
195
|
+
@metadata
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def reporter.record result
|
|
199
|
+
super
|
|
200
|
+
@metadata = result.metadata if result.metadata?
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
r.record passing_test_with_metadata
|
|
204
|
+
|
|
205
|
+
exp = { :meta => :data }
|
|
206
|
+
assert_equal exp, reporter.metadata
|
|
207
|
+
|
|
208
|
+
assert_equal ".", io.string
|
|
209
|
+
assert_empty r.results
|
|
210
|
+
assert_equal 1, r.count
|
|
211
|
+
assert_equal 0, r.assertions
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def test_record_fail
|
|
215
|
+
fail_test = self.fail_test
|
|
216
|
+
r.record fail_test
|
|
217
|
+
|
|
218
|
+
assert_equal "F", io.string
|
|
219
|
+
assert_equal [fail_test], r.results
|
|
220
|
+
assert_equal 1, r.count
|
|
221
|
+
assert_equal 0, r.assertions
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def test_record_error
|
|
225
|
+
error_test = self.error_test
|
|
226
|
+
r.record error_test
|
|
227
|
+
|
|
228
|
+
assert_equal "E", io.string
|
|
229
|
+
assert_equal [error_test], r.results
|
|
230
|
+
assert_equal 1, r.count
|
|
231
|
+
assert_equal 0, r.assertions
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def test_record_skip
|
|
235
|
+
skip_test = self.skip_test
|
|
236
|
+
r.record skip_test
|
|
237
|
+
|
|
238
|
+
assert_equal "S", io.string
|
|
239
|
+
assert_equal [skip_test], r.results
|
|
240
|
+
assert_equal 1, r.count
|
|
241
|
+
assert_equal 0, r.assertions
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def test_report_empty
|
|
245
|
+
r.start
|
|
246
|
+
r.report
|
|
247
|
+
|
|
248
|
+
exp = <<~EOM
|
|
249
|
+
Run options:
|
|
250
|
+
|
|
251
|
+
# Running:
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
Finished in 0.00
|
|
256
|
+
|
|
257
|
+
0 runs, 0 assertions, 0 failures, 0 errors, 0 skips
|
|
258
|
+
EOM
|
|
259
|
+
|
|
260
|
+
assert_equal exp, normalize_output(io.string)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def test_report_passing
|
|
264
|
+
r.start
|
|
265
|
+
r.record passing_test
|
|
266
|
+
r.report
|
|
267
|
+
|
|
268
|
+
exp = <<~EOM
|
|
269
|
+
Run options:
|
|
270
|
+
|
|
271
|
+
# Running:
|
|
272
|
+
|
|
273
|
+
.
|
|
274
|
+
|
|
275
|
+
Finished in 0.00
|
|
276
|
+
|
|
277
|
+
1 runs, 0 assertions, 0 failures, 0 errors, 0 skips
|
|
278
|
+
EOM
|
|
279
|
+
|
|
280
|
+
assert_equal exp, normalize_output(io.string)
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def test_report_failure
|
|
284
|
+
r.start
|
|
285
|
+
r.record fail_test
|
|
286
|
+
r.report
|
|
287
|
+
|
|
288
|
+
exp = <<~EOM
|
|
289
|
+
Run options:
|
|
290
|
+
|
|
291
|
+
# Running:
|
|
292
|
+
|
|
293
|
+
F
|
|
294
|
+
|
|
295
|
+
Finished in 0.00
|
|
296
|
+
|
|
297
|
+
1) Failure:
|
|
298
|
+
FakeTest#woot [FILE:LINE]:
|
|
299
|
+
boo
|
|
300
|
+
|
|
301
|
+
1 runs, 0 assertions, 1 failures, 0 errors, 0 skips
|
|
302
|
+
EOM
|
|
303
|
+
|
|
304
|
+
assert_equal exp, normalize_output(io.string)
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
def test_report_error
|
|
308
|
+
r.start
|
|
309
|
+
r.record error_test
|
|
310
|
+
r.report
|
|
311
|
+
|
|
312
|
+
exp = <<~EOM
|
|
313
|
+
Run options:
|
|
314
|
+
|
|
315
|
+
# Running:
|
|
316
|
+
|
|
317
|
+
E
|
|
318
|
+
|
|
319
|
+
Finished in 0.00
|
|
320
|
+
|
|
321
|
+
1) Error:
|
|
322
|
+
FakeTest#woot:
|
|
323
|
+
RuntimeError: no
|
|
324
|
+
FILE:LINE:in 'error_test'
|
|
325
|
+
FILE:LINE:in 'test_report_error'
|
|
326
|
+
|
|
327
|
+
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
|
|
328
|
+
EOM
|
|
329
|
+
|
|
330
|
+
assert_equal exp, normalize_output(io.string)
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
def test_report_error__sse
|
|
334
|
+
r.start
|
|
335
|
+
r.record system_stack_error_test
|
|
336
|
+
r.report
|
|
337
|
+
|
|
338
|
+
exp = <<~EOM
|
|
339
|
+
Run options:
|
|
340
|
+
|
|
341
|
+
# Running:
|
|
342
|
+
|
|
343
|
+
E
|
|
344
|
+
|
|
345
|
+
Finished in 0.00
|
|
346
|
+
|
|
347
|
+
1) Error:
|
|
348
|
+
FakeTest#woot:
|
|
349
|
+
SystemStackError: 274 -> 12
|
|
350
|
+
a
|
|
351
|
+
b
|
|
352
|
+
c
|
|
353
|
+
+->> 67 cycles of 4 lines:
|
|
354
|
+
| aa
|
|
355
|
+
| ab
|
|
356
|
+
| ac
|
|
357
|
+
| ad
|
|
358
|
+
+-<<
|
|
359
|
+
d
|
|
360
|
+
e
|
|
361
|
+
f
|
|
362
|
+
|
|
363
|
+
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
|
|
364
|
+
EOM
|
|
365
|
+
|
|
366
|
+
assert_equal exp, normalize_output(io.string)
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
def test_report_skipped
|
|
370
|
+
r.start
|
|
371
|
+
r.record skip_test
|
|
372
|
+
|
|
373
|
+
restore_env do
|
|
374
|
+
r.report
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
exp = <<~EOM
|
|
378
|
+
Run options:
|
|
379
|
+
|
|
380
|
+
# Running:
|
|
381
|
+
|
|
382
|
+
S
|
|
383
|
+
|
|
384
|
+
Finished in 0.00
|
|
385
|
+
|
|
386
|
+
1 runs, 0 assertions, 0 failures, 0 errors, 1 skips
|
|
387
|
+
|
|
388
|
+
You have skipped tests. Run with --verbose for details.
|
|
389
|
+
EOM
|
|
390
|
+
|
|
391
|
+
assert_equal exp, normalize_output(io.string)
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
def test_report_failure_uses_backtrace_filter
|
|
395
|
+
filter = Minitest::BacktraceFilter.new
|
|
396
|
+
def filter.filter _bt
|
|
397
|
+
["foo.rb:123:in 'foo'"]
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
with_backtrace_filter filter do
|
|
401
|
+
r.start
|
|
402
|
+
r.record fail_test
|
|
403
|
+
r.report
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
exp = "FakeTest#woot [foo.rb:123]"
|
|
407
|
+
|
|
408
|
+
assert_includes io.string, exp
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
def test_report_failure_uses_backtrace_filter_complex_sorbet
|
|
412
|
+
backtrace = <<~EOBT
|
|
413
|
+
/Users/user/.gem/ruby/3.2.2/gems/minitest-5.20.0/lib/minitest/assertions.rb:183:in 'assert'
|
|
414
|
+
example_test.rb:9:in 'assert_false'
|
|
415
|
+
/Users/user/.gem/ruby/3.2.2/gems/sorbet-runtime-0.5.11068/lib/types/private/methods/call_validation.rb:256:in 'bind_call'
|
|
416
|
+
/Users/user/.gem/ruby/3.2.2/gems/sorbet-runtime-0.5.11068/lib/types/private/methods/call_validation.rb:256:in 'validate_call'
|
|
417
|
+
/Users/user/.gem/ruby/3.2.2/gems/sorbet-runtime-0.5.11068/lib/types/private/methods/_methods.rb:275:in 'block in _on_method_added'
|
|
418
|
+
example_test.rb:25:in 'test_something'
|
|
419
|
+
/Users/user/.gem/ruby/3.2.2/gems/minitest-5.20.0/lib/minitest/test.rb:94:in 'block (3 levels) in run'
|
|
420
|
+
/Users/user/.gem/ruby/3.2.2/gems/minitest-5.20.0/lib/minitest/test.rb:191:in 'capture_exceptions'
|
|
421
|
+
/Users/user/.gem/ruby/3.2.2/gems/minitest-5.20.0/lib/minitest/test.rb:89:in 'block (2 levels) in run'
|
|
422
|
+
... so many lines ...
|
|
423
|
+
EOBT
|
|
424
|
+
|
|
425
|
+
filter = Minitest::BacktraceFilter.new %r%lib/minitest|gems/sorbet%
|
|
426
|
+
|
|
427
|
+
with_backtrace_filter filter do
|
|
428
|
+
begin
|
|
429
|
+
assert_equal 1, 2
|
|
430
|
+
rescue Minitest::Assertion => e
|
|
431
|
+
e.set_backtrace backtrace.lines.map(&:chomp)
|
|
432
|
+
|
|
433
|
+
assert_match "example_test.rb:25", e.location
|
|
434
|
+
end
|
|
435
|
+
end
|
|
436
|
+
end
|
|
437
|
+
end
|