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.
Files changed (158) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +7 -0
  3. data/Gemfile.lock +23 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +40 -0
  6. data/Rakefile +10 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/colorcode_convert_rgb.gemspec +30 -0
  10. data/exe/colorcode_convert_rgb +4 -0
  11. data/lib/colorcode_convert_rgb.rb +7 -0
  12. data/lib/colorcode_convert_rgb/cli.rb +13 -0
  13. data/lib/colorcode_convert_rgb/version.rb +3 -0
  14. data/vendor/bundle/ruby/2.5.0/bin/colorcode_convert_rgb +27 -0
  15. data/vendor/bundle/ruby/2.5.0/bin/rake +27 -0
  16. data/vendor/bundle/ruby/2.5.0/bin/thor +27 -0
  17. data/vendor/bundle/ruby/2.5.0/cache/minitest-5.14.2.gem +0 -0
  18. data/vendor/bundle/ruby/2.5.0/cache/rake-12.3.3.gem +0 -0
  19. data/vendor/bundle/ruby/2.5.0/cache/thor-1.0.1.gem +0 -0
  20. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/.autotest +34 -0
  21. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/History.rdoc +1397 -0
  22. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/Manifest.txt +27 -0
  23. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/README.rdoc +764 -0
  24. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/Rakefile +74 -0
  25. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/design_rationale.rb +52 -0
  26. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/hoe/minitest.rb +32 -0
  27. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest.rb +1056 -0
  28. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/assertions.rb +807 -0
  29. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/autorun.rb +13 -0
  30. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/benchmark.rb +455 -0
  31. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/expectations.rb +303 -0
  32. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/hell.rb +11 -0
  33. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/mock.rb +240 -0
  34. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/parallel.rb +70 -0
  35. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/pride.rb +4 -0
  36. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/pride_plugin.rb +142 -0
  37. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/spec.rb +342 -0
  38. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/test.rb +220 -0
  39. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/lib/minitest/unit.rb +45 -0
  40. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/metametameta.rb +136 -0
  41. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_assertions.rb +1575 -0
  42. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_benchmark.rb +137 -0
  43. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_mock.rb +872 -0
  44. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_reporter.rb +299 -0
  45. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_spec.rb +1061 -0
  46. data/vendor/bundle/ruby/2.5.0/gems/minitest-5.14.2/test/minitest/test_minitest_test.rb +1084 -0
  47. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/CONTRIBUTING.rdoc +43 -0
  48. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/Gemfile +3 -0
  49. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/History.rdoc +2344 -0
  50. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/MIT-LICENSE +21 -0
  51. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/README.rdoc +156 -0
  52. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/Rakefile +41 -0
  53. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/azure-pipelines.yml +11 -0
  54. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/bundle +105 -0
  55. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/console +7 -0
  56. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/rake +29 -0
  57. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/rdoc +29 -0
  58. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/rubocop +29 -0
  59. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/bin/setup +6 -0
  60. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/command_line_usage.rdoc +158 -0
  61. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/Rakefile1 +38 -0
  62. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/Rakefile2 +35 -0
  63. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/a.c +6 -0
  64. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/b.c +6 -0
  65. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/example/main.c +11 -0
  66. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/glossary.rdoc +42 -0
  67. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/jamis.rb +592 -0
  68. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/proto_rake.rdoc +127 -0
  69. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/rake.1 +156 -0
  70. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/rakefile.rdoc +622 -0
  71. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/doc/rational.rdoc +151 -0
  72. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/exe/rake +27 -0
  73. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake.rb +71 -0
  74. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/application.rb +824 -0
  75. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/backtrace.rb +24 -0
  76. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/clean.rb +78 -0
  77. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/cloneable.rb +17 -0
  78. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/cpu_counter.rb +107 -0
  79. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/default_loader.rb +15 -0
  80. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/dsl_definition.rb +195 -0
  81. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/early_time.rb +22 -0
  82. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/ext/core.rb +26 -0
  83. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/ext/string.rb +176 -0
  84. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_creation_task.rb +25 -0
  85. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_list.rb +435 -0
  86. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_task.rb +54 -0
  87. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_utils.rb +137 -0
  88. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/file_utils_ext.rb +145 -0
  89. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/invocation_chain.rb +57 -0
  90. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/invocation_exception_mixin.rb +17 -0
  91. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/late_time.rb +18 -0
  92. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/linked_list.rb +112 -0
  93. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/loaders/makefile.rb +54 -0
  94. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/multi_task.rb +14 -0
  95. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/name_space.rb +38 -0
  96. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/packagetask.rb +207 -0
  97. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/phony.rb +16 -0
  98. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/private_reader.rb +21 -0
  99. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/promise.rb +100 -0
  100. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/pseudo_status.rb +30 -0
  101. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/rake_module.rb +67 -0
  102. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/rake_test_loader.rb +27 -0
  103. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
  104. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/scope.rb +43 -0
  105. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/task.rb +413 -0
  106. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/task_argument_error.rb +8 -0
  107. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/task_arguments.rb +109 -0
  108. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/task_manager.rb +324 -0
  109. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/tasklib.rb +12 -0
  110. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/testtask.rb +224 -0
  111. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/thread_history_display.rb +49 -0
  112. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/thread_pool.rb +163 -0
  113. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/trace_output.rb +23 -0
  114. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/version.rb +10 -0
  115. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/lib/rake/win32.rb +51 -0
  116. data/vendor/bundle/ruby/2.5.0/gems/rake-12.3.3/rake.gemspec +42 -0
  117. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/.document +5 -0
  118. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/CHANGELOG.md +220 -0
  119. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/CONTRIBUTING.md +15 -0
  120. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/LICENSE.md +20 -0
  121. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/README.md +51 -0
  122. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/bin/thor +6 -0
  123. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor.rb +517 -0
  124. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions.rb +336 -0
  125. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_file.rb +104 -0
  126. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_link.rb +61 -0
  127. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/directory.rb +108 -0
  128. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/empty_directory.rb +143 -0
  129. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/file_manipulation.rb +373 -0
  130. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/actions/inject_into_file.rb +120 -0
  131. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/base.rb +699 -0
  132. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/command.rb +142 -0
  133. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/core_ext/hash_with_indifferent_access.rb +97 -0
  134. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/error.rb +110 -0
  135. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/group.rb +281 -0
  136. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/invocation.rb +178 -0
  137. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/line_editor.rb +17 -0
  138. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/line_editor/basic.rb +37 -0
  139. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/line_editor/readline.rb +88 -0
  140. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/nested_context.rb +29 -0
  141. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser.rb +4 -0
  142. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser/argument.rb +70 -0
  143. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser/arguments.rb +175 -0
  144. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser/option.rb +159 -0
  145. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/parser/options.rb +236 -0
  146. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/rake_compat.rb +72 -0
  147. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/runner.rb +325 -0
  148. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/shell.rb +81 -0
  149. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/shell/basic.rb +491 -0
  150. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/shell/color.rb +153 -0
  151. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/shell/html.rb +126 -0
  152. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/util.rb +284 -0
  153. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/lib/thor/version.rb +3 -0
  154. data/vendor/bundle/ruby/2.5.0/gems/thor-1.0.1/thor.gemspec +28 -0
  155. data/vendor/bundle/ruby/2.5.0/specifications/minitest-5.14.2.gemspec +38 -0
  156. data/vendor/bundle/ruby/2.5.0/specifications/rake-12.3.3.gemspec +43 -0
  157. data/vendor/bundle/ruby/2.5.0/specifications/thor-1.0.1.gemspec +34 -0
  158. metadata +214 -0
@@ -0,0 +1,137 @@
1
+ require "minitest/autorun"
2
+ require "minitest/benchmark"
3
+
4
+ ##
5
+ # Used to verify data:
6
+ # http://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_bench_range
29
+ assert_equal [1, 10, 100, 1_000, 10_000], Minitest::Benchmark.bench_range
30
+ end
31
+
32
+ def test_fit_exponential_clean
33
+ x = [1.0, 2.0, 3.0, 4.0, 5.0]
34
+ y = x.map { |n| 1.1 * Math.exp(2.1 * n) }
35
+
36
+ assert_fit :exponential, x, y, 1.0, 1.1, 2.1
37
+ end
38
+
39
+ def test_fit_exponential_noisy
40
+ x = [1.0, 1.9, 2.6, 3.4, 5.0]
41
+ y = [12, 10, 8.2, 6.9, 5.9]
42
+
43
+ # verified with Numbers and R
44
+ assert_fit :exponential, x, y, 0.95, 13.81148, -0.1820
45
+ end
46
+
47
+ def test_fit_logarithmic_clean
48
+ x = [1.0, 2.0, 3.0, 4.0, 5.0]
49
+ y = x.map { |n| 1.1 + 2.1 * Math.log(n) }
50
+
51
+ assert_fit :logarithmic, x, y, 1.0, 1.1, 2.1
52
+ end
53
+
54
+ def test_fit_logarithmic_noisy
55
+ x = [1.0, 2.0, 3.0, 4.0, 5.0]
56
+ # Generated with
57
+ # y = x.map { |n| jitter = 0.999 + 0.002 * rand; (Math.log(n) ) * jitter }
58
+ y = [0.0, 0.6935, 1.0995, 1.3873, 1.6097]
59
+
60
+ assert_fit :logarithmic, x, y, 0.95, 0, 1
61
+ end
62
+
63
+ def test_fit_constant_clean
64
+ x = (1..5).to_a
65
+ y = [5.0, 5.0, 5.0, 5.0, 5.0]
66
+
67
+ assert_fit :linear, x, y, nil, 5.0, 0
68
+ end
69
+
70
+ def test_fit_constant_noisy
71
+ x = (1..5).to_a
72
+ y = [1.0, 1.2, 1.0, 0.8, 1.0]
73
+
74
+ # verified in numbers and R
75
+ assert_fit :linear, x, y, nil, 1.12, -0.04
76
+ end
77
+
78
+ def test_fit_linear_clean
79
+ # y = m * x + b where m = 2.2, b = 3.1
80
+ x = (1..5).to_a
81
+ y = x.map { |n| 2.2 * n + 3.1 }
82
+
83
+ assert_fit :linear, x, y, 1.0, 3.1, 2.2
84
+ end
85
+
86
+ def test_fit_linear_noisy
87
+ x = [ 60, 61, 62, 63, 65]
88
+ y = [3.1, 3.6, 3.8, 4.0, 4.1]
89
+
90
+ # verified in numbers and R
91
+ assert_fit :linear, x, y, 0.8315, -7.9635, 0.1878
92
+ end
93
+
94
+ def test_fit_power_clean
95
+ # y = A x ** B, where B = b and A = e ** a
96
+ # if, A = 1, B = 2, then
97
+
98
+ x = [1.0, 2.0, 3.0, 4.0, 5.0]
99
+ y = [1.0, 4.0, 9.0, 16.0, 25.0]
100
+
101
+ assert_fit :power, x, y, 1.0, 1.0, 2.0
102
+ end
103
+
104
+ def test_fit_power_noisy
105
+ # from www.engr.uidaho.edu/thompson/courses/ME330/lecture/least_squares.html
106
+ x = [10, 12, 15, 17, 20, 22, 25, 27, 30, 32, 35]
107
+ y = [95, 105, 125, 141, 173, 200, 253, 298, 385, 459, 602]
108
+
109
+ # verified in numbers
110
+ assert_fit :power, x, y, 0.90, 2.6217, 1.4556
111
+
112
+ # income to % of households below income amount
113
+ # http://library.wolfram.com/infocenter/Conferences/6461/PowerLaws.nb
114
+ x = [15_000, 25_000, 35_000, 50_000, 75_000, 100_000]
115
+ y = [0.154, 0.283, 0.402, 0.55, 0.733, 0.843]
116
+
117
+ # verified in numbers
118
+ assert_fit :power, x, y, 0.96, 3.119e-5, 0.8959
119
+ end
120
+
121
+ def assert_fit msg, x, y, fit, exp_a, exp_b
122
+ bench = Minitest::Benchmark.new :blah
123
+
124
+ a, b, rr = bench.send "fit_#{msg}", x, y
125
+
126
+ assert_operator rr, :>=, fit if fit
127
+ assert_in_delta exp_a, a
128
+ assert_in_delta exp_b, b
129
+ end
130
+ end
131
+
132
+ describe "my class Bench" do
133
+ klass = self
134
+ it "should provide bench methods" do
135
+ klass.must_respond_to :bench
136
+ end
137
+ end
@@ -0,0 +1,872 @@
1
+ require "minitest/autorun"
2
+
3
+ class TestMinitestMock < Minitest::Test
4
+ parallelize_me!
5
+
6
+ def setup
7
+ @mock = Minitest::Mock.new.expect(:foo, nil)
8
+ @mock.expect(:meaning_of_life, 42)
9
+ end
10
+
11
+ def test_create_stub_method
12
+ assert_nil @mock.foo
13
+ end
14
+
15
+ def test_allow_return_value_specification
16
+ assert_equal 42, @mock.meaning_of_life
17
+ end
18
+
19
+ def test_blow_up_if_not_called
20
+ @mock.foo
21
+
22
+ util_verify_bad "expected meaning_of_life() => 42"
23
+ end
24
+
25
+ def test_not_blow_up_if_everything_called
26
+ @mock.foo
27
+ @mock.meaning_of_life
28
+
29
+ assert_mock @mock
30
+ end
31
+
32
+ def test_allow_expectations_to_be_added_after_creation
33
+ @mock.expect(:bar, true)
34
+ assert @mock.bar
35
+ end
36
+
37
+ def test_not_verify_if_new_expected_method_is_not_called
38
+ @mock.foo
39
+ @mock.meaning_of_life
40
+ @mock.expect(:bar, true)
41
+
42
+ util_verify_bad "expected bar() => true"
43
+ end
44
+
45
+ def test_blow_up_on_wrong_number_of_arguments
46
+ @mock.foo
47
+ @mock.meaning_of_life
48
+ @mock.expect(:sum, 3, [1, 2])
49
+
50
+ e = assert_raises ArgumentError do
51
+ @mock.sum
52
+ end
53
+
54
+ assert_equal "mocked method :sum expects 2 arguments, got 0", e.message
55
+ end
56
+
57
+ def test_return_mock_does_not_raise
58
+ retval = Minitest::Mock.new
59
+ mock = Minitest::Mock.new
60
+ mock.expect(:foo, retval)
61
+ mock.foo
62
+
63
+ assert_mock mock
64
+ end
65
+
66
+ def test_mock_args_does_not_raise
67
+ arg = Minitest::Mock.new
68
+ mock = Minitest::Mock.new
69
+ mock.expect(:foo, nil, [arg])
70
+ mock.foo(arg)
71
+
72
+ assert_mock mock
73
+ end
74
+
75
+ def test_set_expectation_on_special_methods
76
+ mock = Minitest::Mock.new
77
+
78
+ mock.expect :object_id, "received object_id"
79
+ assert_equal "received object_id", mock.object_id
80
+
81
+ mock.expect :respond_to_missing?, "received respond_to_missing?"
82
+ assert_equal "received respond_to_missing?", mock.respond_to_missing?
83
+
84
+ mock.expect :===, "received ==="
85
+ assert_equal "received ===", mock.===
86
+
87
+ mock.expect :inspect, "received inspect"
88
+ assert_equal "received inspect", mock.inspect
89
+
90
+ mock.expect :to_s, "received to_s"
91
+ assert_equal "received to_s", mock.to_s
92
+
93
+ mock.expect :public_send, "received public_send"
94
+ assert_equal "received public_send", mock.public_send
95
+
96
+ mock.expect :send, "received send"
97
+ assert_equal "received send", mock.send
98
+
99
+ assert_mock mock
100
+ end
101
+
102
+ def test_expectations_can_be_satisfied_via_send
103
+ @mock.send :foo
104
+ @mock.send :meaning_of_life
105
+
106
+ assert_mock @mock
107
+ end
108
+
109
+ def test_expectations_can_be_satisfied_via_public_send
110
+ skip "Doesn't run on 1.8" if RUBY_VERSION < "1.9"
111
+
112
+ @mock.public_send :foo
113
+ @mock.public_send :meaning_of_life
114
+
115
+ assert_mock @mock
116
+ end
117
+
118
+ def test_blow_up_on_wrong_arguments
119
+ @mock.foo
120
+ @mock.meaning_of_life
121
+ @mock.expect(:sum, 3, [1, 2])
122
+
123
+ e = assert_raises MockExpectationError do
124
+ @mock.sum(2, 4)
125
+ end
126
+
127
+ exp = "mocked method :sum called with unexpected arguments [2, 4]"
128
+ assert_equal exp, e.message
129
+ end
130
+
131
+ def test_expect_with_non_array_args
132
+ e = assert_raises ArgumentError do
133
+ @mock.expect :blah, 3, false
134
+ end
135
+
136
+ assert_equal "args must be an array", e.message
137
+ end
138
+
139
+ def test_respond_appropriately
140
+ assert @mock.respond_to?(:foo)
141
+ assert @mock.respond_to?(:foo, true)
142
+ assert @mock.respond_to?("foo")
143
+ assert !@mock.respond_to?(:bar)
144
+ end
145
+
146
+ def test_no_method_error_on_unexpected_methods
147
+ e = assert_raises NoMethodError do
148
+ @mock.bar
149
+ end
150
+
151
+ expected = "unmocked method :bar, expected one of [:foo, :meaning_of_life]"
152
+
153
+ assert_equal expected, e.message
154
+ end
155
+
156
+ def test_assign_per_mock_return_values
157
+ a = Minitest::Mock.new
158
+ b = Minitest::Mock.new
159
+
160
+ a.expect(:foo, :a)
161
+ b.expect(:foo, :b)
162
+
163
+ assert_equal :a, a.foo
164
+ assert_equal :b, b.foo
165
+ end
166
+
167
+ def test_do_not_create_stub_method_on_new_mocks
168
+ a = Minitest::Mock.new
169
+ a.expect(:foo, :a)
170
+
171
+ assert !Minitest::Mock.new.respond_to?(:foo)
172
+ end
173
+
174
+ def test_mock_is_a_blank_slate
175
+ @mock.expect :kind_of?, true, [String]
176
+ @mock.expect :==, true, [1]
177
+
178
+ assert @mock.kind_of?(String), "didn't mock :kind_of\?"
179
+ assert @mock == 1, "didn't mock :=="
180
+ end
181
+
182
+ def test_verify_allows_called_args_to_be_loosely_specified
183
+ mock = Minitest::Mock.new
184
+ mock.expect :loose_expectation, true, [Integer]
185
+ mock.loose_expectation 1
186
+
187
+ assert_mock mock
188
+ end
189
+
190
+ def test_verify_raises_with_strict_args
191
+ mock = Minitest::Mock.new
192
+ mock.expect :strict_expectation, true, [2]
193
+
194
+ e = assert_raises MockExpectationError do
195
+ mock.strict_expectation 1
196
+ end
197
+
198
+ exp = "mocked method :strict_expectation called with unexpected arguments [1]"
199
+ assert_equal exp, e.message
200
+ end
201
+
202
+ def test_method_missing_empty
203
+ mock = Minitest::Mock.new
204
+
205
+ mock.expect :a, nil
206
+
207
+ mock.a
208
+
209
+ e = assert_raises MockExpectationError do
210
+ mock.a
211
+ end
212
+
213
+ assert_equal "No more expects available for :a: []", e.message
214
+ end
215
+
216
+ def test_same_method_expects_are_verified_when_all_called
217
+ mock = Minitest::Mock.new
218
+ mock.expect :foo, nil, [:bar]
219
+ mock.expect :foo, nil, [:baz]
220
+
221
+ mock.foo :bar
222
+ mock.foo :baz
223
+
224
+ assert_mock mock
225
+ end
226
+
227
+ def test_same_method_expects_blow_up_when_not_all_called
228
+ mock = Minitest::Mock.new
229
+ mock.expect :foo, nil, [:bar]
230
+ mock.expect :foo, nil, [:baz]
231
+
232
+ mock.foo :bar
233
+
234
+ e = assert_raises(MockExpectationError) { mock.verify }
235
+
236
+ exp = "expected foo(:baz) => nil, got [foo(:bar) => nil]"
237
+
238
+ assert_equal exp, e.message
239
+ end
240
+
241
+ def test_same_method_expects_with_same_args_blow_up_when_not_all_called
242
+ mock = Minitest::Mock.new
243
+ mock.expect :foo, nil, [:bar]
244
+ mock.expect :foo, nil, [:bar]
245
+
246
+ mock.foo :bar
247
+
248
+ e = assert_raises(MockExpectationError) { mock.verify }
249
+
250
+ exp = "expected foo(:bar) => nil, got [foo(:bar) => nil]"
251
+
252
+ assert_equal exp, e.message
253
+ end
254
+
255
+ def test_verify_passes_when_mock_block_returns_true
256
+ mock = Minitest::Mock.new
257
+ mock.expect :foo, nil do
258
+ true
259
+ end
260
+
261
+ mock.foo
262
+
263
+ assert_mock mock
264
+ end
265
+
266
+ def test_mock_block_is_passed_function_params
267
+ arg1, arg2, arg3 = :bar, [1, 2, 3], { :a => "a" }
268
+ mock = Minitest::Mock.new
269
+ mock.expect :foo, nil do |a1, a2, a3|
270
+ a1 == arg1 && a2 == arg2 && a3 == arg3
271
+ end
272
+
273
+ mock.foo arg1, arg2, arg3
274
+
275
+ assert_mock mock
276
+ end
277
+
278
+ def test_mock_block_is_passed_function_block
279
+ mock = Minitest::Mock.new
280
+ block = proc { "bar" }
281
+ mock.expect :foo, nil do |arg, &blk|
282
+ arg == "foo" &&
283
+ blk == block
284
+ end
285
+ mock.foo "foo", &block
286
+ assert_mock mock
287
+ end
288
+
289
+ def test_verify_fails_when_mock_block_returns_false
290
+ mock = Minitest::Mock.new
291
+ mock.expect :foo, nil do
292
+ false
293
+ end
294
+
295
+ e = assert_raises(MockExpectationError) { mock.foo }
296
+ exp = "mocked method :foo failed block w/ []"
297
+
298
+ assert_equal exp, e.message
299
+ end
300
+
301
+ def test_mock_block_throws_if_args_passed
302
+ mock = Minitest::Mock.new
303
+
304
+ e = assert_raises(ArgumentError) do
305
+ mock.expect :foo, nil, [:a, :b, :c] do
306
+ true
307
+ end
308
+ end
309
+
310
+ exp = "args ignored when block given"
311
+
312
+ assert_equal exp, e.message
313
+ end
314
+
315
+ def test_mock_returns_retval_when_called_with_block
316
+ mock = Minitest::Mock.new
317
+ mock.expect(:foo, 32) do
318
+ true
319
+ end
320
+
321
+ rs = mock.foo
322
+
323
+ assert_equal rs, 32
324
+ end
325
+
326
+ def util_verify_bad exp
327
+ e = assert_raises MockExpectationError do
328
+ @mock.verify
329
+ end
330
+
331
+ assert_equal exp, e.message
332
+ end
333
+
334
+ def test_mock_called_via_send
335
+ mock = Minitest::Mock.new
336
+ mock.expect(:foo, true)
337
+
338
+ mock.send :foo
339
+ assert_mock mock
340
+ end
341
+
342
+ def test_mock_called_via___send__
343
+ mock = Minitest::Mock.new
344
+ mock.expect(:foo, true)
345
+
346
+ mock.__send__ :foo
347
+ assert_mock mock
348
+ end
349
+
350
+ def test_mock_called_via_send_with_args
351
+ mock = Minitest::Mock.new
352
+ mock.expect(:foo, true, [1, 2, 3])
353
+
354
+ mock.send(:foo, 1, 2, 3)
355
+ assert_mock mock
356
+ end
357
+
358
+ end
359
+
360
+ require "minitest/metametameta"
361
+
362
+ class TestMinitestStub < Minitest::Test
363
+ # Do not parallelize since we're calling stub on class methods
364
+
365
+ def setup
366
+ super
367
+ Minitest::Test.reset
368
+
369
+ @tc = Minitest::Test.new "fake tc"
370
+ @assertion_count = 1
371
+ end
372
+
373
+ def teardown
374
+ super
375
+ assert_equal @assertion_count, @tc.assertions if self.passed?
376
+ end
377
+
378
+ class Time
379
+ def self.now
380
+ 24
381
+ end
382
+ end
383
+
384
+ def assert_stub val_or_callable
385
+ @assertion_count += 1
386
+
387
+ t = Time.now.to_i
388
+
389
+ Time.stub :now, val_or_callable do
390
+ @tc.assert_equal 42, Time.now
391
+ end
392
+
393
+ @tc.assert_operator Time.now.to_i, :>=, t
394
+ end
395
+
396
+ def test_stub_private_module_method
397
+ @assertion_count += 1
398
+
399
+ t0 = Time.now
400
+
401
+ self.stub :sleep, nil do
402
+ @tc.assert_nil sleep(10)
403
+ end
404
+
405
+ @tc.assert_operator Time.now - t0, :<=, 1
406
+ end
407
+
408
+ def test_stub_private_module_method_indirect
409
+ @assertion_count += 1
410
+
411
+ fail_clapper = Class.new do
412
+ def fail_clap
413
+ raise
414
+ :clap
415
+ end
416
+ end.new
417
+
418
+ fail_clapper.stub :raise, nil do |safe_clapper|
419
+ @tc.assert_equal :clap, safe_clapper.fail_clap # either form works
420
+ @tc.assert_equal :clap, fail_clapper.fail_clap # yay closures
421
+ end
422
+ end
423
+
424
+ def test_stub_public_module_method
425
+ Math.stub :log10, :stubbed do
426
+ @tc.assert_equal :stubbed, Math.log10(1000)
427
+ end
428
+ end
429
+
430
+ def test_stub_value
431
+ assert_stub 42
432
+ end
433
+
434
+ def test_stub_block
435
+ assert_stub lambda { 42 }
436
+ end
437
+
438
+ def test_stub_block_args
439
+ @assertion_count += 1
440
+
441
+ t = Time.now.to_i
442
+
443
+ Time.stub :now, lambda { |n| n * 2 } do
444
+ @tc.assert_equal 42, Time.now(21)
445
+ end
446
+
447
+ @tc.assert_operator Time.now.to_i, :>=, t
448
+ end
449
+
450
+ def test_stub_callable
451
+ obj = Object.new
452
+
453
+ def obj.call
454
+ 42
455
+ end
456
+
457
+ assert_stub obj
458
+ end
459
+
460
+ def test_stub_yield_self
461
+ obj = "foo"
462
+
463
+ val = obj.stub :to_s, "bar" do |s|
464
+ s.to_s
465
+ end
466
+
467
+ @tc.assert_equal "bar", val
468
+ end
469
+
470
+ def test_dynamic_method
471
+ @assertion_count = 2
472
+
473
+ dynamic = Class.new do
474
+ def self.respond_to? meth
475
+ meth == :found
476
+ end
477
+
478
+ def self.method_missing meth, *args, &block
479
+ if meth == :found
480
+ false
481
+ else
482
+ super
483
+ end
484
+ end
485
+ end
486
+
487
+ val = dynamic.stub(:found, true) do |s|
488
+ s.found
489
+ end
490
+
491
+ @tc.assert_equal true, val
492
+ @tc.assert_equal false, dynamic.found
493
+ end
494
+
495
+ def test_stub_NameError
496
+ e = @tc.assert_raises NameError do
497
+ Time.stub :nope_nope_nope, 42 do
498
+ # do nothing
499
+ end
500
+ end
501
+
502
+ exp = /undefined method `nope_nope_nope' for( class)? `#{self.class}::Time'/
503
+ assert_match exp, e.message
504
+ end
505
+
506
+ def test_mock_with_yield
507
+ mock = Minitest::Mock.new
508
+ mock.expect(:write, true) do
509
+ true
510
+ end
511
+ rs = nil
512
+
513
+ File.stub :open, true, mock do
514
+ File.open "foo.txt", "r" do |f|
515
+ rs = f.write
516
+ end
517
+ end
518
+ @tc.assert_equal true, rs
519
+ end
520
+
521
+ alias test_stub_value__old test_stub_value # TODO: remove/rename
522
+
523
+ ## Permutation Sets:
524
+
525
+ # [:value, :lambda]
526
+ # [:*, :block, :block_call]
527
+ # [:**, :block_args]
528
+ #
529
+ # Where:
530
+ #
531
+ # :value = a normal value
532
+ # :lambda = callable or lambda
533
+ # :* = no block
534
+ # :block = normal block
535
+ # :block_call = :lambda invokes the block (N/A for :value)
536
+ # :** = no args
537
+ # :args = args passed to stub
538
+
539
+ ## Permutations
540
+
541
+ # [:call, :*, :**] =>5 callable+block FIX: CALL BOTH (bug)
542
+ # [:call, :*, :**] =>6 callable
543
+
544
+ # [:lambda, :*, :**] => lambda result
545
+
546
+ # [:lambda, :*, :args] => lambda result NO ARGS
547
+
548
+ # [:lambda, :block, :**] =>5 lambda result FIX: CALL BOTH (bug)
549
+ # [:lambda, :block, :**] =>6 lambda result
550
+
551
+ # [:lambda, :block, :args] =>5 lambda result FIX: CALL BOTH (bug)
552
+ # [:lambda, :block, :args] =>6 lambda result
553
+ # [:lambda, :block, :args] =>7 raise ArgumentError
554
+
555
+ # [:lambda, :block_call, :**] =>5 lambda FIX: BUG!-not passed block to lambda
556
+ # [:lambda, :block_call, :**] =>6 lambda+block result
557
+
558
+ # [:lambda, :block_call, :args] =>5 lambda FIX: BUG!-not passed block to lambda
559
+ # [:lambda, :block_call, :args] =>6 lambda+block result
560
+
561
+ # [:value, :*, :**] => value
562
+
563
+ # [:value, :*, :args] => value, ignore args
564
+
565
+ # [:value, :block, :**] =>5 value, call block
566
+ # [:value, :block, :**] =>6 value
567
+
568
+ # [:value, :block, :args] =>5 value, call block w/ args
569
+ # [:value, :block, :args] =>6 value, call block w/ args, deprecated
570
+ # [:value, :block, :args] =>7 raise ArgumentError
571
+
572
+ # [:value, :block_call, :**] => N/A
573
+
574
+ # [:value, :block_call, :args] => N/A
575
+
576
+ class Bar
577
+ def call
578
+ puts "hi"
579
+ end
580
+ end
581
+
582
+ class Foo
583
+ def self.blocking
584
+ yield
585
+ end
586
+ end
587
+
588
+ class Thingy
589
+ def self.identity arg
590
+ arg
591
+ end
592
+ end
593
+
594
+ def test_stub_callable_block_5 # from tenderlove
595
+ @assertion_count += 1
596
+ Foo.stub5 :blocking, Bar.new do
597
+ @tc.assert_output "hi\n", "" do
598
+ Foo.blocking do
599
+ @tc.flunk "shouldn't ever hit this"
600
+ end
601
+ end
602
+ end
603
+ end
604
+
605
+ def test_stub_callable_block_6 # from tenderlove
606
+ skip_stub6
607
+
608
+ @assertion_count += 1
609
+ Foo.stub6 :blocking, Bar.new do
610
+ @tc.assert_output "hi\n", "" do
611
+ Foo.blocking do
612
+ @tc.flunk "shouldn't ever hit this"
613
+ end
614
+ end
615
+ end
616
+ end
617
+
618
+ def test_stub_lambda
619
+ Thread.stub :new, lambda { 21+21 } do
620
+ @tc.assert_equal 42, Thread.new
621
+ end
622
+ end
623
+
624
+ def test_stub_lambda_args
625
+ Thread.stub :new, lambda { 21+21 }, :wtf do
626
+ @tc.assert_equal 42, Thread.new
627
+ end
628
+ end
629
+
630
+ def test_stub_lambda_block_5
631
+ Thread.stub5 :new, lambda { 21+21 } do
632
+ result = Thread.new do
633
+ @tc.flunk "shouldn't ever hit this"
634
+ end
635
+ @tc.assert_equal 42, result
636
+ end
637
+ end
638
+
639
+ def test_stub_lambda_block_6
640
+ skip_stub6
641
+
642
+ Thread.stub6 :new, lambda { 21+21 } do
643
+ result = Thread.new do
644
+ @tc.flunk "shouldn't ever hit this"
645
+ end
646
+ @tc.assert_equal 42, result
647
+ end
648
+ end
649
+
650
+ def test_stub_lambda_block_args_5
651
+ @assertion_count += 1
652
+ Thingy.stub5 :identity, lambda { |y| @tc.assert_equal :nope, y; 21+21 }, :WTF? do
653
+ result = Thingy.identity :nope do |x|
654
+ @tc.flunk "shouldn't reach this"
655
+ end
656
+ @tc.assert_equal 42, result
657
+ end
658
+ end
659
+
660
+ def test_stub_lambda_block_args_6
661
+ skip_stub6
662
+
663
+ @assertion_count += 1
664
+ Thingy.stub6 :identity, lambda { |y| @tc.assert_equal :nope, y; 21+21 }, :WTF? do
665
+ result = Thingy.identity :nope do |x|
666
+ @tc.flunk "shouldn't reach this"
667
+ end
668
+ @tc.assert_equal 42, result
669
+ end
670
+ end
671
+
672
+ def test_stub_lambda_block_args_6_2
673
+ skip_stub6
674
+
675
+ @tc.assert_raises ArgumentError do
676
+ Thingy.stub6_2 :identity, lambda { |y| :__not_run__ }, :WTF? do
677
+ # doesn't matter
678
+ end
679
+ end
680
+ end
681
+
682
+ def test_stub_lambda_block_call_5
683
+ @assertion_count += 1
684
+ rs = nil
685
+ io = StringIO.new "", "w"
686
+ File.stub5 :open, lambda { |p, m, &blk| blk and blk.call io } do
687
+ File.open "foo.txt", "r" do |f|
688
+ rs = f && f.write("woot")
689
+ end
690
+ end
691
+ @tc.assert_equal 4, rs
692
+ @tc.assert_equal "woot", io.string
693
+ end
694
+
695
+ def test_stub_lambda_block_call_6
696
+ skip_stub6
697
+
698
+ @assertion_count += 1
699
+ rs = nil
700
+ io = StringIO.new "", "w"
701
+ File.stub6 :open, lambda { |p, m, &blk| blk.call io } do
702
+ File.open "foo.txt", "r" do |f|
703
+ rs = f.write("woot")
704
+ end
705
+ end
706
+ @tc.assert_equal 4, rs
707
+ @tc.assert_equal "woot", io.string
708
+ end
709
+
710
+ def test_stub_lambda_block_call_args_5
711
+ @assertion_count += 1
712
+ rs = nil
713
+ io = StringIO.new "", "w"
714
+ File.stub5(:open, lambda { |p, m, &blk| blk and blk.call io }, :WTF?) do
715
+ File.open "foo.txt", "r" do |f|
716
+ rs = f.write("woot")
717
+ end
718
+ end
719
+ @tc.assert_equal 4, rs
720
+ @tc.assert_equal "woot", io.string
721
+ end
722
+
723
+ def test_stub_lambda_block_call_args_6
724
+ skip_stub6
725
+
726
+ @assertion_count += 1
727
+ rs = nil
728
+ io = StringIO.new "", "w"
729
+ File.stub6(:open, lambda { |p, m, &blk| blk.call io }, :WTF?) do
730
+ File.open "foo.txt", "r" do |f|
731
+ rs = f.write("woot")
732
+ end
733
+ end
734
+ @tc.assert_equal 4, rs
735
+ @tc.assert_equal "woot", io.string
736
+ end
737
+
738
+ def test_stub_lambda_block_call_args_6_2
739
+ skip_stub6
740
+
741
+ @assertion_count += 2
742
+ rs = nil
743
+ io = StringIO.new "", "w"
744
+ @tc.assert_raises ArgumentError do
745
+ File.stub6_2(:open, lambda { |p, m, &blk| blk.call io }, :WTF?) do
746
+ File.open "foo.txt", "r" do |f|
747
+ rs = f.write("woot")
748
+ end
749
+ end
750
+ end
751
+ @tc.assert_nil rs
752
+ @tc.assert_equal "", io.string
753
+ end
754
+
755
+ def test_stub_value
756
+ Thread.stub :new, 42 do
757
+ result = Thread.new
758
+ @tc.assert_equal 42, result
759
+ end
760
+ end
761
+
762
+ def test_stub_value_args
763
+ Thread.stub :new, 42, :WTF? do
764
+ result = Thread.new
765
+ @tc.assert_equal 42, result
766
+ end
767
+ end
768
+
769
+ def test_stub_value_block_5
770
+ @assertion_count += 1
771
+ Thread.stub5 :new, 42 do
772
+ result = Thread.new do
773
+ @tc.assert true
774
+ end
775
+ @tc.assert_equal 42, result
776
+ end
777
+ end
778
+
779
+ def test_stub_value_block_6
780
+ skip_stub6
781
+
782
+ Thread.stub6 :new, 42 do
783
+ result = Thread.new do
784
+ @tc.flunk "shouldn't hit this"
785
+ end
786
+ @tc.assert_equal 42, result
787
+ end
788
+ end
789
+
790
+ def test_stub_value_block_args_5
791
+ @assertion_count += 2
792
+ rs = nil
793
+ io = StringIO.new "", "w"
794
+ File.stub5 :open, :value, io do
795
+ result = File.open "foo.txt", "r" do |f|
796
+ rs = f.write("woot")
797
+ end
798
+ @tc.assert_equal :value, result
799
+ end
800
+ @tc.assert_equal 4, rs
801
+ @tc.assert_equal "woot", io.string
802
+ end
803
+
804
+ def test_stub_value_block_args_5__break_if_not_passed
805
+ e = @tc.assert_raises NoMethodError do
806
+ File.stub5 :open, :return_value do # intentionally bad setup w/ no args
807
+ File.open "foo.txt", "r" do |f|
808
+ f.write "woot"
809
+ end
810
+ end
811
+ end
812
+ exp = "undefined method `write' for nil:NilClass"
813
+ assert_equal exp, e.message
814
+ end
815
+
816
+ def test_stub_value_block_args_6
817
+ skip_stub6
818
+
819
+ @assertion_count += 2
820
+ rs = nil
821
+ io = StringIO.new "", "w"
822
+ assert_deprecated do
823
+ File.stub6 :open, :value, io do
824
+ result = File.open "foo.txt", "r" do |f|
825
+ rs = f.write("woot")
826
+ end
827
+ @tc.assert_equal :value, result
828
+ end
829
+ end
830
+ @tc.assert_equal 4, rs
831
+ @tc.assert_equal "woot", io.string
832
+ end
833
+
834
+ def test_stub_value_block_args_6_2
835
+ skip_stub6
836
+
837
+ @assertion_count += 2
838
+ rs = nil
839
+ io = StringIO.new "", "w"
840
+ @tc.assert_raises ArgumentError do
841
+ File.stub6_2 :open, :value, io do
842
+ result = File.open "foo.txt", "r" do |f|
843
+ @tc.flunk "shouldn't hit this"
844
+ end
845
+ @tc.assert_equal :value, result
846
+ end
847
+ end
848
+ @tc.assert_nil rs
849
+ @tc.assert_equal "", io.string
850
+ end
851
+
852
+ def assert_deprecated re = /deprecated/
853
+ assert_output "", re do
854
+ yield
855
+ end
856
+ end
857
+
858
+ def skip_stub6
859
+ skip "not yet" unless STUB6
860
+ end
861
+ end
862
+
863
+ STUB6 = ENV["STUB6"]
864
+
865
+ if STUB6 then
866
+ require "minitest/mock6" if STUB6
867
+ else
868
+ class Object
869
+ alias stub5 stub
870
+ alias stub6 stub
871
+ end
872
+ end