colorcode_convert_rgb 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +23 -0
- data/LICENSE.txt +21 -0
- data/README.md +40 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/colorcode_convert_rgb.gemspec +30 -0
- data/exe/colorcode_convert_rgb +4 -0
- data/lib/colorcode_convert_rgb.rb +7 -0
- data/lib/colorcode_convert_rgb/cli.rb +13 -0
- data/lib/colorcode_convert_rgb/version.rb +3 -0
- data/vendor/bundle/ruby/2.5.0/bin/colorcode_convert_rgb +27 -0
- data/vendor/bundle/ruby/2.5.0/bin/rake +27 -0
- data/vendor/bundle/ruby/2.5.0/bin/thor +27 -0
- data/vendor/bundle/ruby/2.5.0/cache/minitest-5.14.2.gem +0 -0
- data/vendor/bundle/ruby/2.5.0/cache/rake-12.3.3.gem +0 -0
- data/vendor/bundle/ruby/2.5.0/cache/thor-1.0.1.gem +0 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/.autotest +34 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/History.rdoc +1397 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/Manifest.txt +27 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/README.rdoc +764 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/Rakefile +74 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/design_rationale.rb +52 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/hoe/minitest.rb +32 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest.rb +1056 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/assertions.rb +807 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/autorun.rb +13 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/benchmark.rb +455 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/expectations.rb +303 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/hell.rb +11 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/mock.rb +240 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/parallel.rb +70 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/pride.rb +4 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/pride_plugin.rb +142 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/spec.rb +342 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/test.rb +220 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/unit.rb +45 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/metametameta.rb +136 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_assertions.rb +1575 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_benchmark.rb +137 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_mock.rb +872 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_reporter.rb +299 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_spec.rb +1061 -0
- data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_test.rb +1084 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/CONTRIBUTING.rdoc +43 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/Gemfile +3 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/History.rdoc +2344 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/README.rdoc +156 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/Rakefile +41 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/azure-pipelines.yml +11 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/bundle +105 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/console +7 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/rake +29 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/rdoc +29 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/rubocop +29 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/setup +6 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/command_line_usage.rdoc +158 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/rake.1 +156 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/rakefile.rdoc +622 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/exe/rake +27 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake.rb +71 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/application.rb +824 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/backtrace.rb +24 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/clean.rb +78 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/cloneable.rb +17 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/cpu_counter.rb +107 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/default_loader.rb +15 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/dsl_definition.rb +195 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/early_time.rb +22 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/ext/core.rb +26 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/ext/string.rb +176 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_creation_task.rb +25 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_list.rb +435 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_task.rb +54 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_utils.rb +137 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_utils_ext.rb +145 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/invocation_chain.rb +57 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/late_time.rb +18 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/linked_list.rb +112 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/multi_task.rb +14 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/packagetask.rb +207 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/phony.rb +16 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/private_reader.rb +21 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/promise.rb +100 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/pseudo_status.rb +30 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/rake_module.rb +67 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/scope.rb +43 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/task.rb +413 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/task_argument_error.rb +8 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/task_arguments.rb +109 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/task_manager.rb +324 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/tasklib.rb +12 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/testtask.rb +224 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/thread_history_display.rb +49 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/thread_pool.rb +163 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/trace_output.rb +23 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/version.rb +10 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/win32.rb +51 -0
- data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/rake.gemspec +42 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/.document +5 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/CHANGELOG.md +220 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/CONTRIBUTING.md +15 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/LICENSE.md +20 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/README.md +51 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/bin/thor +6 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor.rb +517 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions.rb +336 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_file.rb +104 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_link.rb +61 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/directory.rb +108 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/empty_directory.rb +143 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/file_manipulation.rb +373 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/inject_into_file.rb +120 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/base.rb +699 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/command.rb +142 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/core_ext/hash_with_indifferent_access.rb +97 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/error.rb +110 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/group.rb +281 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/invocation.rb +178 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/line_editor.rb +17 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/line_editor/basic.rb +37 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/line_editor/readline.rb +88 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/nested_context.rb +29 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser.rb +4 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser/argument.rb +70 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser/arguments.rb +175 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser/option.rb +159 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser/options.rb +236 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/rake_compat.rb +72 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/runner.rb +325 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/shell.rb +81 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/shell/basic.rb +491 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/shell/color.rb +153 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/shell/html.rb +126 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/util.rb +284 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/version.rb +3 -0
- data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/thor.gemspec +28 -0
- data/vendor/bundle/ruby/2.5.0/specifications/minitest-5.14.2.gemspec +38 -0
- data/vendor/bundle/ruby/2.5.0/specifications/rake-12.3.3.gemspec +43 -0
- data/vendor/bundle/ruby/2.5.0/specifications/thor-1.0.1.gemspec +34 -0
- metadata +214 -0
@@ -0,0 +1,1084 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "minitest/metametameta"
|
5
|
+
|
6
|
+
if defined? Encoding then
|
7
|
+
e = Encoding.default_external
|
8
|
+
if e != Encoding::UTF_8 then
|
9
|
+
warn ""
|
10
|
+
warn ""
|
11
|
+
warn "NOTE: External encoding #{e} is not UTF-8. Tests WILL fail."
|
12
|
+
warn " Run tests with `RUBYOPT=-Eutf-8 rake` to avoid errors."
|
13
|
+
warn ""
|
14
|
+
warn ""
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Minitest::Runnable
|
19
|
+
def whatever # faked for testing
|
20
|
+
assert true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class TestMinitestUnit < MetaMetaMetaTestCase
|
25
|
+
parallelize_me!
|
26
|
+
|
27
|
+
pwd = Pathname.new File.expand_path Dir.pwd
|
28
|
+
basedir = Pathname.new(File.expand_path "lib/minitest") + "mini"
|
29
|
+
basedir = basedir.relative_path_from(pwd).to_s
|
30
|
+
MINITEST_BASE_DIR = basedir[/\A\./] ? basedir : "./#{basedir}"
|
31
|
+
BT_MIDDLE = ["#{MINITEST_BASE_DIR}/test.rb:161:in `each'",
|
32
|
+
"#{MINITEST_BASE_DIR}/test.rb:158:in `each'",
|
33
|
+
"#{MINITEST_BASE_DIR}/test.rb:139:in `run'",
|
34
|
+
"#{MINITEST_BASE_DIR}/test.rb:106:in `run'"]
|
35
|
+
|
36
|
+
def test_filter_backtrace
|
37
|
+
# this is a semi-lame mix of relative paths.
|
38
|
+
# I cheated by making the autotest parts not have ./
|
39
|
+
bt = (["lib/autotest.rb:571:in `add_exception'",
|
40
|
+
"test/test_autotest.rb:62:in `test_add_exception'",
|
41
|
+
"#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] +
|
42
|
+
BT_MIDDLE +
|
43
|
+
["#{MINITEST_BASE_DIR}/test.rb:29",
|
44
|
+
"test/test_autotest.rb:422"])
|
45
|
+
bt = util_expand_bt bt
|
46
|
+
|
47
|
+
ex = ["lib/autotest.rb:571:in `add_exception'",
|
48
|
+
"test/test_autotest.rb:62:in `test_add_exception'"]
|
49
|
+
ex = util_expand_bt ex
|
50
|
+
|
51
|
+
fu = Minitest.filter_backtrace(bt)
|
52
|
+
|
53
|
+
assert_equal ex, fu
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_filter_backtrace_all_unit
|
57
|
+
bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] +
|
58
|
+
BT_MIDDLE +
|
59
|
+
["#{MINITEST_BASE_DIR}/test.rb:29"])
|
60
|
+
ex = bt.clone
|
61
|
+
fu = Minitest.filter_backtrace(bt)
|
62
|
+
assert_equal ex, fu
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_filter_backtrace_unit_starts
|
66
|
+
bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] +
|
67
|
+
BT_MIDDLE +
|
68
|
+
["#{MINITEST_BASE_DIR}/mini/test.rb:29",
|
69
|
+
"-e:1"])
|
70
|
+
|
71
|
+
bt = util_expand_bt bt
|
72
|
+
|
73
|
+
ex = ["-e:1"]
|
74
|
+
fu = Minitest.filter_backtrace bt
|
75
|
+
assert_equal ex, fu
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_filter_backtrace__empty
|
79
|
+
with_empty_backtrace_filter do
|
80
|
+
bt = %w[first second third]
|
81
|
+
fu = Minitest.filter_backtrace bt.dup
|
82
|
+
assert_equal bt, fu
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_infectious_binary_encoding
|
87
|
+
@tu = Class.new FakeNamedTest do
|
88
|
+
def test_this_is_not_ascii_assertion
|
89
|
+
assert_equal "ЁЁЁ", "ёёё"
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_this_is_non_ascii_failure_message
|
93
|
+
fail 'ЁЁЁ'.force_encoding('ASCII-8BIT')
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
expected = clean <<-EOM
|
98
|
+
EF
|
99
|
+
|
100
|
+
Finished in 0.00
|
101
|
+
|
102
|
+
1) Error:
|
103
|
+
FakeNamedTestXX#test_this_is_non_ascii_failure_message:
|
104
|
+
RuntimeError: ЁЁЁ
|
105
|
+
FILE:LINE:in `test_this_is_non_ascii_failure_message'
|
106
|
+
|
107
|
+
2) Failure:
|
108
|
+
FakeNamedTestXX#test_this_is_not_ascii_assertion [FILE:LINE]:
|
109
|
+
Expected: \"ЁЁЁ\"
|
110
|
+
Actual: \"ёёё\"
|
111
|
+
|
112
|
+
2 runs, 1 assertions, 1 failures, 1 errors, 0 skips
|
113
|
+
EOM
|
114
|
+
|
115
|
+
assert_report expected
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_passed_eh_teardown_good
|
119
|
+
test_class = Class.new FakeNamedTest do
|
120
|
+
def teardown; assert true; end
|
121
|
+
def test_omg; assert true; end
|
122
|
+
end
|
123
|
+
|
124
|
+
test = test_class.new :test_omg
|
125
|
+
test.run
|
126
|
+
|
127
|
+
refute_predicate test, :error?
|
128
|
+
assert_predicate test, :passed?
|
129
|
+
refute_predicate test, :skipped?
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_passed_eh_teardown_skipped
|
133
|
+
test_class = Class.new FakeNamedTest do
|
134
|
+
def teardown; assert true; end
|
135
|
+
def test_omg; skip "bork"; end
|
136
|
+
end
|
137
|
+
|
138
|
+
test = test_class.new :test_omg
|
139
|
+
test.run
|
140
|
+
|
141
|
+
refute_predicate test, :error?
|
142
|
+
refute_predicate test, :passed?
|
143
|
+
assert_predicate test, :skipped?
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_passed_eh_teardown_flunked
|
147
|
+
test_class = Class.new FakeNamedTest do
|
148
|
+
def teardown; flunk; end
|
149
|
+
def test_omg; assert true; end
|
150
|
+
end
|
151
|
+
|
152
|
+
test = test_class.new :test_omg
|
153
|
+
test.run
|
154
|
+
|
155
|
+
refute_predicate test, :error?
|
156
|
+
refute_predicate test, :passed?
|
157
|
+
refute_predicate test, :skipped?
|
158
|
+
end
|
159
|
+
|
160
|
+
def util_expand_bt bt
|
161
|
+
if RUBY_VERSION >= "1.9.0" then
|
162
|
+
bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
|
163
|
+
else
|
164
|
+
bt
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
class TestMinitestUnitInherited < MetaMetaMetaTestCase
|
170
|
+
def with_overridden_include
|
171
|
+
Class.class_eval do
|
172
|
+
def inherited_with_hacks _klass
|
173
|
+
throw :inherited_hook
|
174
|
+
end
|
175
|
+
|
176
|
+
alias inherited_without_hacks inherited
|
177
|
+
alias inherited inherited_with_hacks
|
178
|
+
alias IGNORE_ME! inherited # 1.8 bug. god I love venture bros
|
179
|
+
end
|
180
|
+
|
181
|
+
yield
|
182
|
+
ensure
|
183
|
+
Class.class_eval do
|
184
|
+
alias inherited inherited_without_hacks
|
185
|
+
|
186
|
+
undef_method :inherited_with_hacks
|
187
|
+
undef_method :inherited_without_hacks
|
188
|
+
end
|
189
|
+
|
190
|
+
refute_respond_to Class, :inherited_with_hacks
|
191
|
+
refute_respond_to Class, :inherited_without_hacks
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_inherited_hook_plays_nice_with_others
|
195
|
+
with_overridden_include do
|
196
|
+
assert_throws :inherited_hook do
|
197
|
+
Class.new FakeNamedTest
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
class TestMinitestRunner < MetaMetaMetaTestCase
|
204
|
+
# do not parallelize this suite... it just can't handle it.
|
205
|
+
|
206
|
+
def test_class_runnables
|
207
|
+
@assertion_count = 0
|
208
|
+
|
209
|
+
tc = Class.new(Minitest::Test)
|
210
|
+
|
211
|
+
assert_equal 1, Minitest::Test.runnables.size
|
212
|
+
assert_equal [tc], Minitest::Test.runnables
|
213
|
+
end
|
214
|
+
|
215
|
+
def test_run_test
|
216
|
+
@tu =
|
217
|
+
Class.new FakeNamedTest do
|
218
|
+
attr_reader :foo
|
219
|
+
|
220
|
+
def run
|
221
|
+
@foo = "hi mom!"
|
222
|
+
r = super
|
223
|
+
@foo = "okay"
|
224
|
+
|
225
|
+
r
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_something
|
229
|
+
assert_equal "hi mom!", foo
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
expected = clean <<-EOM
|
234
|
+
.
|
235
|
+
|
236
|
+
Finished in 0.00
|
237
|
+
|
238
|
+
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
|
239
|
+
EOM
|
240
|
+
|
241
|
+
assert_report expected
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_run_error
|
245
|
+
@tu =
|
246
|
+
Class.new FakeNamedTest do
|
247
|
+
def test_something
|
248
|
+
assert true
|
249
|
+
end
|
250
|
+
|
251
|
+
def test_error
|
252
|
+
raise "unhandled exception"
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
expected = clean <<-EOM
|
257
|
+
E.
|
258
|
+
|
259
|
+
Finished in 0.00
|
260
|
+
|
261
|
+
1) Error:
|
262
|
+
FakeNamedTestXX#test_error:
|
263
|
+
RuntimeError: unhandled exception
|
264
|
+
FILE:LINE:in \`test_error\'
|
265
|
+
|
266
|
+
2 runs, 1 assertions, 0 failures, 1 errors, 0 skips
|
267
|
+
EOM
|
268
|
+
|
269
|
+
assert_report expected
|
270
|
+
end
|
271
|
+
|
272
|
+
def test_run_error_teardown
|
273
|
+
@tu =
|
274
|
+
Class.new FakeNamedTest do
|
275
|
+
def test_something
|
276
|
+
assert true
|
277
|
+
end
|
278
|
+
|
279
|
+
def teardown
|
280
|
+
raise "unhandled exception"
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
expected = clean <<-EOM
|
285
|
+
E
|
286
|
+
|
287
|
+
Finished in 0.00
|
288
|
+
|
289
|
+
1) Error:
|
290
|
+
FakeNamedTestXX#test_something:
|
291
|
+
RuntimeError: unhandled exception
|
292
|
+
FILE:LINE:in \`teardown\'
|
293
|
+
|
294
|
+
1 runs, 1 assertions, 0 failures, 1 errors, 0 skips
|
295
|
+
EOM
|
296
|
+
|
297
|
+
assert_report expected
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_run_failing
|
301
|
+
setup_basic_tu
|
302
|
+
|
303
|
+
expected = clean <<-EOM
|
304
|
+
F.
|
305
|
+
|
306
|
+
Finished in 0.00
|
307
|
+
|
308
|
+
1) Failure:
|
309
|
+
FakeNamedTestXX#test_failure [FILE:LINE]:
|
310
|
+
Expected false to be truthy.
|
311
|
+
|
312
|
+
2 runs, 2 assertions, 1 failures, 0 errors, 0 skips
|
313
|
+
EOM
|
314
|
+
|
315
|
+
assert_report expected
|
316
|
+
end
|
317
|
+
|
318
|
+
def setup_basic_tu
|
319
|
+
@tu =
|
320
|
+
Class.new FakeNamedTest do
|
321
|
+
def test_something
|
322
|
+
assert true
|
323
|
+
end
|
324
|
+
|
325
|
+
def test_failure
|
326
|
+
assert false
|
327
|
+
end
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
def test_run_failing_filtered
|
332
|
+
setup_basic_tu
|
333
|
+
|
334
|
+
expected = clean <<-EOM
|
335
|
+
.
|
336
|
+
|
337
|
+
Finished in 0.00
|
338
|
+
|
339
|
+
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
|
340
|
+
EOM
|
341
|
+
|
342
|
+
assert_report expected, %w[--name /some|thing/ --seed 42]
|
343
|
+
end
|
344
|
+
|
345
|
+
def assert_filtering filter, name, expected, a = false
|
346
|
+
args = %W[--#{filter} #{name} --seed 42]
|
347
|
+
|
348
|
+
alpha = Class.new FakeNamedTest do
|
349
|
+
define_method :test_something do
|
350
|
+
assert a
|
351
|
+
end
|
352
|
+
end
|
353
|
+
Object.const_set(:Alpha, alpha)
|
354
|
+
|
355
|
+
beta = Class.new FakeNamedTest do
|
356
|
+
define_method :test_something do
|
357
|
+
assert true
|
358
|
+
end
|
359
|
+
end
|
360
|
+
Object.const_set(:Beta, beta)
|
361
|
+
|
362
|
+
@tus = [alpha, beta]
|
363
|
+
|
364
|
+
assert_report expected, args
|
365
|
+
ensure
|
366
|
+
Object.send :remove_const, :Alpha
|
367
|
+
Object.send :remove_const, :Beta
|
368
|
+
end
|
369
|
+
|
370
|
+
def test_run_filtered_including_suite_name
|
371
|
+
expected = clean <<-EOM
|
372
|
+
.
|
373
|
+
|
374
|
+
Finished in 0.00
|
375
|
+
|
376
|
+
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
|
377
|
+
EOM
|
378
|
+
|
379
|
+
assert_filtering "name", "/Beta#test_something/", expected
|
380
|
+
end
|
381
|
+
|
382
|
+
def test_run_filtered_including_suite_name_string
|
383
|
+
expected = clean <<-EOM
|
384
|
+
.
|
385
|
+
|
386
|
+
Finished in 0.00
|
387
|
+
|
388
|
+
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
|
389
|
+
EOM
|
390
|
+
|
391
|
+
assert_filtering "name", "Beta#test_something", expected
|
392
|
+
end
|
393
|
+
|
394
|
+
def test_run_filtered_string_method_only
|
395
|
+
expected = clean <<-EOM
|
396
|
+
..
|
397
|
+
|
398
|
+
Finished in 0.00
|
399
|
+
|
400
|
+
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
|
401
|
+
EOM
|
402
|
+
|
403
|
+
assert_filtering "name", "test_something", expected, :pass
|
404
|
+
end
|
405
|
+
|
406
|
+
def test_run_failing_excluded
|
407
|
+
setup_basic_tu
|
408
|
+
|
409
|
+
expected = clean <<-EOM
|
410
|
+
.
|
411
|
+
|
412
|
+
Finished in 0.00
|
413
|
+
|
414
|
+
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
|
415
|
+
EOM
|
416
|
+
|
417
|
+
assert_report expected, %w[--exclude /failure/ --seed 42]
|
418
|
+
end
|
419
|
+
|
420
|
+
def test_run_filtered_excluding_suite_name
|
421
|
+
expected = clean <<-EOM
|
422
|
+
.
|
423
|
+
|
424
|
+
Finished in 0.00
|
425
|
+
|
426
|
+
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
|
427
|
+
EOM
|
428
|
+
|
429
|
+
assert_filtering "exclude", "/Alpha#test_something/", expected
|
430
|
+
end
|
431
|
+
|
432
|
+
def test_run_filtered_excluding_suite_name_string
|
433
|
+
expected = clean <<-EOM
|
434
|
+
.
|
435
|
+
|
436
|
+
Finished in 0.00
|
437
|
+
|
438
|
+
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
|
439
|
+
EOM
|
440
|
+
|
441
|
+
assert_filtering "exclude", "Alpha#test_something", expected
|
442
|
+
end
|
443
|
+
|
444
|
+
def test_run_filtered_excluding_string_method_only
|
445
|
+
expected = clean <<-EOM
|
446
|
+
|
447
|
+
|
448
|
+
Finished in 0.00
|
449
|
+
|
450
|
+
0 runs, 0 assertions, 0 failures, 0 errors, 0 skips
|
451
|
+
EOM
|
452
|
+
|
453
|
+
assert_filtering "exclude", "test_something", expected, :pass
|
454
|
+
end
|
455
|
+
|
456
|
+
def test_run_passing
|
457
|
+
@tu =
|
458
|
+
Class.new FakeNamedTest do
|
459
|
+
def test_something
|
460
|
+
assert true
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
464
|
+
expected = clean <<-EOM
|
465
|
+
.
|
466
|
+
|
467
|
+
Finished in 0.00
|
468
|
+
|
469
|
+
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
|
470
|
+
EOM
|
471
|
+
|
472
|
+
assert_report expected
|
473
|
+
end
|
474
|
+
|
475
|
+
def test_run_skip
|
476
|
+
@tu =
|
477
|
+
Class.new FakeNamedTest do
|
478
|
+
def test_something
|
479
|
+
assert true
|
480
|
+
end
|
481
|
+
|
482
|
+
def test_skip
|
483
|
+
skip "not yet"
|
484
|
+
end
|
485
|
+
end
|
486
|
+
|
487
|
+
expected = clean <<-EOM
|
488
|
+
S.
|
489
|
+
|
490
|
+
Finished in 0.00
|
491
|
+
|
492
|
+
2 runs, 1 assertions, 0 failures, 0 errors, 1 skips
|
493
|
+
|
494
|
+
You have skipped tests. Run with --verbose for details.
|
495
|
+
EOM
|
496
|
+
|
497
|
+
restore_env do
|
498
|
+
assert_report expected
|
499
|
+
end
|
500
|
+
end
|
501
|
+
|
502
|
+
def test_run_skip_verbose
|
503
|
+
@tu =
|
504
|
+
Class.new FakeNamedTest do
|
505
|
+
def test_something
|
506
|
+
assert true
|
507
|
+
end
|
508
|
+
|
509
|
+
def test_skip
|
510
|
+
skip "not yet"
|
511
|
+
end
|
512
|
+
end
|
513
|
+
|
514
|
+
expected = clean <<-EOM
|
515
|
+
FakeNamedTestXX#test_skip = 0.00 s = S
|
516
|
+
FakeNamedTestXX#test_something = 0.00 s = .
|
517
|
+
|
518
|
+
Finished in 0.00
|
519
|
+
|
520
|
+
1) Skipped:
|
521
|
+
FakeNamedTestXX#test_skip [FILE:LINE]:
|
522
|
+
not yet
|
523
|
+
|
524
|
+
2 runs, 1 assertions, 0 failures, 0 errors, 1 skips
|
525
|
+
EOM
|
526
|
+
|
527
|
+
assert_report expected, %w[--seed 42 --verbose]
|
528
|
+
end
|
529
|
+
|
530
|
+
def test_run_with_other_runner
|
531
|
+
@tu =
|
532
|
+
Class.new FakeNamedTest do
|
533
|
+
def self.run reporter, options = {}
|
534
|
+
@reporter = reporter
|
535
|
+
before_my_suite
|
536
|
+
super
|
537
|
+
end
|
538
|
+
|
539
|
+
def self.name; "wacky!" end
|
540
|
+
|
541
|
+
def self.before_my_suite
|
542
|
+
@reporter.io.puts "Running #{self.name} tests"
|
543
|
+
@@foo = 1
|
544
|
+
end
|
545
|
+
|
546
|
+
def test_something
|
547
|
+
assert_equal 1, @@foo
|
548
|
+
end
|
549
|
+
|
550
|
+
def test_something_else
|
551
|
+
assert_equal 1, @@foo
|
552
|
+
end
|
553
|
+
end
|
554
|
+
|
555
|
+
expected = clean <<-EOM
|
556
|
+
Running wacky! tests
|
557
|
+
..
|
558
|
+
|
559
|
+
Finished in 0.00
|
560
|
+
|
561
|
+
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
|
562
|
+
EOM
|
563
|
+
|
564
|
+
assert_report expected
|
565
|
+
end
|
566
|
+
|
567
|
+
require "monitor"
|
568
|
+
|
569
|
+
class Latch
|
570
|
+
def initialize count = 1
|
571
|
+
@count = count
|
572
|
+
@lock = Monitor.new
|
573
|
+
@cv = @lock.new_cond
|
574
|
+
end
|
575
|
+
|
576
|
+
def release
|
577
|
+
@lock.synchronize do
|
578
|
+
@count -= 1 if @count > 0
|
579
|
+
@cv.broadcast if @count == 0
|
580
|
+
end
|
581
|
+
end
|
582
|
+
|
583
|
+
def await
|
584
|
+
@lock.synchronize { @cv.wait_while { @count > 0 } }
|
585
|
+
end
|
586
|
+
end
|
587
|
+
|
588
|
+
def test_run_parallel
|
589
|
+
test_count = 2
|
590
|
+
test_latch = Latch.new test_count
|
591
|
+
wait_latch = Latch.new test_count
|
592
|
+
main_latch = Latch.new
|
593
|
+
|
594
|
+
thread = Thread.new {
|
595
|
+
Thread.current.abort_on_exception = true
|
596
|
+
|
597
|
+
# This latch waits until both test latches have been released. Both
|
598
|
+
# latches can't be released unless done in separate threads because
|
599
|
+
# `main_latch` keeps the test method from finishing.
|
600
|
+
test_latch.await
|
601
|
+
main_latch.release
|
602
|
+
}
|
603
|
+
|
604
|
+
@tu =
|
605
|
+
Class.new FakeNamedTest do
|
606
|
+
parallelize_me!
|
607
|
+
|
608
|
+
test_count.times do |i|
|
609
|
+
define_method :"test_wait_on_main_thread_#{i}" do
|
610
|
+
test_latch.release
|
611
|
+
|
612
|
+
# This latch blocks until the "main thread" releases it. The main
|
613
|
+
# thread can't release this latch until both test latches have
|
614
|
+
# been released. This forces the latches to be released in separate
|
615
|
+
# threads.
|
616
|
+
main_latch.await
|
617
|
+
assert true
|
618
|
+
end
|
619
|
+
end
|
620
|
+
end
|
621
|
+
|
622
|
+
expected = clean <<-EOM
|
623
|
+
..
|
624
|
+
|
625
|
+
Finished in 0.00
|
626
|
+
|
627
|
+
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
|
628
|
+
EOM
|
629
|
+
|
630
|
+
assert_report(expected) do |reporter|
|
631
|
+
reporter.extend(Module.new {
|
632
|
+
define_method("record") do |result|
|
633
|
+
super(result)
|
634
|
+
wait_latch.release
|
635
|
+
end
|
636
|
+
|
637
|
+
define_method("report") do
|
638
|
+
wait_latch.await
|
639
|
+
super()
|
640
|
+
end
|
641
|
+
})
|
642
|
+
end
|
643
|
+
assert thread.join
|
644
|
+
end
|
645
|
+
end
|
646
|
+
|
647
|
+
class TestMinitestUnitOrder < MetaMetaMetaTestCase
|
648
|
+
# do not parallelize this suite... it just can't handle it.
|
649
|
+
|
650
|
+
def test_before_setup
|
651
|
+
call_order = []
|
652
|
+
@tu =
|
653
|
+
Class.new FakeNamedTest do
|
654
|
+
define_method :setup do
|
655
|
+
super()
|
656
|
+
call_order << :setup
|
657
|
+
end
|
658
|
+
|
659
|
+
define_method :before_setup do
|
660
|
+
call_order << :before_setup
|
661
|
+
end
|
662
|
+
|
663
|
+
def test_omg; assert true; end
|
664
|
+
end
|
665
|
+
|
666
|
+
run_tu_with_fresh_reporter
|
667
|
+
|
668
|
+
expected = [:before_setup, :setup]
|
669
|
+
assert_equal expected, call_order
|
670
|
+
end
|
671
|
+
|
672
|
+
def test_after_teardown
|
673
|
+
call_order = []
|
674
|
+
@tu =
|
675
|
+
Class.new FakeNamedTest do
|
676
|
+
define_method :teardown do
|
677
|
+
super()
|
678
|
+
call_order << :teardown
|
679
|
+
end
|
680
|
+
|
681
|
+
define_method :after_teardown do
|
682
|
+
call_order << :after_teardown
|
683
|
+
end
|
684
|
+
|
685
|
+
def test_omg; assert true; end
|
686
|
+
end
|
687
|
+
|
688
|
+
run_tu_with_fresh_reporter
|
689
|
+
|
690
|
+
expected = [:teardown, :after_teardown]
|
691
|
+
assert_equal expected, call_order
|
692
|
+
end
|
693
|
+
|
694
|
+
def test_all_teardowns_are_guaranteed_to_run
|
695
|
+
call_order = []
|
696
|
+
@tu =
|
697
|
+
Class.new FakeNamedTest do
|
698
|
+
define_method :after_teardown do
|
699
|
+
super()
|
700
|
+
call_order << :after_teardown
|
701
|
+
raise
|
702
|
+
end
|
703
|
+
|
704
|
+
define_method :teardown do
|
705
|
+
super()
|
706
|
+
call_order << :teardown
|
707
|
+
raise
|
708
|
+
end
|
709
|
+
|
710
|
+
define_method :before_teardown do
|
711
|
+
super()
|
712
|
+
call_order << :before_teardown
|
713
|
+
raise
|
714
|
+
end
|
715
|
+
|
716
|
+
def test_omg; assert true; end
|
717
|
+
end
|
718
|
+
|
719
|
+
run_tu_with_fresh_reporter
|
720
|
+
|
721
|
+
expected = [:before_teardown, :teardown, :after_teardown]
|
722
|
+
assert_equal expected, call_order
|
723
|
+
end
|
724
|
+
|
725
|
+
def test_setup_and_teardown_survive_inheritance
|
726
|
+
call_order = []
|
727
|
+
|
728
|
+
@tu = Class.new FakeNamedTest do
|
729
|
+
define_method :setup do
|
730
|
+
call_order << :setup_method
|
731
|
+
end
|
732
|
+
|
733
|
+
define_method :teardown do
|
734
|
+
call_order << :teardown_method
|
735
|
+
end
|
736
|
+
|
737
|
+
define_method :test_something do
|
738
|
+
call_order << :test
|
739
|
+
end
|
740
|
+
end
|
741
|
+
|
742
|
+
run_tu_with_fresh_reporter
|
743
|
+
|
744
|
+
@tu = Class.new @tu
|
745
|
+
run_tu_with_fresh_reporter
|
746
|
+
|
747
|
+
# Once for the parent class, once for the child
|
748
|
+
expected = [:setup_method, :test, :teardown_method] * 2
|
749
|
+
|
750
|
+
assert_equal expected, call_order
|
751
|
+
end
|
752
|
+
end
|
753
|
+
|
754
|
+
class TestMinitestRunnable < Minitest::Test
|
755
|
+
def setup_marshal klass
|
756
|
+
tc = klass.new "whatever"
|
757
|
+
tc.assertions = 42
|
758
|
+
tc.failures << "a failure"
|
759
|
+
|
760
|
+
yield tc if block_given?
|
761
|
+
|
762
|
+
def tc.setup
|
763
|
+
@blah = "blah"
|
764
|
+
end
|
765
|
+
tc.setup
|
766
|
+
|
767
|
+
@tc = Minitest::Result.from tc
|
768
|
+
end
|
769
|
+
|
770
|
+
def assert_marshal expected_ivars
|
771
|
+
new_tc = Marshal.load Marshal.dump @tc
|
772
|
+
|
773
|
+
ivars = new_tc.instance_variables.map(&:to_s).sort
|
774
|
+
assert_equal expected_ivars, ivars
|
775
|
+
assert_equal "whatever", new_tc.name
|
776
|
+
assert_equal 42, new_tc.assertions
|
777
|
+
assert_equal ["a failure"], new_tc.failures
|
778
|
+
|
779
|
+
yield new_tc if block_given?
|
780
|
+
end
|
781
|
+
|
782
|
+
def test_marshal
|
783
|
+
setup_marshal Minitest::Runnable
|
784
|
+
|
785
|
+
assert_marshal %w[@NAME @assertions @failures @klass @source_location @time]
|
786
|
+
end
|
787
|
+
|
788
|
+
def test_spec_marshal
|
789
|
+
klass = describe("whatever") { it("passes") { assert true } }
|
790
|
+
rm = klass.runnable_methods.first
|
791
|
+
|
792
|
+
# Run the test
|
793
|
+
@tc = klass.new(rm).run
|
794
|
+
|
795
|
+
assert_kind_of Minitest::Result, @tc
|
796
|
+
|
797
|
+
# Pass it over the wire
|
798
|
+
over_the_wire = Marshal.load Marshal.dump @tc
|
799
|
+
|
800
|
+
assert_equal @tc.time, over_the_wire.time
|
801
|
+
assert_equal @tc.name, over_the_wire.name
|
802
|
+
assert_equal @tc.assertions, over_the_wire.assertions
|
803
|
+
assert_equal @tc.failures, over_the_wire.failures
|
804
|
+
assert_equal @tc.klass, over_the_wire.klass
|
805
|
+
end
|
806
|
+
end
|
807
|
+
|
808
|
+
class TestMinitestTest < TestMinitestRunnable
|
809
|
+
def test_dup
|
810
|
+
setup_marshal Minitest::Test do |tc|
|
811
|
+
tc.time = 3.14
|
812
|
+
end
|
813
|
+
|
814
|
+
assert_marshal %w[@NAME @assertions @failures @klass @source_location @time] do |new_tc|
|
815
|
+
assert_in_epsilon 3.14, new_tc.time
|
816
|
+
end
|
817
|
+
end
|
818
|
+
end
|
819
|
+
|
820
|
+
class TestMinitestUnitTestCase < Minitest::Test
|
821
|
+
# do not call parallelize_me! - teardown accesses @tc._assertions
|
822
|
+
# which is not threadsafe. Nearly every method in here is an
|
823
|
+
# assertion test so it isn't worth splitting it out further.
|
824
|
+
|
825
|
+
RUBY18 = !defined? Encoding
|
826
|
+
|
827
|
+
def setup
|
828
|
+
super
|
829
|
+
|
830
|
+
Minitest::Test.reset
|
831
|
+
|
832
|
+
@tc = Minitest::Test.new "fake tc"
|
833
|
+
@zomg = "zomg ponies!"
|
834
|
+
@assertion_count = 1
|
835
|
+
end
|
836
|
+
|
837
|
+
def teardown
|
838
|
+
assert_equal(@assertion_count, @tc.assertions,
|
839
|
+
"expected #{@assertion_count} assertions to be fired during the test, not #{@tc.assertions}") if @tc.passed?
|
840
|
+
end
|
841
|
+
|
842
|
+
def non_verbose
|
843
|
+
orig_verbose = $VERBOSE
|
844
|
+
$VERBOSE = false
|
845
|
+
|
846
|
+
yield
|
847
|
+
ensure
|
848
|
+
$VERBOSE = orig_verbose
|
849
|
+
end
|
850
|
+
|
851
|
+
def test_runnable_methods_random
|
852
|
+
@assertion_count = 0
|
853
|
+
|
854
|
+
sample_test_case = Class.new FakeNamedTest do
|
855
|
+
def self.test_order; :random; end
|
856
|
+
def test_test1; assert "does not matter" end
|
857
|
+
def test_test2; assert "does not matter" end
|
858
|
+
def test_test3; assert "does not matter" end
|
859
|
+
end
|
860
|
+
|
861
|
+
srand 42
|
862
|
+
expected = %w[test_test2 test_test1 test_test3]
|
863
|
+
assert_equal expected, sample_test_case.runnable_methods
|
864
|
+
end
|
865
|
+
|
866
|
+
def test_runnable_methods_sorted
|
867
|
+
@assertion_count = 0
|
868
|
+
|
869
|
+
sample_test_case = Class.new FakeNamedTest do
|
870
|
+
def self.test_order; :sorted end
|
871
|
+
def test_test3; assert "does not matter" end
|
872
|
+
def test_test2; assert "does not matter" end
|
873
|
+
def test_test1; assert "does not matter" end
|
874
|
+
end
|
875
|
+
|
876
|
+
expected = %w[test_test1 test_test2 test_test3]
|
877
|
+
assert_equal expected, sample_test_case.runnable_methods
|
878
|
+
end
|
879
|
+
|
880
|
+
def test_i_suck_and_my_tests_are_order_dependent_bang_sets_test_order_alpha
|
881
|
+
@assertion_count = 0
|
882
|
+
|
883
|
+
shitty_test_case = Class.new FakeNamedTest
|
884
|
+
|
885
|
+
shitty_test_case.i_suck_and_my_tests_are_order_dependent!
|
886
|
+
|
887
|
+
assert_equal :alpha, shitty_test_case.test_order
|
888
|
+
end
|
889
|
+
|
890
|
+
def test_i_suck_and_my_tests_are_order_dependent_bang_does_not_warn
|
891
|
+
@assertion_count = 0
|
892
|
+
|
893
|
+
shitty_test_case = Class.new FakeNamedTest
|
894
|
+
|
895
|
+
def shitty_test_case.test_order; :lol end
|
896
|
+
|
897
|
+
assert_silent do
|
898
|
+
shitty_test_case.i_suck_and_my_tests_are_order_dependent!
|
899
|
+
end
|
900
|
+
end
|
901
|
+
|
902
|
+
def test_autorun_does_not_affect_fork_success_status
|
903
|
+
@assertion_count = 0
|
904
|
+
skip "windows doesn't have skip" unless Process.respond_to?(:fork)
|
905
|
+
Process.waitpid(fork {})
|
906
|
+
assert_equal true, $?.success?
|
907
|
+
end
|
908
|
+
|
909
|
+
def test_autorun_does_not_affect_fork_exit_status
|
910
|
+
@assertion_count = 0
|
911
|
+
skip "windows doesn't have skip" unless Process.respond_to?(:fork)
|
912
|
+
Process.waitpid(fork { exit 42 })
|
913
|
+
assert_equal 42, $?.exitstatus
|
914
|
+
end
|
915
|
+
end
|
916
|
+
|
917
|
+
class TestMinitestGuard < Minitest::Test
|
918
|
+
parallelize_me!
|
919
|
+
|
920
|
+
def test_mri_eh
|
921
|
+
assert self.class.mri? "ruby blah"
|
922
|
+
assert self.mri? "ruby blah"
|
923
|
+
end
|
924
|
+
|
925
|
+
def test_jruby_eh
|
926
|
+
assert self.class.jruby? "java"
|
927
|
+
assert self.jruby? "java"
|
928
|
+
end
|
929
|
+
|
930
|
+
def test_rubinius_eh
|
931
|
+
assert_output "", /DEPRECATED/ do
|
932
|
+
assert self.class.rubinius? "rbx"
|
933
|
+
end
|
934
|
+
assert_output "", /DEPRECATED/ do
|
935
|
+
assert self.rubinius? "rbx"
|
936
|
+
end
|
937
|
+
end
|
938
|
+
|
939
|
+
def test_maglev_eh
|
940
|
+
assert_output "", /DEPRECATED/ do
|
941
|
+
assert self.class.maglev? "maglev"
|
942
|
+
end
|
943
|
+
assert_output "", /DEPRECATED/ do
|
944
|
+
assert self.maglev? "maglev"
|
945
|
+
end
|
946
|
+
end
|
947
|
+
|
948
|
+
def test_osx_eh
|
949
|
+
assert self.class.osx? "darwin"
|
950
|
+
assert self.osx? "darwin"
|
951
|
+
end
|
952
|
+
|
953
|
+
def test_windows_eh
|
954
|
+
assert self.class.windows? "mswin"
|
955
|
+
assert self.windows? "mswin"
|
956
|
+
end
|
957
|
+
end
|
958
|
+
|
959
|
+
class TestMinitestUnitRecording < MetaMetaMetaTestCase
|
960
|
+
# do not parallelize this suite... it just can't handle it.
|
961
|
+
|
962
|
+
def assert_run_record *expected, &block
|
963
|
+
@tu = Class.new FakeNamedTest, &block
|
964
|
+
|
965
|
+
run_tu_with_fresh_reporter
|
966
|
+
|
967
|
+
recorded = first_reporter.results.map(&:failures).flatten.map { |f| f.error.class }
|
968
|
+
|
969
|
+
assert_equal expected, recorded
|
970
|
+
end
|
971
|
+
|
972
|
+
def test_run_with_bogus_reporter
|
973
|
+
# https://github.com/seattlerb/minitest/issues/659
|
974
|
+
# TODO: remove test for minitest 6
|
975
|
+
@tu = Class.new FakeNamedTest do
|
976
|
+
def test_method
|
977
|
+
assert true
|
978
|
+
end
|
979
|
+
end
|
980
|
+
|
981
|
+
bogus_reporter = Class.new do # doesn't subclass AbstractReporter
|
982
|
+
def start; @success = false; end
|
983
|
+
# def prerecord klass, name; end # doesn't define full API
|
984
|
+
def record result; @success = true; end
|
985
|
+
def report; end
|
986
|
+
def passed?; end
|
987
|
+
def results; end
|
988
|
+
def success?; @success; end
|
989
|
+
end.new
|
990
|
+
|
991
|
+
self.reporter = Minitest::CompositeReporter.new
|
992
|
+
reporter << bogus_reporter
|
993
|
+
|
994
|
+
Minitest::Runnable.runnables.delete @tu
|
995
|
+
|
996
|
+
@tu.run reporter, {}
|
997
|
+
|
998
|
+
assert_predicate bogus_reporter, :success?
|
999
|
+
end
|
1000
|
+
|
1001
|
+
def test_record_passing
|
1002
|
+
assert_run_record do
|
1003
|
+
def test_method
|
1004
|
+
assert true
|
1005
|
+
end
|
1006
|
+
end
|
1007
|
+
end
|
1008
|
+
|
1009
|
+
def test_record_failing
|
1010
|
+
assert_run_record Minitest::Assertion do
|
1011
|
+
def test_method
|
1012
|
+
assert false
|
1013
|
+
end
|
1014
|
+
end
|
1015
|
+
end
|
1016
|
+
|
1017
|
+
def test_record_error
|
1018
|
+
assert_run_record RuntimeError do
|
1019
|
+
def test_method
|
1020
|
+
raise "unhandled exception"
|
1021
|
+
end
|
1022
|
+
end
|
1023
|
+
end
|
1024
|
+
|
1025
|
+
def test_record_error_teardown
|
1026
|
+
assert_run_record RuntimeError do
|
1027
|
+
def test_method
|
1028
|
+
assert true
|
1029
|
+
end
|
1030
|
+
|
1031
|
+
def teardown
|
1032
|
+
raise "unhandled exception"
|
1033
|
+
end
|
1034
|
+
end
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
def test_record_error_in_test_and_teardown
|
1038
|
+
assert_run_record AnError, RuntimeError do
|
1039
|
+
def test_method
|
1040
|
+
raise AnError
|
1041
|
+
end
|
1042
|
+
|
1043
|
+
def teardown
|
1044
|
+
raise "unhandled exception"
|
1045
|
+
end
|
1046
|
+
end
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
def test_to_s_error_in_test_and_teardown
|
1050
|
+
@tu = Class.new FakeNamedTest do
|
1051
|
+
def test_method
|
1052
|
+
raise AnError
|
1053
|
+
end
|
1054
|
+
|
1055
|
+
def teardown
|
1056
|
+
raise "unhandled exception"
|
1057
|
+
end
|
1058
|
+
end
|
1059
|
+
|
1060
|
+
run_tu_with_fresh_reporter
|
1061
|
+
|
1062
|
+
exp = clean "
|
1063
|
+
Error:
|
1064
|
+
FakeNamedTestXX#test_method:
|
1065
|
+
AnError: AnError
|
1066
|
+
FILE:LINE:in `test_method'
|
1067
|
+
|
1068
|
+
Error:
|
1069
|
+
FakeNamedTestXX#test_method:
|
1070
|
+
RuntimeError: unhandled exception
|
1071
|
+
FILE:LINE:in `teardown'
|
1072
|
+
"
|
1073
|
+
|
1074
|
+
assert_equal exp.strip, normalize_output(first_reporter.results.first.to_s).strip
|
1075
|
+
end
|
1076
|
+
|
1077
|
+
def test_record_skip
|
1078
|
+
assert_run_record Minitest::Skip do
|
1079
|
+
def test_method
|
1080
|
+
skip "not yet"
|
1081
|
+
end
|
1082
|
+
end
|
1083
|
+
end
|
1084
|
+
end
|