test-unit 3.3.5 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BSDL +24 -0
- data/COPYING +41 -44
- data/README.md +4 -8
- data/Rakefile +0 -14
- data/doc/text/news.md +75 -0
- data/lib/test-unit.rb +2 -17
- data/lib/test/unit.rb +44 -37
- data/lib/test/unit/assertions.rb +13 -13
- data/lib/test/unit/autorunner.rb +57 -25
- data/lib/test/unit/color-scheme.rb +20 -2
- data/lib/test/unit/diff.rb +2 -3
- data/lib/test/unit/runner/console.rb +0 -17
- data/lib/test/unit/ui/console/testrunner.rb +32 -49
- data/lib/test/unit/version.rb +1 -1
- data/lib/test/unit/warning.rb +3 -0
- data/test/test-assertions.rb +24 -24
- data/test/test-color-scheme.rb +42 -1
- data/test/test-test-case.rb +6 -1
- metadata +40 -40
- data/GPL +0 -339
- data/LGPL +0 -502
data/lib/test/unit/autorunner.rb
CHANGED
@@ -246,54 +246,61 @@ module Test
|
|
246
246
|
|
247
247
|
o.on("-n", "--name=NAME", String,
|
248
248
|
"Runs tests matching NAME.",
|
249
|
-
"Use '/PATTERN/' for NAME to use regular expression."
|
250
|
-
|
249
|
+
"Use '/PATTERN/' for NAME to use regular expression.",
|
250
|
+
"Regular expression accepts options.",
|
251
|
+
"Example: '/taRget/i' matches 'target' and 'TARGET'") do |name|
|
252
|
+
name = prepare_name(name)
|
251
253
|
@filters << lambda do |test|
|
252
|
-
|
253
|
-
return true if name === test.local_name
|
254
|
-
false
|
254
|
+
match_test_name(test, name)
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
258
258
|
o.on("--ignore-name=NAME", String,
|
259
259
|
"Ignores tests matching NAME.",
|
260
|
-
"Use '/PATTERN/' for NAME to use regular expression."
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
@filters << proc {|t| n != t.method_name}
|
260
|
+
"Use '/PATTERN/' for NAME to use regular expression.",
|
261
|
+
"Regular expression accepts options.",
|
262
|
+
"Example: '/taRget/i' matches 'target' and 'TARGET'") do |name|
|
263
|
+
name = prepare_name(name)
|
264
|
+
@filters << lambda do |test|
|
265
|
+
not match_test_name(test, name)
|
267
266
|
end
|
268
267
|
end
|
269
268
|
|
270
269
|
o.on("-t", "--testcase=TESTCASE", String,
|
271
270
|
"Runs tests in TestCases matching TESTCASE.",
|
272
|
-
"Use '/PATTERN/' for TESTCASE to use regular expression."
|
273
|
-
|
271
|
+
"Use '/PATTERN/' for TESTCASE to use regular expression.",
|
272
|
+
"Regular expression accepts options.",
|
273
|
+
"Example: '/taRget/i' matches 'target' and 'TARGET'") do |name|
|
274
|
+
name = prepare_name(name)
|
274
275
|
@filters << lambda do |test|
|
275
|
-
match_test_case_name(test,
|
276
|
+
match_test_case_name(test, name)
|
276
277
|
end
|
277
278
|
end
|
278
279
|
|
279
280
|
o.on("--ignore-testcase=TESTCASE", String,
|
280
281
|
"Ignores tests in TestCases matching TESTCASE.",
|
281
|
-
"Use '/PATTERN/' for TESTCASE to use regular expression."
|
282
|
-
|
282
|
+
"Use '/PATTERN/' for TESTCASE to use regular expression.",
|
283
|
+
"Regular expression accepts options.",
|
284
|
+
"Example: '/taRget/i' matches 'target' and 'TARGET'") do |name|
|
285
|
+
name = prepare_name(name)
|
283
286
|
@filters << lambda do |test|
|
284
|
-
not match_test_case_name(test,
|
287
|
+
not match_test_case_name(test, name)
|
285
288
|
end
|
286
289
|
end
|
287
290
|
|
288
291
|
o.on("--location=LOCATION", String,
|
289
292
|
"Runs tests that defined in LOCATION.",
|
290
|
-
"LOCATION is one of PATH:LINE, PATH or LINE") do |location|
|
291
|
-
|
293
|
+
"LOCATION is one of PATH:LINE, PATH or LINE.") do |location|
|
294
|
+
case location
|
295
|
+
when /\A(\d+)\z/
|
292
296
|
path = nil
|
293
|
-
line =
|
297
|
+
line = $1.to_i
|
298
|
+
when /:(\d+)\z/
|
299
|
+
path = $PREMATCH
|
300
|
+
line = $1.to_i
|
294
301
|
else
|
295
|
-
path
|
296
|
-
line =
|
302
|
+
path = location
|
303
|
+
line = nil
|
297
304
|
end
|
298
305
|
add_location_filter(path, line)
|
299
306
|
end
|
@@ -349,7 +356,7 @@ module Test
|
|
349
356
|
end
|
350
357
|
|
351
358
|
o.on("--config=FILE",
|
352
|
-
"Use YAML
|
359
|
+
"Use YAML format FILE content as configuration file.") do |file|
|
353
360
|
load_config(file)
|
354
361
|
end
|
355
362
|
|
@@ -456,7 +463,7 @@ module Test
|
|
456
463
|
if key == :arguments
|
457
464
|
@default_arguments.concat(value.split)
|
458
465
|
else
|
459
|
-
runner_options[key
|
466
|
+
runner_options[key] = value
|
460
467
|
end
|
461
468
|
end
|
462
469
|
@runner_options = @runner_options.merge(runner_options)
|
@@ -496,6 +503,31 @@ module Test
|
|
496
503
|
end
|
497
504
|
end
|
498
505
|
|
506
|
+
def prepare_name(name)
|
507
|
+
case name
|
508
|
+
when /\A\/(.*)\/([imx]*)\z/
|
509
|
+
pattern = $1
|
510
|
+
options_raw = $2
|
511
|
+
options = 0
|
512
|
+
options |= Regexp::IGNORECASE if options_raw.include?("i")
|
513
|
+
options |= Regexp::MULTILINE if options_raw.include?("m")
|
514
|
+
options |= Regexp::EXTENDED if options_raw.include?("x")
|
515
|
+
Regexp.new(pattern, options)
|
516
|
+
else
|
517
|
+
name
|
518
|
+
end
|
519
|
+
end
|
520
|
+
|
521
|
+
def match_test_name(test, pattern)
|
522
|
+
return true if pattern === test.method_name
|
523
|
+
return true if pattern === test.local_name
|
524
|
+
if pattern.is_a?(String)
|
525
|
+
return true if pattern === "#{test.class}##{test.method_name}"
|
526
|
+
return true if pattern === "#{test.class}##{test.local_name}"
|
527
|
+
end
|
528
|
+
false
|
529
|
+
end
|
530
|
+
|
499
531
|
def match_test_case_name(test, pattern)
|
500
532
|
test.class.ancestors.each do |test_class|
|
501
533
|
break if test_class == TestCase
|
@@ -5,9 +5,25 @@ module Test
|
|
5
5
|
class ColorScheme
|
6
6
|
include Enumerable
|
7
7
|
|
8
|
+
TERM_256 = /
|
9
|
+
[+-]256color|
|
10
|
+
\A(?:
|
11
|
+
alacritty|
|
12
|
+
iTerm\s?\d*\.app|
|
13
|
+
kitty|
|
14
|
+
mintty|
|
15
|
+
ms-terminal|
|
16
|
+
nsterm-build\d+|
|
17
|
+
nsterm|
|
18
|
+
terminator|
|
19
|
+
terminology(?:-[0-9.]+)?|
|
20
|
+
termite|
|
21
|
+
vscode
|
22
|
+
)\z/x
|
23
|
+
|
8
24
|
class << self
|
9
25
|
def default
|
10
|
-
if available_colors
|
26
|
+
if available_colors >= 256
|
11
27
|
default_for_256_colors
|
12
28
|
else
|
13
29
|
default_for_8_colors
|
@@ -140,7 +156,9 @@ module Test
|
|
140
156
|
|
141
157
|
def guess_available_colors_from_term_env
|
142
158
|
case ENV["TERM"]
|
143
|
-
when
|
159
|
+
when /[+-]direct/
|
160
|
+
2**24
|
161
|
+
when TERM_256
|
144
162
|
256
|
145
163
|
else
|
146
164
|
nil
|
data/lib/test/unit/diff.rb
CHANGED
@@ -3,9 +3,8 @@
|
|
3
3
|
# Copyright (c) 2001-2008 Python Software Foundation; All Rights Reserved
|
4
4
|
# Copyright (c) 2008-2011 Kouhei Sutou; All Rights Reserved
|
5
5
|
#
|
6
|
-
# It is free software, and is distributed under the Ruby license
|
7
|
-
#
|
8
|
-
# file and the LGPL file.
|
6
|
+
# It is free software, and is distributed under (the new Ruby license
|
7
|
+
# or BSDL) and the PSF license.
|
9
8
|
|
10
9
|
module Test
|
11
10
|
module Unit
|
@@ -1,21 +1,4 @@
|
|
1
1
|
# Copyright (C) 2008-2017 Kouhei Sutou <kou@clear-code.com>
|
2
|
-
#
|
3
|
-
# License: Ruby OR LGPL-2.1+
|
4
|
-
#
|
5
|
-
# This library is free software; you can redistribute it and/or
|
6
|
-
# modify it under the terms of the GNU Lesser General Public
|
7
|
-
# License as published by the Free Software Foundation; either
|
8
|
-
# version 2.1 of the License, or (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This library is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
-
# Lesser General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Lesser General Public
|
16
|
-
# License along with this library; if not, write to the Free Software
|
17
|
-
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
18
|
-
# 02110-1301 USA
|
19
2
|
|
20
3
|
module Test
|
21
4
|
module Unit
|
@@ -47,8 +47,6 @@ module Test
|
|
47
47
|
@progress_row_max ||= guess_progress_row_max
|
48
48
|
@show_detail_immediately = @options[:show_detail_immediately]
|
49
49
|
@show_detail_immediately = true if @show_detail_immediately.nil?
|
50
|
-
@reverse_output = @options[:reverse_output]
|
51
|
-
@reverse_output = @output.tty? if @reverse_output.nil?
|
52
50
|
@already_outputted = false
|
53
51
|
@indent = 0
|
54
52
|
@top_level = true
|
@@ -184,29 +182,15 @@ module Test
|
|
184
182
|
if fault.is_a?(Failure) and
|
185
183
|
fault.inspected_expected and
|
186
184
|
fault.inspected_actual
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
output(fault.test_name, fault_color(fault))
|
192
|
-
else
|
193
|
-
output_single("#{fault.label}: ")
|
194
|
-
output(fault.test_name, fault_color(fault))
|
195
|
-
output_fault_backtrace(fault)
|
196
|
-
output_failure_message(fault)
|
197
|
-
end
|
185
|
+
output_single("#{fault.label}: ")
|
186
|
+
output(fault.test_name, fault_color(fault))
|
187
|
+
output_fault_backtrace(fault)
|
188
|
+
output_failure_message(fault)
|
198
189
|
else
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
output_fault_message(fault)
|
204
|
-
else
|
205
|
-
output_single("#{fault.label}: ")
|
206
|
-
output_single(fault.test_name, fault_color(fault))
|
207
|
-
output_fault_message(fault)
|
208
|
-
output_fault_backtrace(fault)
|
209
|
-
end
|
190
|
+
output_single("#{fault.label}: ")
|
191
|
+
output_single(fault.test_name, fault_color(fault))
|
192
|
+
output_fault_message(fault)
|
193
|
+
output_fault_backtrace(fault)
|
210
194
|
end
|
211
195
|
end
|
212
196
|
|
@@ -244,19 +228,10 @@ module Test
|
|
244
228
|
end
|
245
229
|
end
|
246
230
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
end
|
252
|
-
output(entry)
|
253
|
-
end
|
254
|
-
else
|
255
|
-
backtrace.each_with_index do |entry, i|
|
256
|
-
output(entry)
|
257
|
-
if i == code_snippet_backtrace_index
|
258
|
-
output_code_snippet(code_snippet_lines, fault_color(fault))
|
259
|
-
end
|
231
|
+
backtrace.each_with_index do |entry, i|
|
232
|
+
output(entry)
|
233
|
+
if i == code_snippet_backtrace_index
|
234
|
+
output_code_snippet(code_snippet_lines, fault_color(fault))
|
260
235
|
end
|
261
236
|
end
|
262
237
|
end
|
@@ -336,17 +311,10 @@ module Test
|
|
336
311
|
end
|
337
312
|
|
338
313
|
def output_fault_in_short(fault)
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
output(" [#{fault.test_name}]")
|
344
|
-
else
|
345
|
-
output_single("#{fault.label}: ")
|
346
|
-
output_single(fault.message, fault_color(fault))
|
347
|
-
output(" [#{fault.test_name}]")
|
348
|
-
output(fault.location.first)
|
349
|
-
end
|
314
|
+
output_single("#{fault.label}: ")
|
315
|
+
output_single(fault.message, fault_color(fault))
|
316
|
+
output(" [#{fault.test_name}]")
|
317
|
+
output(fault.location.first)
|
350
318
|
end
|
351
319
|
|
352
320
|
def format_fault(fault)
|
@@ -540,13 +508,28 @@ module Test
|
|
540
508
|
color("#{@result.status}-marker")
|
541
509
|
end
|
542
510
|
|
511
|
+
TERM_COLOR_SUPPORT = /
|
512
|
+
color| # explicitly claims color support in the name
|
513
|
+
direct| # explicitly claims "direct color" (24 bit) support
|
514
|
+
#{ColorScheme::TERM_256}|
|
515
|
+
\Acygwin|
|
516
|
+
\Alinux|
|
517
|
+
\Ansterm-bce|
|
518
|
+
\Ansterm-c-|
|
519
|
+
\Aputty|
|
520
|
+
\Arxvt|
|
521
|
+
\Ascreen|
|
522
|
+
\Atmux|
|
523
|
+
\Axterm
|
524
|
+
/x
|
525
|
+
|
543
526
|
def guess_color_availability
|
544
527
|
return false unless @output.tty?
|
545
528
|
return true if windows? and ruby_2_0_or_later?
|
546
529
|
case ENV["TERM"]
|
547
530
|
when /(?:term|screen)(?:-(?:256)?color)?\z/
|
548
531
|
true
|
549
|
-
when
|
532
|
+
when TERM_COLOR_SUPPORT
|
550
533
|
true
|
551
534
|
else
|
552
535
|
return true if ENV["EMACS"] == "t"
|
data/lib/test/unit/version.rb
CHANGED
data/test/test-assertions.rb
CHANGED
@@ -98,7 +98,7 @@ module Test
|
|
98
98
|
|
99
99
|
def check_fail_exception(expected_message, options={}, &proc)
|
100
100
|
normalizer = lambda do |actual_message|
|
101
|
-
actual_message.gsub(
|
101
|
+
actual_message.gsub(/^(?:<internal:core> )?[^:\n]+:\d+:.+\n/, "")
|
102
102
|
end
|
103
103
|
check_assertions(true,
|
104
104
|
options.merge(:expected_message => expected_message,
|
@@ -510,7 +510,8 @@ EOM
|
|
510
510
|
message = <<-EOM.chomp
|
511
511
|
failed assert_raise.
|
512
512
|
<ArgumentError> exception expected but was
|
513
|
-
<RuntimeError(<Error>)
|
513
|
+
<RuntimeError(<Error>)
|
514
|
+
>.
|
514
515
|
EOM
|
515
516
|
check_fail_exception(message) do
|
516
517
|
assert_raise(ArgumentError, "failed assert_raise") do
|
@@ -571,7 +572,8 @@ EOM
|
|
571
572
|
message = <<-EOM.chomp
|
572
573
|
failed assert_raise.
|
573
574
|
<[ArgumentError, TypeError]> exception expected but was
|
574
|
-
<RuntimeError(<Error>)
|
575
|
+
<RuntimeError(<Error>)
|
576
|
+
>.
|
575
577
|
EOM
|
576
578
|
check_fail_exception(message) do
|
577
579
|
assert_raise(ArgumentError, TypeError, "failed assert_raise") do
|
@@ -596,13 +598,8 @@ EOM
|
|
596
598
|
|
597
599
|
message = <<-EOM.chomp
|
598
600
|
<RuntimeError(<XXX>)> exception expected but was
|
599
|
-
<RuntimeError(<Error>)
|
600
|
-
|
601
|
-
diff:
|
602
|
-
- RuntimeError(<XXX>)
|
603
|
-
? ^^^
|
604
|
-
+ RuntimeError(<Error>)
|
605
|
-
? ^^^^^
|
601
|
+
<RuntimeError(<Error>)
|
602
|
+
>.
|
606
603
|
EOM
|
607
604
|
check_fail_exception(message) do
|
608
605
|
return_value = assert_raise(RuntimeError.new("XXX")) do
|
@@ -613,7 +610,8 @@ EOM
|
|
613
610
|
different_error_class = Class.new(StandardError)
|
614
611
|
message = <<-EOM.chomp
|
615
612
|
<#{different_error_class.inspect}(<Error>)> exception expected but was
|
616
|
-
<RuntimeError(<Error>)
|
613
|
+
<RuntimeError(<Error>)
|
614
|
+
>.
|
617
615
|
EOM
|
618
616
|
check_fail_exception(message) do
|
619
617
|
assert_raise(different_error_class.new("Error")) do
|
@@ -627,7 +625,8 @@ EOM
|
|
627
625
|
end
|
628
626
|
message = <<-EOM.chomp
|
629
627
|
<DifferentError: "Error"> exception expected but was
|
630
|
-
<RuntimeError(<Error>)
|
628
|
+
<RuntimeError(<Error>)
|
629
|
+
>.
|
631
630
|
EOM
|
632
631
|
check_fail_exception(message) do
|
633
632
|
assert_raise(different_error) do
|
@@ -645,7 +644,7 @@ EOM
|
|
645
644
|
end
|
646
645
|
|
647
646
|
def test_assert_raise_jruby
|
648
|
-
|
647
|
+
jruby_only_test
|
649
648
|
|
650
649
|
exception = Java::JavaLang::StringIndexOutOfBoundsException
|
651
650
|
|
@@ -869,6 +868,7 @@ EOM
|
|
869
868
|
expected_message = <<-EOM.chomp
|
870
869
|
Exception raised:
|
871
870
|
RuntimeError(<Error>)
|
871
|
+
|
872
872
|
EOM
|
873
873
|
check_fail_exception(expected_message) {
|
874
874
|
assert_nothing_raised {
|
@@ -879,6 +879,7 @@ EOM
|
|
879
879
|
failed assert_nothing_raised.
|
880
880
|
Exception raised:
|
881
881
|
RuntimeError(<Error>)
|
882
|
+
|
882
883
|
EOM
|
883
884
|
check_fail_exception(expected_message) {
|
884
885
|
assert_nothing_raised("failed assert_nothing_raised") {
|
@@ -888,6 +889,7 @@ EOM
|
|
888
889
|
expected_message = <<-EOM.chomp
|
889
890
|
Exception raised:
|
890
891
|
RuntimeError(<Error>)
|
892
|
+
|
891
893
|
EOM
|
892
894
|
check_fail_exception(expected_message) {
|
893
895
|
assert_nothing_raised(StandardError, RuntimeError) {
|
@@ -954,16 +956,6 @@ EOM
|
|
954
956
|
end
|
955
957
|
end
|
956
958
|
|
957
|
-
def test_assert_not_match_fail_not_regexp
|
958
|
-
check_fail("<REGEXP> in assert_not_match(<REGEXP>, ...) " +
|
959
|
-
"should be a Regexp.\n" +
|
960
|
-
"<\"asdf\"> was expected to be instance_of?\n" +
|
961
|
-
"<Regexp> but was\n" +
|
962
|
-
"<String>.") do
|
963
|
-
assert_not_match("asdf", "asdf")
|
964
|
-
end
|
965
|
-
end
|
966
|
-
|
967
959
|
def test_assert_not_match_fail_match
|
968
960
|
check_fail("</string/> was expected to not match\n" +
|
969
961
|
"<\"string\">.") do
|
@@ -971,6 +963,13 @@ EOM
|
|
971
963
|
end
|
972
964
|
end
|
973
965
|
|
966
|
+
def test_assert_not_match_fail_match_string
|
967
|
+
check_fail("</asdf/> was expected to not match\n" +
|
968
|
+
"<\"asdf\">.") do
|
969
|
+
assert_not_match("asdf", "asdf")
|
970
|
+
end
|
971
|
+
end
|
972
|
+
|
974
973
|
def test_assert_not_match_fail_match_with_message
|
975
974
|
check_fail("message.\n" +
|
976
975
|
"</string/> was expected to not match\n" +
|
@@ -1312,7 +1311,8 @@ EOM
|
|
1312
1311
|
|
1313
1312
|
expected_message = <<-EOM.chomp
|
1314
1313
|
<SystemCallError> family exception expected but was
|
1315
|
-
<RuntimeError(<XXX>)
|
1314
|
+
<RuntimeError(<XXX>)
|
1315
|
+
>.
|
1316
1316
|
EOM
|
1317
1317
|
check_fail_exception(expected_message) do
|
1318
1318
|
assert_raise_kind_of(SystemCallError) do
|