assert 2.16.5 → 2.18.3

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 (82) hide show
  1. checksums.yaml +7 -7
  2. data/Gemfile +3 -1
  3. data/README.md +79 -54
  4. data/assert.gemspec +6 -5
  5. data/bin/assert +4 -4
  6. data/lib/assert.rb +8 -18
  7. data/lib/assert/actual_value.rb +127 -0
  8. data/lib/assert/assert_runner.rb +7 -10
  9. data/lib/assert/assertions.rb +15 -28
  10. data/lib/assert/cli.rb +41 -57
  11. data/lib/assert/config.rb +8 -12
  12. data/lib/assert/config_helpers.rb +6 -10
  13. data/lib/assert/context.rb +30 -24
  14. data/lib/assert/context/let_dsl.rb +13 -0
  15. data/lib/assert/context/method_missing.rb +19 -0
  16. data/lib/assert/context/setup_dsl.rb +0 -4
  17. data/lib/assert/context/subject_dsl.rb +0 -4
  18. data/lib/assert/context/suite_dsl.rb +0 -4
  19. data/lib/assert/context/test_dsl.rb +5 -9
  20. data/lib/assert/context_info.rb +2 -6
  21. data/lib/assert/default_runner.rb +1 -5
  22. data/lib/assert/default_suite.rb +1 -6
  23. data/lib/assert/default_view.rb +8 -12
  24. data/lib/assert/factory.rb +1 -4
  25. data/lib/assert/file_line.rb +0 -4
  26. data/lib/assert/macro.rb +1 -4
  27. data/lib/assert/macros/methods.rb +5 -11
  28. data/lib/assert/result.rb +19 -34
  29. data/lib/assert/runner.rb +12 -11
  30. data/lib/assert/stub.rb +16 -2
  31. data/lib/assert/suite.rb +3 -7
  32. data/lib/assert/test.rb +13 -18
  33. data/lib/assert/utils.rb +8 -12
  34. data/lib/assert/version.rb +1 -1
  35. data/lib/assert/view.rb +18 -21
  36. data/lib/assert/view_helpers.rb +6 -17
  37. data/log/{.gitkeep → .keep} +0 -0
  38. data/test/helper.rb +26 -41
  39. data/test/support/factory.rb +20 -6
  40. data/test/support/inherited_stuff.rb +0 -2
  41. data/test/system/stub_tests.rb +350 -354
  42. data/test/system/test_tests.rb +119 -133
  43. data/test/unit/actual_value_tests.rb +335 -0
  44. data/test/unit/assert_tests.rb +125 -52
  45. data/test/unit/assertions/assert_block_tests.rb +34 -37
  46. data/test/unit/assertions/assert_empty_tests.rb +38 -38
  47. data/test/unit/assertions/assert_equal_tests.rb +84 -86
  48. data/test/unit/assertions/assert_file_exists_tests.rb +37 -39
  49. data/test/unit/assertions/assert_includes_tests.rb +45 -46
  50. data/test/unit/assertions/assert_instance_of_tests.rb +39 -40
  51. data/test/unit/assertions/assert_kind_of_tests.rb +39 -40
  52. data/test/unit/assertions/assert_match_tests.rb +39 -40
  53. data/test/unit/assertions/assert_nil_tests.rb +35 -38
  54. data/test/unit/assertions/assert_raises_tests.rb +58 -62
  55. data/test/unit/assertions/assert_respond_to_tests.rb +41 -42
  56. data/test/unit/assertions/assert_same_tests.rb +94 -90
  57. data/test/unit/assertions/assert_true_false_tests.rb +67 -69
  58. data/test/unit/assertions_tests.rb +17 -19
  59. data/test/unit/config_helpers_tests.rb +41 -43
  60. data/test/unit/config_tests.rb +42 -46
  61. data/test/unit/context/let_dsl_tests.rb +10 -0
  62. data/test/unit/context/setup_dsl_tests.rb +72 -91
  63. data/test/unit/context/subject_dsl_tests.rb +18 -51
  64. data/test/unit/context/suite_dsl_tests.rb +19 -23
  65. data/test/unit/context/test_dsl_tests.rb +52 -59
  66. data/test/unit/context_info_tests.rb +19 -21
  67. data/test/unit/context_tests.rb +175 -178
  68. data/test/unit/default_runner_tests.rb +4 -10
  69. data/test/unit/default_suite_tests.rb +54 -59
  70. data/test/unit/factory_tests.rb +6 -9
  71. data/test/unit/file_line_tests.rb +34 -40
  72. data/test/unit/macro_tests.rb +11 -20
  73. data/test/unit/result_tests.rb +156 -182
  74. data/test/unit/runner_tests.rb +72 -79
  75. data/test/unit/suite_tests.rb +62 -63
  76. data/test/unit/test_tests.rb +143 -147
  77. data/test/unit/utils_tests.rb +49 -62
  78. data/test/unit/view_helpers_tests.rb +67 -70
  79. data/test/unit/view_tests.rb +26 -32
  80. metadata +54 -47
  81. data/.assert.rb +0 -3
  82. data/.gitignore +0 -19
@@ -0,0 +1,335 @@
1
+ require "assert"
2
+ require "assert/actual_value"
3
+
4
+ class Assert::ActualValue
5
+ class UnitTests < Assert::Context
6
+ desc "Assert::ActualValue"
7
+ subject { unit_class }
8
+
9
+ let(:unit_class) { Assert::ActualValue }
10
+ end
11
+
12
+ class InitTests < UnitTests
13
+ desc "when init"
14
+ subject { unit_class.new(actual_value1, context: context1) }
15
+
16
+ let(:actual_value1) { Factory.string }
17
+ let(:context1) { Factory.modes_off_context }
18
+
19
+ should have_imeths :returns_true, :does_not_return_true
20
+ should have_imeths :raises, :does_not_raise
21
+ should have_imeths :is_a_kind_of, :is_not_a_kind_of
22
+ should have_imeths :is_kind_of, :is_not_kind_of
23
+ should have_imeths :is_an_instance_of, :is_not_an_instance_of
24
+ should have_imeths :is_instance_of, :is_not_instance_of
25
+ should have_imeths :responds_to, :does_not_respond_to
26
+ should have_imeths :is_the_same_as, :is_not_the_same_as
27
+ should have_imeths :equals, :does_not_equal
28
+ should have_imeths :is_equal_to, :is_not_equal_to
29
+ should have_imeths :matches, :does_not_match
30
+ should have_imeths :is_empty, :is_not_empty
31
+ should have_imeths :includes, :does_not_include
32
+ should have_imeths :is_nil, :is_not_nil
33
+ should have_imeths :is_true, :is_not_true
34
+ should have_imeths :is_false, :is_not_false
35
+ should have_imeths :is_a_file, :is_not_a_file
36
+ end
37
+
38
+ class MethodsTests < InitTests
39
+ desc "methods"
40
+
41
+ let(:args1) { Factory.integer(3).times.map { Factory.string } }
42
+ let(:capture_last_call_block) { ->(call) { @last_call = call } }
43
+
44
+ should "call to their equivalent context methods" do
45
+ assert_calls(
46
+ :assert_block,
47
+ when_calling: :returns_true,
48
+ on_value: -> {}
49
+ ) do |value, call|
50
+ assert_equal args1, call.args
51
+ assert_equal value, call.block
52
+ end
53
+
54
+ assert_calls(
55
+ :assert_not_block,
56
+ when_calling: :does_not_return_true,
57
+ on_value: -> {}
58
+ ) do |value, call|
59
+ assert_equal args1, call.args
60
+ assert_equal value, call.block
61
+ end
62
+
63
+ assert_calls(
64
+ :assert_raises,
65
+ when_calling: :raises,
66
+ on_value: -> {}
67
+ ) do |value, call|
68
+ assert_equal args1, call.args
69
+ assert_equal value, call.block
70
+ end
71
+
72
+ assert_calls(
73
+ :assert_nothing_raised,
74
+ when_calling: :does_not_raise,
75
+ on_value: -> {}
76
+ ) do |value, call|
77
+ assert_equal args1, call.args
78
+ assert_equal value, call.block
79
+ end
80
+
81
+ assert_calls(
82
+ :assert_kind_of,
83
+ when_calling: [:is_a_kind_of, String],
84
+ on_value: actual_value1
85
+ ) do |value, call|
86
+ assert_equal [String, value, *args1], call.args
87
+ end
88
+
89
+ assert_calls(
90
+ :assert_kind_of,
91
+ when_calling: [:is_kind_of, String],
92
+ on_value: actual_value1
93
+ ) do |value, call|
94
+ assert_equal [String, value, *args1], call.args
95
+ end
96
+
97
+ assert_calls(
98
+ :assert_not_kind_of,
99
+ when_calling: [:is_not_a_kind_of, String],
100
+ on_value: actual_value1
101
+ ) do |value, call|
102
+ assert_equal [String, value, *args1], call.args
103
+ end
104
+
105
+ assert_calls(
106
+ :assert_not_kind_of,
107
+ when_calling: [:is_not_kind_of, String],
108
+ on_value: actual_value1
109
+ ) do |value, call|
110
+ assert_equal [String, value, *args1], call.args
111
+ end
112
+
113
+ assert_calls(
114
+ :assert_instance_of,
115
+ when_calling: [:is_an_instance_of, String],
116
+ on_value: actual_value1
117
+ ) do |value, call|
118
+ assert_equal [String, value, *args1], call.args
119
+ end
120
+
121
+ assert_calls(
122
+ :assert_instance_of,
123
+ when_calling: [:is_instance_of, String],
124
+ on_value: actual_value1
125
+ ) do |value, call|
126
+ assert_equal [String, value, *args1], call.args
127
+ end
128
+
129
+ assert_calls(
130
+ :assert_not_instance_of,
131
+ when_calling: [:is_not_an_instance_of, String],
132
+ on_value: actual_value1
133
+ ) do |value, call|
134
+ assert_equal [String, value, *args1], call.args
135
+ end
136
+
137
+ assert_calls(
138
+ :assert_not_instance_of,
139
+ when_calling: [:is_not_instance_of, String],
140
+ on_value: actual_value1
141
+ ) do |value, call|
142
+ assert_equal [String, value, *args1], call.args
143
+ end
144
+
145
+ assert_calls(
146
+ :assert_responds_to,
147
+ when_calling: [:responds_to, :method],
148
+ on_value: actual_value1
149
+ ) do |value, call|
150
+ assert_equal [:method, value, *args1], call.args
151
+ end
152
+
153
+ assert_calls(
154
+ :assert_not_responds_to,
155
+ when_calling: [:does_not_respond_to, :method],
156
+ on_value: actual_value1
157
+ ) do |value, call|
158
+ assert_equal [:method, value, *args1], call.args
159
+ end
160
+
161
+ assert_calls(
162
+ :assert_same,
163
+ when_calling: [:is_the_same_as, "something"],
164
+ on_value: actual_value1
165
+ ) do |value, call|
166
+ assert_equal ["something", value, *args1], call.args
167
+ end
168
+
169
+ assert_calls(
170
+ :assert_not_same,
171
+ when_calling: [:is_not_the_same_as, "something"],
172
+ on_value: actual_value1
173
+ ) do |value, call|
174
+ assert_equal ["something", value, *args1], call.args
175
+ end
176
+
177
+ assert_calls(
178
+ :assert_equal,
179
+ when_calling: [:equals, "something"],
180
+ on_value: actual_value1
181
+ ) do |value, call|
182
+ assert_equal ["something", value, *args1], call.args
183
+ end
184
+
185
+ assert_calls(
186
+ :assert_equal,
187
+ when_calling: [:is_equal_to, "something"],
188
+ on_value: actual_value1
189
+ ) do |value, call|
190
+ assert_equal ["something", value, *args1], call.args
191
+ end
192
+
193
+ assert_calls(
194
+ :assert_not_equal,
195
+ when_calling: [:does_not_equal, "something"],
196
+ on_value: actual_value1
197
+ ) do |value, call|
198
+ assert_equal ["something", value, *args1], call.args
199
+ end
200
+
201
+ assert_calls(
202
+ :assert_not_equal,
203
+ when_calling: [:is_not_equal_to, "something"],
204
+ on_value: actual_value1
205
+ ) do |value, call|
206
+ assert_equal ["something", value, *args1], call.args
207
+ end
208
+
209
+ assert_calls(
210
+ :assert_match,
211
+ when_calling: [:matches, "something"],
212
+ on_value: actual_value1
213
+ ) do |value, call|
214
+ assert_equal ["something", value, *args1], call.args
215
+ end
216
+
217
+ assert_calls(
218
+ :assert_not_match,
219
+ when_calling: [:does_not_match, "something"],
220
+ on_value: actual_value1
221
+ ) do |value, call|
222
+ assert_equal ["something", value, *args1], call.args
223
+ end
224
+
225
+ assert_calls(
226
+ :assert_empty,
227
+ when_calling: :is_empty,
228
+ on_value: actual_value1
229
+ ) do |value, call|
230
+ assert_equal [value, *args1], call.args
231
+ end
232
+
233
+ assert_calls(
234
+ :assert_not_empty,
235
+ when_calling: :is_not_empty,
236
+ on_value: actual_value1
237
+ ) do |value, call|
238
+ assert_equal [value, *args1], call.args
239
+ end
240
+
241
+ assert_calls(
242
+ :assert_includes,
243
+ when_calling: [:includes, "something"],
244
+ on_value: actual_value1
245
+ ) do |value, call|
246
+ assert_equal ["something", value, *args1], call.args
247
+ end
248
+
249
+ assert_calls(
250
+ :assert_not_includes,
251
+ when_calling: [:does_not_include, "something"],
252
+ on_value: actual_value1
253
+ ) do |value, call|
254
+ assert_equal ["something", value, *args1], call.args
255
+ end
256
+
257
+ assert_calls(
258
+ :assert_nil,
259
+ when_calling: :is_nil,
260
+ on_value: actual_value1
261
+ ) do |value, call|
262
+ assert_equal [value, *args1], call.args
263
+ end
264
+
265
+ assert_calls(
266
+ :assert_not_nil,
267
+ when_calling: :is_not_nil,
268
+ on_value: actual_value1
269
+ ) do |value, call|
270
+ assert_equal [value, *args1], call.args
271
+ end
272
+
273
+ assert_calls(
274
+ :assert_true,
275
+ when_calling: :is_true,
276
+ on_value: actual_value1
277
+ ) do |value, call|
278
+ assert_equal [value, *args1], call.args
279
+ end
280
+
281
+ assert_calls(
282
+ :assert_not_true,
283
+ when_calling: :is_not_true,
284
+ on_value: actual_value1
285
+ ) do |value, call|
286
+ assert_equal [value, *args1], call.args
287
+ end
288
+
289
+ assert_calls(
290
+ :assert_false,
291
+ when_calling: :is_false,
292
+ on_value: actual_value1
293
+ ) do |value, call|
294
+ assert_equal [value, *args1], call.args
295
+ end
296
+
297
+ assert_calls(
298
+ :assert_not_false,
299
+ when_calling: :is_not_false,
300
+ on_value: actual_value1
301
+ ) do |value, call|
302
+ assert_equal [value, *args1], call.args
303
+ end
304
+
305
+ assert_calls(
306
+ :assert_file_exists,
307
+ when_calling: :is_a_file,
308
+ on_value: actual_value1
309
+ ) do |value, call|
310
+ assert_equal [value, *args1], call.args
311
+ end
312
+
313
+ assert_calls(
314
+ :assert_not_file_exists,
315
+ when_calling: :is_not_a_file,
316
+ on_value: actual_value1
317
+ ) do |value, call|
318
+ assert_equal [value, *args1], call.args
319
+ end
320
+ end
321
+
322
+ private
323
+
324
+ def assert_calls(context_method, when_calling:, on_value:)
325
+ @last_call = nil
326
+ Assert.stub_on_call(context1, context_method, &capture_last_call_block)
327
+
328
+ unit_class.new(on_value, context: context1).public_send(*[*when_calling, *args1])
329
+ yield(on_value, @last_call)
330
+
331
+ Assert.unstub(context1, context_method)
332
+ @last_call = nil
333
+ end
334
+ end
335
+ end
@@ -1,11 +1,10 @@
1
- require 'assert'
1
+ require "assert"
2
2
 
3
- require 'assert/config'
4
- require 'assert/stub'
5
- require 'much-stub'
3
+ require "assert/config"
4
+ require "assert/stub"
5
+ require "much-stub"
6
6
 
7
7
  module Assert
8
-
9
8
  class UnitTests < Assert::Context
10
9
  desc "Assert"
11
10
  subject { Assert }
@@ -14,99 +13,173 @@ module Assert
14
13
  should have_imeths :stubs, :stub, :unstub, :unstub!, :stub_send
15
14
 
16
15
  should "know its config instance" do
17
- assert_kind_of Assert::Config, subject.config
16
+ assert_that(subject.config).is_kind_of(Assert::Config)
18
17
  end
19
18
 
20
19
  should "map its view, suite and runner to its config" do
21
- assert_same subject.config.view, subject.view
22
- assert_same subject.config.suite, subject.suite
23
- assert_same subject.config.runner, subject.runner
20
+ assert_that(subject.view).is_the_same_as(subject.config.view)
21
+ assert_that(subject.suite).is_the_same_as(subject.config.suite)
22
+ assert_that(subject.runner).is_the_same_as(subject.config.runner)
24
23
  end
25
24
 
26
25
  # Note: don't really need to explicitly test the configure method as
27
26
  # nothing runs if it isn't working
28
-
29
27
  end
30
28
 
31
29
  class StubTests < UnitTests
32
- setup do
33
- @orig_value = Factory.string
34
- @stub_value = Factory.string
35
-
36
- @myclass = Class.new do
30
+ # setup do
31
+ # orig_value1 = Factory.string
32
+ # stub_value1 = Factory.string
33
+
34
+ # @myclass =
35
+ # Class.new do
36
+ # def initialize(value); @value = value; end
37
+ # def mymeth; @value; end
38
+ # end
39
+ # object1 = @myclass.new(orig_value1)
40
+ # end
41
+
42
+ let(:class1) {
43
+ Class.new do
37
44
  def initialize(value); @value = value; end
38
45
  def mymeth; @value; end
39
46
  end
40
- @myobj = @myclass.new(@orig_value)
41
- end
47
+ }
48
+ let(:object1) { class1.new(orig_value1) }
49
+ let(:orig_value1) { Factory.string }
50
+ let(:stub_value1) { Factory.string }
42
51
 
43
52
  should "build a stub" do
44
- stub1 = Assert.stub(@myobj, :mymeth)
53
+ stub1 = Assert.stub(object1, :mymeth)
54
+ assert_that(stub1).is_kind_of(MuchStub::Stub)
55
+ end
56
+
57
+ should "build a stub with an on_call block" do
58
+ my_meth_called_with = nil
59
+ stub1 =
60
+ Assert.stub_on_call(object1, :mymeth) { |call|
61
+ my_meth_called_with = call
62
+ }
63
+
64
+ object1.mymeth
45
65
  assert_kind_of MuchStub::Stub, stub1
66
+ assert_equal [], my_meth_called_with.args
46
67
  end
47
68
 
48
69
  should "lookup stubs that have been called before" do
49
- stub1 = Assert.stub(@myobj, :mymeth)
50
- stub2 = Assert.stub(@myobj, :mymeth)
51
- assert_same stub1, stub2
70
+ stub1 = Assert.stub(object1, :mymeth)
71
+ stub2 = Assert.stub(object1, :mymeth)
72
+ assert_that(stub2).is_the_same_as(stub1)
52
73
  end
53
74
 
54
75
  should "set the stub's do block if given a block" do
55
- Assert.stub(@myobj, :mymeth)
56
- assert_raises(MuchStub::NotStubbedError){ @myobj.mymeth }
57
- Assert.stub(@myobj, :mymeth){ @stub_value }
58
- assert_equal @stub_value, @myobj.mymeth
76
+ Assert.stub(object1, :mymeth)
77
+ assert_that(-> { object1.mymeth }).raises(MuchStub::NotStubbedError)
78
+ Assert.stub(object1, :mymeth){ stub_value1 }
79
+ assert_that(object1.mymeth).equals(stub_value1)
59
80
  end
60
81
 
61
82
  should "teardown stubs" do
62
- assert_equal @orig_value, @myobj.mymeth
63
- Assert.unstub(@myobj, :mymeth)
64
- assert_equal @orig_value, @myobj.mymeth
65
-
66
- assert_equal @orig_value, @myobj.mymeth
67
- Assert.stub(@myobj, :mymeth){ @stub_value }
68
- assert_equal @stub_value, @myobj.mymeth
69
- Assert.unstub(@myobj, :mymeth)
70
- assert_equal @orig_value, @myobj.mymeth
83
+ assert_that(object1.mymeth).equals(orig_value1)
84
+ Assert.unstub(object1, :mymeth)
85
+ assert_that(object1.mymeth).equals(orig_value1)
86
+
87
+ assert_that(object1.mymeth).equals(orig_value1)
88
+ Assert.stub(object1, :mymeth){ stub_value1 }
89
+ assert_that(object1.mymeth).equals(stub_value1)
90
+ Assert.unstub(object1, :mymeth)
91
+ assert_that(object1.mymeth).equals(orig_value1)
71
92
  end
72
93
 
73
94
  should "know and teardown all stubs" do
74
- assert_equal @orig_value, @myobj.mymeth
95
+ assert_that(object1.mymeth).equals(orig_value1)
75
96
 
76
- Assert.stub(@myobj, :mymeth){ @stub_value }
77
- assert_equal @stub_value, @myobj.mymeth
78
- assert_equal 1, Assert.stubs.size
97
+ Assert.stub(object1, :mymeth){ stub_value1 }
98
+ assert_that(object1.mymeth).equals(stub_value1)
99
+ assert_that(Assert.stubs.size).equals(1)
79
100
 
80
101
  Assert.unstub!
81
- assert_equal @orig_value, @myobj.mymeth
82
- assert_empty Assert.stubs
102
+ assert_that(object1.mymeth).equals(orig_value1)
103
+ assert_that(Assert.stubs).is_empty
83
104
  end
84
105
 
85
106
  should "auto-unstub any stubs on teardown" do
86
107
  context_class = ::Factory.modes_off_context_class do
87
108
  setup do
88
- Assert.stub('1', :to_s){ 'one' }
109
+ Assert.stub("1", :to_s){ "one" }
89
110
  end
90
111
  end
91
112
 
92
- context_class.run_setups('scope')
93
- assert_equal 1, Assert.stubs.size
113
+ context_class.run_setups("scope")
114
+ assert_that(Assert.stubs.size).equals(1)
94
115
 
95
- context_class.run_teardowns('scope')
96
- assert_empty Assert.stubs
116
+ context_class.run_teardowns("scope")
117
+ assert_that(Assert.stubs).is_empty
97
118
  end
98
119
 
99
120
  should "be able to call a stub's original method" do
100
- err = assert_raises(MuchStub::NotStubbedError){ Assert.stub_send(@myobj, :mymeth) }
101
- assert_includes 'not stubbed.', err.message
102
- assert_includes 'test/unit/assert_tests.rb', err.backtrace.first
121
+ err =
122
+ assert_that(-> { Assert.stub_send(object1, :mymeth) }).
123
+ raises(MuchStub::NotStubbedError)
124
+ assert_that(err.message).includes("not stubbed.")
125
+ assert_that(err.backtrace.first).includes("test/unit/assert_tests.rb")
103
126
 
104
- Assert.stub(@myobj, :mymeth){ @stub_value }
127
+ Assert.stub(object1, :mymeth){ stub_value1 }
105
128
 
106
- assert_equal @stub_value, @myobj.mymeth
107
- assert_equal @orig_value, Assert.stub_send(@myobj, :mymeth)
129
+ assert_that(object1.mymeth).equals(stub_value1)
130
+ assert_that(Assert.stub_send(object1, :mymeth)).equals(orig_value1)
108
131
  end
109
132
 
110
- end
133
+ should "be able to add a stub tap" do
134
+ my_meth_called_with = nil
135
+ Assert.stub_tap(object1, :mymeth){ |value, *args, &block|
136
+ my_meth_called_with = args
137
+ }
111
138
 
139
+ assert_that(object1.mymeth).equals(orig_value1)
140
+ assert_that(my_meth_called_with).equals([])
141
+ end
142
+
143
+ should "be able to add a stub tap with an on_call block" do
144
+ my_meth_called_with = nil
145
+ Assert.stub_tap_on_call(object1, :mymeth){ |value, call|
146
+ my_meth_called_with = call
147
+ }
148
+
149
+ assert_that(object1.mymeth).equals(orig_value1)
150
+ assert_that(my_meth_called_with.args).equals([])
151
+ end
152
+
153
+ should "be able to add a stubbed spy" do
154
+ myclass = Class.new do
155
+ def one; self; end
156
+ def two(val); self; end
157
+ def three; self; end
158
+ def ready?; false; end
159
+ end
160
+ myobj = myclass.new
161
+
162
+ spy =
163
+ Assert.stub_spy(
164
+ myobj,
165
+ :one,
166
+ :two,
167
+ :three,
168
+ ready?: true)
169
+
170
+ assert_that(myobj.one).equals(spy)
171
+ assert_that(myobj.two("a")).equals(spy)
172
+ assert_that(myobj.three).equals(spy)
173
+
174
+ assert_that(myobj.one.two("b").three.ready?).is_true
175
+
176
+ assert_that(spy).is_kind_of(MuchStub::CallSpy)
177
+ assert_that(spy.one_call_count).equals(2)
178
+ assert_that(spy.two_call_count).equals(2)
179
+ assert_that(spy.three_call_count).equals(2)
180
+ assert_that(spy.ready_predicate_call_count).equals(1)
181
+ assert_that(spy.two_last_called_with.args).equals(["b"])
182
+ assert_that(spy.ready_predicate_called?).is_true
183
+ end
184
+ end
112
185
  end