minilab 1.0.0-mswin32

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 (128) hide show
  1. data/.document +2 -0
  2. data/CHANGES +2 -0
  3. data/LICENSE +19 -0
  4. data/README +107 -0
  5. data/Rakefile +145 -0
  6. data/config/environment.rb +15 -0
  7. data/config/objects.yml +22 -0
  8. data/lib/analog_io.rb +30 -0
  9. data/lib/digital_auxport_io.rb +49 -0
  10. data/lib/digital_configuration.rb +66 -0
  11. data/lib/digital_port_io.rb +68 -0
  12. data/lib/extension/extconf.rb +4 -0
  13. data/lib/extension/minilab_hardware.c +235 -0
  14. data/lib/extension/minilab_hardware.so +0 -0
  15. data/lib/library_translator.rb +48 -0
  16. data/lib/minilab.rb +149 -0
  17. data/lib/minilab_context.rb +39 -0
  18. data/lib/result_verifier.rb +14 -0
  19. data/test/integration/analog_input_output_test.rb +43 -0
  20. data/test/integration/connect_to_hardware_test.rb +13 -0
  21. data/test/integration/digital_input_output_test.rb +114 -0
  22. data/test/integration/integration_test.rb +53 -0
  23. data/test/integration/require_minilab_test.rb +9 -0
  24. data/test/system/analog_input.test +3 -0
  25. data/test/system/analog_output.test +37 -0
  26. data/test/system/digital_port_input.test +5 -0
  27. data/test/system/digital_port_output.test +39 -0
  28. data/test/system/digital_port_read_byte.test +26 -0
  29. data/test/system/digital_screw_terminals_input.test +2 -0
  30. data/test/system/digital_screw_terminals_output.test +11 -0
  31. data/test/system/minilab_driver.rb +85 -0
  32. data/test/test_helper.rb +11 -0
  33. data/test/unit/analog_io_test.rb +87 -0
  34. data/test/unit/digital_auxport_io_test.rb +114 -0
  35. data/test/unit/digital_configuration_test.rb +136 -0
  36. data/test/unit/digital_port_io_test.rb +117 -0
  37. data/test/unit/library_translator_test.rb +100 -0
  38. data/test/unit/minilab_context_test.rb +82 -0
  39. data/test/unit/minilab_hardware_test.rb +83 -0
  40. data/test/unit/minilab_test.rb +131 -0
  41. data/test/unit/result_verifier_test.rb +33 -0
  42. data/vendor/behaviors/lib/behaviors.rb +50 -0
  43. data/vendor/behaviors/tasks/behaviors_tasks.rake +140 -0
  44. data/vendor/behaviors/test/behaviors_tasks_test.rb +71 -0
  45. data/vendor/behaviors/test/behaviors_test.rb +50 -0
  46. data/vendor/behaviors/test/tasks_test/Rakefile +16 -0
  47. data/vendor/behaviors/test/tasks_test/doc/behaviors.html +55 -0
  48. data/vendor/behaviors/test/tasks_test/lib/user.rb +2 -0
  49. data/vendor/behaviors/test/tasks_test/test/user_test.rb +17 -0
  50. data/vendor/constructor/Rakefile +44 -0
  51. data/vendor/constructor/config/environment.rb +12 -0
  52. data/vendor/constructor/lib/constructor.rb +132 -0
  53. data/vendor/constructor/test/constructor_test.rb +366 -0
  54. data/vendor/constructor/test/helper.rb +3 -0
  55. data/vendor/diy/README +26 -0
  56. data/vendor/diy/Rakefile +18 -0
  57. data/vendor/diy/lib/constructor.rb +114 -0
  58. data/vendor/diy/lib/diy.rb +329 -0
  59. data/vendor/diy/proto/context.rb +117 -0
  60. data/vendor/diy/proto/context.yml +20 -0
  61. data/vendor/diy/test/diy_test.rb +370 -0
  62. data/vendor/diy/test/files/broken_construction.yml +7 -0
  63. data/vendor/diy/test/files/cat/cat.rb +4 -0
  64. data/vendor/diy/test/files/cat/extra_conflict.yml +5 -0
  65. data/vendor/diy/test/files/cat/heritage.rb +2 -0
  66. data/vendor/diy/test/files/cat/needs_input.yml +3 -0
  67. data/vendor/diy/test/files/cat/the_cat_lineage.rb +1 -0
  68. data/vendor/diy/test/files/dog/dog_model.rb +4 -0
  69. data/vendor/diy/test/files/dog/dog_presenter.rb +4 -0
  70. data/vendor/diy/test/files/dog/dog_view.rb +2 -0
  71. data/vendor/diy/test/files/dog/file_resolver.rb +2 -0
  72. data/vendor/diy/test/files/dog/other_thing.rb +2 -0
  73. data/vendor/diy/test/files/dog/simple.yml +11 -0
  74. data/vendor/diy/test/files/donkey/foo.rb +8 -0
  75. data/vendor/diy/test/files/donkey/foo/bar/qux.rb +7 -0
  76. data/vendor/diy/test/files/fud/objects.yml +13 -0
  77. data/vendor/diy/test/files/fud/toy.rb +15 -0
  78. data/vendor/diy/test/files/gnu/objects.yml +14 -0
  79. data/vendor/diy/test/files/gnu/thinger.rb +8 -0
  80. data/vendor/diy/test/files/goat/base.rb +8 -0
  81. data/vendor/diy/test/files/goat/can.rb +6 -0
  82. data/vendor/diy/test/files/goat/goat.rb +6 -0
  83. data/vendor/diy/test/files/goat/objects.yml +12 -0
  84. data/vendor/diy/test/files/goat/paper.rb +6 -0
  85. data/vendor/diy/test/files/goat/plane.rb +8 -0
  86. data/vendor/diy/test/files/goat/shirt.rb +6 -0
  87. data/vendor/diy/test/files/goat/wings.rb +8 -0
  88. data/vendor/diy/test/files/horse/holder_thing.rb +4 -0
  89. data/vendor/diy/test/files/horse/objects.yml +7 -0
  90. data/vendor/diy/test/files/yak/core_model.rb +4 -0
  91. data/vendor/diy/test/files/yak/core_presenter.rb +4 -0
  92. data/vendor/diy/test/files/yak/core_view.rb +1 -0
  93. data/vendor/diy/test/files/yak/data_source.rb +1 -0
  94. data/vendor/diy/test/files/yak/fringe_model.rb +4 -0
  95. data/vendor/diy/test/files/yak/fringe_presenter.rb +4 -0
  96. data/vendor/diy/test/files/yak/fringe_view.rb +1 -0
  97. data/vendor/diy/test/files/yak/my_objects.yml +21 -0
  98. data/vendor/diy/test/test_helper.rb +40 -0
  99. data/vendor/hardmock/CHANGES +8 -0
  100. data/vendor/hardmock/LICENSE +7 -0
  101. data/vendor/hardmock/README +48 -0
  102. data/vendor/hardmock/Rakefile +100 -0
  103. data/vendor/hardmock/TODO +7 -0
  104. data/vendor/hardmock/config/environment.rb +12 -0
  105. data/vendor/hardmock/homepage/demo.rb +21 -0
  106. data/vendor/hardmock/homepage/hardmock_sample.png +0 -0
  107. data/vendor/hardmock/homepage/index.html +65 -0
  108. data/vendor/hardmock/init.rb +3 -0
  109. data/vendor/hardmock/lib/hardmock.rb +634 -0
  110. data/vendor/hardmock/lib/method_cleanout.rb +14 -0
  111. data/vendor/hardmock/rcov.rake +18 -0
  112. data/vendor/hardmock/test/functional/assert_error_test.rb +52 -0
  113. data/vendor/hardmock/test/functional/auto_verify_test.rb +192 -0
  114. data/vendor/hardmock/test/functional/direct_mock_usage_test.rb +396 -0
  115. data/vendor/hardmock/test/functional/hardmock_test.rb +380 -0
  116. data/vendor/hardmock/test/test_helper.rb +23 -0
  117. data/vendor/hardmock/test/unit/expectation_builder_test.rb +18 -0
  118. data/vendor/hardmock/test/unit/expector_test.rb +56 -0
  119. data/vendor/hardmock/test/unit/method_cleanout_test.rb +35 -0
  120. data/vendor/hardmock/test/unit/mock_control_test.rb +172 -0
  121. data/vendor/hardmock/test/unit/mock_test.rb +273 -0
  122. data/vendor/hardmock/test/unit/simple_expectation_test.rb +345 -0
  123. data/vendor/hardmock/test/unit/trapper_test.rb +60 -0
  124. data/vendor/hardmock/test/unit/verify_error_test.rb +34 -0
  125. data/vendor/systir/systir.rb +403 -0
  126. data/vendor/systir/test/unit/ui/xml/testrunner.rb +192 -0
  127. data/vendor/systir/test/unit/ui/xml/xmltestrunner.xslt +109 -0
  128. metadata +235 -0
@@ -0,0 +1,380 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
+ require 'hardmock'
3
+ class HardmockTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def teardown
9
+ end
10
+
11
+ #
12
+ # HELPERS
13
+ #
14
+
15
+ def assert_mock_exists(name)
16
+ assert_not_nil @all_mocks, "@all_mocks not here yet"
17
+ mo = @all_mocks[name]
18
+ assert_not_nil mo, "Mock '#{name}' not in @all_mocks"
19
+ assert_kind_of Mock, mo, "Wrong type of object, wanted a Mock"
20
+ assert_equal name.to_s, mo._name, "Mock '#{name}' had wrong name"
21
+ ivar = self.instance_variable_get("@#{name}")
22
+ assert_not_nil ivar, "Mock '#{name}' not set as ivar"
23
+ assert_same mo, ivar, "Mock '#{name}' ivar not same as instance in @all_mocks"
24
+ assert_same @main_mock_control, mo._control, "Mock '#{name}' doesn't share the main mock control"
25
+ end
26
+
27
+ #
28
+ # TESTS
29
+ #
30
+
31
+ def test_create_mock_and_create_mocks
32
+ assert_nil @main_mock_control, "@main_mock_control not expected yet"
33
+
34
+ h = create_mock :donkey
35
+ assert_equal [ :donkey ], h.keys
36
+ assert_not_nil @main_mock_control, "@main_mock_control should be here"
37
+
38
+ assert_mock_exists :donkey
39
+ assert_same @donkey, h[:donkey]
40
+
41
+ assert_equal [ :donkey ], @all_mocks.keys, "Wrong keyset for @all_mocks"
42
+
43
+ h2 = create_mocks :cat, 'dog' # symbol/string indifference at this level
44
+ assert_equal [:cat,:dog].to_set, h2.keys.to_set, "Wrong keyset for second hash"
45
+ assert_equal [:cat,:dog,:donkey].to_set, @all_mocks.keys.to_set, "@all_mocks wrong"
46
+
47
+ assert_mock_exists :cat
48
+ assert_same @cat, h2[:cat]
49
+ assert_mock_exists :dog
50
+ assert_same @dog, h2[:dog]
51
+
52
+ assert_mock_exists :donkey
53
+ end
54
+
55
+ def test_expect
56
+ assert_nil @order, "Should be no @order yet"
57
+ create_mock :order
58
+ assert_not_nil @order, "@order should be built"
59
+
60
+ # Setup an expectation
61
+ @order.expects.update_stuff :key1 => 'val1', :key2 => 'val2'
62
+
63
+ # Use the mock
64
+ @order.update_stuff :key1 => 'val1', :key2 => 'val2'
65
+
66
+ # Verify
67
+ verify_mocks
68
+
69
+ # See that it's ok to do it again
70
+ verify_mocks
71
+ end
72
+
73
+ def test_typical_multi_mock_use
74
+ create_mocks :order_builder, :order, :customer
75
+
76
+ @order_builder.expects.create_new_order.returns @order
77
+ @customer.expects.account_number.returns(1234)
78
+ @order.expects.account_no = 1234
79
+ @order.expects.save!
80
+
81
+ # Run "the code"
82
+ o = @order_builder.create_new_order
83
+ o.account_no = @customer.account_number
84
+ o.save!
85
+
86
+ verify_mocks
87
+ end
88
+
89
+ def test_typical_multi_mock_use_out_of_order
90
+ create_mocks :order_builder, :order, :customer
91
+
92
+ @order_builder.expects.create_new_order.returns @order
93
+ @customer.expects.account_number.returns(1234)
94
+ @order.expects.account_no = 1234
95
+ @order.expects.save!
96
+
97
+ # Run "the code"
98
+ o = @order_builder.create_new_order
99
+ err = assert_raise ExpectationError do
100
+ o.save!
101
+ end
102
+ assert_match(/wrong object/i, err.message)
103
+ assert_match(/order.save!/i, err.message)
104
+ assert_match(/customer.account_number/i, err.message)
105
+
106
+ assert_error VerifyError, /unmet expectations/i do
107
+ verify_mocks
108
+ end
109
+
110
+ # Appease the verifier
111
+ @order.account_no = 1234
112
+ @order.save!
113
+ end
114
+
115
+ class UserPresenter
116
+ def initialize(args)
117
+ view = args[:view]
118
+ model = args[:model]
119
+ model.when :data_changes do
120
+ view.user_name = model.user_name
121
+ end
122
+ view.when :user_edited do
123
+ model.user_name = view.user_name
124
+ end
125
+ end
126
+ end
127
+
128
+ def test_mvp_usage_pattern
129
+ mox = create_mocks :model, :view
130
+
131
+ data_change = @model.expects.when(:data_changes) { |evt,block| block }
132
+ user_edit = @view.expects.when(:user_edited) { |evt,block| block }
133
+
134
+ UserPresenter.new mox
135
+
136
+ # Expect user name transfer from model to view
137
+ @model.expects.user_name.returns 'Da Croz'
138
+ @view.expects.user_name = 'Da Croz'
139
+ # Trigger data change event in model
140
+ data_change.block_value.call
141
+
142
+ # Expect user name transfer from view to model
143
+ @view.expects.user_name.returns '6:8'
144
+ @model.expects.user_name = '6:8'
145
+ # Trigger edit event in view
146
+ user_edit.block_value.call
147
+
148
+ verify_mocks
149
+ end
150
+
151
+ def test_verify_mocks_repeated_anger
152
+ mox = create_mocks :model, :view
153
+ data_change = @model.expects.when(:data_changes) { |evt,block| block }
154
+ user_edit = @view.expects.when(:user_edited) { |evt,block| block }
155
+ UserPresenter.new mox
156
+
157
+ # Expect user name transfer from model to view
158
+ @model.expects.user_name.returns 'Da Croz'
159
+ @view.expects.user_name = 'Da Croz'
160
+
161
+ assert_error ExpectationError, /model.monkey_wrench/i do
162
+ @model.monkey_wrench
163
+ end
164
+
165
+ # This should raise because of unmet expectations
166
+ assert_error VerifyError, /unmet expectations/i, /user_name/i do
167
+ verify_mocks
168
+ end
169
+
170
+ # See that the non-forced verification remains quiet
171
+ assert_nothing_raised VerifyError do
172
+ verify_mocks(false)
173
+ end
174
+
175
+ # Finish meeting expectations and see good verification behavior
176
+ @view.user_name = "Da Croz"
177
+ verify_mocks
178
+
179
+ @model.expects.never_gonna_happen
180
+
181
+ assert_error VerifyError, /unmet expectations/i, /never_gonna_happen/i do
182
+ verify_mocks
183
+ end
184
+
185
+ # Appease the verifier
186
+ @model.never_gonna_happen
187
+ end
188
+
189
+ class UserPresenterBroken
190
+ def initialize(args)
191
+ view = args[:view]
192
+ model = args[:model]
193
+ model.when :data_changes do
194
+ view.user_name = model.user_name
195
+ end
196
+ # no view stuff, will break appropriately
197
+ end
198
+ end
199
+
200
+ def test_mvp_usage_with_failures_in_constructor
201
+ mox = create_mocks :model, :view
202
+
203
+ data_change = @model.expects.when(:data_changes) { |evt,block| block }
204
+ user_edit = @view.expects.when(:user_edited) { |evt,block| block }
205
+
206
+ UserPresenterBroken.new mox
207
+
208
+ err = assert_raise VerifyError do
209
+ verify_mocks
210
+ end
211
+ assert_match(/unmet expectations/i, err.message)
212
+ assert_match(/view.when\(:user_edited\)/i, err.message)
213
+
214
+ assert_error VerifyError, /unmet expectations/i do
215
+ verify_mocks
216
+ end
217
+
218
+ # Appease the verifier
219
+ @view.when(:user_edited)
220
+
221
+ end
222
+
223
+ def test_mvp_usage_pattern_with_convenience_trap
224
+ mox = create_mocks :model, :view
225
+
226
+ data_change = @model.trap.when(:data_changes)
227
+ user_edit = @view.trap.when(:user_edited)
228
+
229
+ UserPresenter.new mox
230
+
231
+ # Expect user name transfer from model to view
232
+ @model.expects.user_name.returns 'Da Croz'
233
+ @view.expects.user_name = 'Da Croz'
234
+ # Trigger data change event in model
235
+ data_change.trigger
236
+
237
+ # Expect user name transfer from view to model
238
+ @view.expects.user_name.returns '6:8'
239
+ @model.expects.user_name = '6:8'
240
+ # Trigger edit event in view
241
+ user_edit.trigger
242
+
243
+ verify_mocks
244
+ end
245
+
246
+ class Grinder
247
+ def initialize(objects)
248
+ @chute = objects[:chute]
249
+ @bucket = objects[:bucket]
250
+ @blade = objects[:blade]
251
+ end
252
+
253
+ def grind(slot)
254
+ @chute.each_bean(slot) do |bean|
255
+ @bucket << @blade.chop(bean)
256
+ end
257
+ end
258
+ end
259
+
260
+ def test_internal_iteration_usage
261
+ grinder = Grinder.new create_mocks(:blade, :chute, :bucket)
262
+
263
+ # Style 1: assertions on method args is done explicitly in block
264
+ @chute.expects.each_bean { |slot,block|
265
+ assert_equal :side_slot, slot, "Wrong slot"
266
+ block.call :bean1
267
+ block.call :bean2
268
+ }
269
+
270
+ @blade.expects.chop(:bean1).returns(:grounds1)
271
+ @bucket.expects('<<', :grounds1)
272
+
273
+ @blade.expects.chop(:bean2).returns(:grounds2)
274
+ @bucket.expects('<<', :grounds2)
275
+
276
+ # Run "the code"
277
+ grinder.grind(:side_slot)
278
+
279
+ verify_mocks
280
+
281
+ # Style 2: assertions on method arguments done implicitly in the expectation code
282
+ @chute.expects.each_bean(:main_slot) { |slot,block|
283
+ block.call :bean3
284
+ }
285
+ @blade.expects.chop(:bean3).returns(:grounds3)
286
+ @bucket.expects('<<', :grounds3)
287
+ grinder.grind :main_slot
288
+ verify_mocks
289
+ end
290
+
291
+ def test_internal_iteration_using_yield
292
+ grinder = Grinder.new create_mocks(:blade, :chute, :bucket)
293
+
294
+ @chute.expects.each_bean(:side_slot).yields :bean1, :bean2
295
+
296
+ @blade.expects.chop(:bean1).returns(:grounds1)
297
+ @bucket.expects('<<', :grounds1)
298
+
299
+ @blade.expects.chop(:bean2).returns(:grounds2)
300
+ @bucket.expects('<<', :grounds2)
301
+
302
+ grinder.grind :side_slot
303
+
304
+ verify_mocks
305
+ end
306
+
307
+ class HurtLocker
308
+ attr_reader :caught
309
+ def initialize(opts)
310
+ @locker = opts[:locker]
311
+ @store = opts[:store]
312
+ end
313
+
314
+ def do_the_thing(area,data)
315
+ @locker.with_lock(area) do
316
+ @store.eat(data)
317
+ end
318
+ rescue => oops
319
+ @caught = oops
320
+ end
321
+ end
322
+
323
+ def test_internal_locking_scenario
324
+ hurt = HurtLocker.new create_mocks(:locker, :store)
325
+
326
+ @locker.expects.with_lock(:main).yields
327
+ @store.expects.eat("some info")
328
+
329
+ hurt.do_the_thing(:main, "some info")
330
+
331
+ verify_mocks
332
+ end
333
+
334
+ def test_internal_locking_scenario_with_inner_error
335
+ hurt = HurtLocker.new create_mocks(:locker, :store)
336
+ err = StandardError.new('fmshooop')
337
+ @locker.expects.with_lock(:main).yields
338
+ @store.expects.eat("some info").raises(err)
339
+
340
+ hurt.do_the_thing(:main, "some info")
341
+
342
+ assert_same err, hurt.caught, "Expected that error to be handled internally"
343
+ verify_mocks
344
+ end
345
+
346
+ def test_returning_false_actually_returns_false_and_not_nil
347
+ create_mock :car
348
+ @car.expects.ignition_on?.returns(true)
349
+ assert_equal true, @car.ignition_on?, "Should be true"
350
+ @car.expects.ignition_on?.returns(false)
351
+ assert_equal false, @car.ignition_on?, "Should be false"
352
+ end
353
+
354
+ def test_should_be_able_to_mock_some_methods_inherited_from_object
355
+ target_methods = %w|id clone display dup eql? ==|
356
+ create_mock :foo
357
+ target_methods.each do |m|
358
+ eval %{@foo.expects(m, "some stuff")}
359
+ eval %{@foo.#{m} "some stuff"}
360
+ end
361
+ end
362
+
363
+ def test_should_support_expect_as_an_alias_for_expects
364
+ create_mock :foo
365
+ @foo.expect.boomboom
366
+ @foo.boomboom
367
+ verify_mocks
368
+ end
369
+
370
+ def test_should_not_raise_expectation_errors_for_some_methods_defined_on_object
371
+ create_mock :foo
372
+ @foo.method(:inspect)
373
+ @foo.inspect
374
+ @foo.to_s
375
+ @foo.instance_variables
376
+ @foo.instance_eval("")
377
+ verify_mocks
378
+ end
379
+ end
380
+
@@ -0,0 +1,23 @@
1
+ here = File.expand_path(File.dirname(__FILE__))
2
+ $: << here
3
+
4
+ require "#{here}/../config/environment"
5
+ require 'test/unit'
6
+ require 'fileutils'
7
+ require 'logger'
8
+ require 'find'
9
+ require 'yaml'
10
+ require 'set'
11
+ require 'ostruct'
12
+
13
+ class Test::Unit::TestCase
14
+ include FileUtils
15
+
16
+ def poll(time_limit)
17
+ (time_limit * 10).to_i.times do
18
+ return true if yield
19
+ sleep 0.1
20
+ end
21
+ return false
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
+ require 'hardmock'
3
+
4
+ class ExpectationBuilderTest < Test::Unit::TestCase
5
+
6
+ def test_build_expectation
7
+ builder = ExpectationBuilder.new
8
+
9
+ ex = builder.build_expectation( :stuff => 'inside' )
10
+ assert_not_nil ex, "Didn't build an expectation"
11
+ assert_kind_of SimpleExpectation, ex, "Wrong type!"
12
+
13
+ # Shhhh... fragile, yes, whatever. The functional tests do the
14
+ # real testing of this anyway
15
+ assert_equal({:stuff => 'inside'}, ex.instance_variable_get('@options'), "Hash not sent to SimpleExpectation constructor")
16
+ end
17
+
18
+ end
@@ -0,0 +1,56 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
+ require 'hardmock'
3
+
4
+ class ExpectorTest < Test::Unit::TestCase
5
+
6
+ class MyControl
7
+ attr_reader :added
8
+ def add_expectation(expectation)
9
+ @added ||= []
10
+ @added << expectation
11
+ end
12
+ end
13
+
14
+ class ExpBuilder
15
+ attr_reader :options
16
+ def build_expectation(options)
17
+ @options = options
18
+ "dummy expectation"
19
+ end
20
+ end
21
+
22
+ def try_it_with(method_name)
23
+ mock = Object.new
24
+ mock_control = MyControl.new
25
+ builder = ExpBuilder.new
26
+
27
+ exp = Expector.new(mock, mock_control, builder)
28
+ output = exp.send(method_name,:with, 1, 'sauce')
29
+
30
+ assert_same mock, builder.options[:mock]
31
+ assert_equal method_name, builder.options[:method].to_s
32
+ assert_equal [:with,1,'sauce'], builder.options[:arguments]
33
+ assert_nil builder.options[:block]
34
+ assert_equal [ "dummy expectation" ], mock_control.added,
35
+ "Wrong expectation added to control"
36
+
37
+ assert_equal "dummy expectation", output, "Expectation should have been returned"
38
+ end
39
+
40
+ #
41
+ # TESTS
42
+ #
43
+ def test_method_missing
44
+ try_it_with 'wonder_bread'
45
+ try_it_with 'whatever'
46
+ end
47
+
48
+ def test_methods_that_wont_trigger_method_missing
49
+ mock = Object.new
50
+ mock_control = MyControl.new
51
+ builder = ExpBuilder.new
52
+
53
+ exp = Expector.new(mock, mock_control, builder)
54
+ assert_equal mock, exp.instance_eval("@mock")
55
+ end
56
+ end