flexmock 1.3.3 → 2.0.0.rc1

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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/.autotest +3 -0
  3. data/.gitignore +14 -0
  4. data/.togglerc +7 -0
  5. data/.travis.yml +5 -0
  6. data/.yardopts +2 -0
  7. data/CHANGES +11 -0
  8. data/Gemfile +1 -4
  9. data/README.md +39 -11
  10. data/Rakefile +6 -217
  11. data/doc/examples/rspec_examples_spec.rb +244 -0
  12. data/doc/examples/test_unit_examples_test.rb +240 -0
  13. data/doc/jamis.rb +591 -0
  14. data/flexmock.gemspec +33 -0
  15. data/lib/flexmock.rb +0 -1
  16. data/lib/flexmock/composite_expectation.rb +1 -1
  17. data/lib/flexmock/core.rb +3 -7
  18. data/lib/flexmock/core_class_methods.rb +5 -1
  19. data/lib/flexmock/default_framework_adapter.rb +2 -2
  20. data/lib/flexmock/expectation.rb +29 -3
  21. data/lib/flexmock/expectation_director.rb +1 -1
  22. data/lib/flexmock/minitest.rb +13 -0
  23. data/lib/flexmock/minitest_extensions.rb +26 -0
  24. data/lib/flexmock/minitest_integration.rb +111 -0
  25. data/lib/flexmock/mock_container.rb +1 -2
  26. data/lib/flexmock/partial_mock.rb +61 -104
  27. data/lib/flexmock/recorder.rb +1 -2
  28. data/lib/flexmock/rspec.rb +6 -3
  29. data/lib/flexmock/test_unit_integration.rb +14 -0
  30. data/lib/flexmock/validators.rb +5 -4
  31. data/lib/flexmock/version.rb +1 -9
  32. data/rakelib/metrics.rake +40 -0
  33. data/rakelib/preview.rake +4 -0
  34. data/rakelib/tags.rake +18 -0
  35. data/todo.txt +20 -0
  36. metadata +61 -86
  37. data/Gemfile.lock +0 -20
  38. data/doc/examples/rspec_examples_spec.rdoc +0 -245
  39. data/doc/examples/test_unit_examples_test.rdoc +0 -241
  40. data/test/aliasing_test.rb +0 -66
  41. data/test/assert_spy_called_test.rb +0 -119
  42. data/test/base_class_test.rb +0 -71
  43. data/test/based_partials_test.rb +0 -51
  44. data/test/container_methods_test.rb +0 -118
  45. data/test/default_framework_adapter_test.rb +0 -38
  46. data/test/demeter_mocking_test.rb +0 -191
  47. data/test/deprecated_methods_test.rb +0 -225
  48. data/test/examples_from_readme_test.rb +0 -157
  49. data/test/expectation_description_test.rb +0 -80
  50. data/test/extended_should_receive_test.rb +0 -69
  51. data/test/flexmodel_test.rb +0 -54
  52. data/test/mock_builder_test.rb +0 -68
  53. data/test/naming_test.rb +0 -84
  54. data/test/new_instances_test.rb +0 -215
  55. data/test/object_extensions_test.rb +0 -25
  56. data/test/partial_mock_test.rb +0 -458
  57. data/test/record_mode_test.rb +0 -158
  58. data/test/redirect_error.rb +0 -16
  59. data/test/rspec_integration/integration_spec.rb +0 -56
  60. data/test/rspec_integration/spy_example_spec.rb +0 -207
  61. data/test/samples_test.rb +0 -283
  62. data/test/should_ignore_missing_test.rb +0 -84
  63. data/test/should_receive_test.rb +0 -1155
  64. data/test/spys_test.rb +0 -215
  65. data/test/symbol_extensions_test.rb +0 -8
  66. data/test/test_class_extensions.rb +0 -34
  67. data/test/test_setup.rb +0 -92
  68. data/test/test_unit_integration/auto_test_unit_test.rb +0 -42
  69. data/test/test_unit_integration/minitest_teardown_test.rb +0 -14
  70. data/test/tu_integration_test.rb +0 -99
  71. data/test/undefined_test.rb +0 -87
@@ -1,158 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- #---
4
- # Copyright 2003-2013 by Jim Weirich (jim.weirich@gmail.com).
5
- # All rights reserved.
6
-
7
- # Permission is granted for use, copying, modification, distribution,
8
- # and distribution of modified versions of this work as long as the
9
- # above copyright notice is included.
10
- #+++
11
-
12
- require 'test/test_setup'
13
-
14
- class TestRecordMode < Test::Unit::TestCase
15
- include FlexMock::TestCase
16
-
17
- def test_recording_mode_works
18
- mock = flexmock("mock")
19
- mock.should_expect do |recorder|
20
- recorder.f { :answer }
21
- end
22
- assert_equal :answer, mock.f
23
- end
24
-
25
- def test_arguments_are_passed_to_recording_mode_block
26
- mock = flexmock("mock")
27
- mock.should_expect do |recorder|
28
- recorder.f(:arg) do |arg|
29
- assert_equal :arg, arg
30
- :answer
31
- end
32
- end
33
- assert_equal :answer, mock.f(:arg)
34
- end
35
-
36
- def test_recording_mode_handles_multiple_returns
37
- FlexMock.use("mock") do |mock|
38
- mock.should_expect do |r|
39
- answers = [1, 2]
40
- # HACK: The following lambda is needed in Ruby 1.9 to cause
41
- # the answers to be properly bound in the following block.
42
- lambda { }
43
- r.f { answers.shift }
44
- end
45
- assert_equal 1, mock.f
46
- assert_equal 2, mock.f
47
- end
48
- end
49
-
50
- def test_recording_mode_does_not_specify_order
51
- FlexMock.use("mock") do |mock|
52
- mock.should_expect do |r|
53
- r.f { 1 }
54
- r.g { 2 }
55
- end
56
- assert_equal 2, mock.g
57
- assert_equal 1, mock.f
58
- end
59
- end
60
-
61
- def test_recording_mode_gets_block_args_too
62
- mock = flexmock("mock")
63
- mock.should_expect do |r|
64
- r.f(1, Proc) { |arg, block|
65
- assert_not_nil block
66
- block.call
67
- }
68
- end
69
-
70
- assert_equal :block_result, mock.f(1) { :block_result }
71
- end
72
-
73
- def test_recording_mode_should_validate_args_with_equals
74
- assert_mock_failure(:deep => true, :line => __LINE__+5) do
75
- FlexMock.use("mock") do |mock|
76
- mock.should_expect do |r|
77
- r.f(1)
78
- end
79
- mock.f(2)
80
- end
81
- end
82
- end
83
-
84
- def test_recording_mode_should_allow_arg_contraint_validation
85
- assert_mock_failure(:deep => true, :line => __LINE__+5) do
86
- FlexMock.use("mock") do |mock|
87
- mock.should_expect do |r|
88
- r.f(1)
89
- end
90
- mock.f(2)
91
- end
92
- end
93
- end
94
-
95
- def test_recording_mode_should_handle_multiplicity_contraints
96
- assert_mock_failure(:line => __LINE__+3) do
97
- FlexMock.use("mock") do |mock|
98
- mock.should_expect do |r|
99
- r.f { :result }.once
100
- end
101
- mock.f
102
- mock.f
103
- end
104
- end
105
- end
106
-
107
- def test_strict_record_mode_requires_exact_argument_matches
108
- assert_mock_failure(:deep => true, :line => __LINE__+6) do
109
- FlexMock.use("mock") do |mock|
110
- mock.should_expect do |rec|
111
- rec.should_be_strict
112
- rec.f(Integer)
113
- end
114
- mock.f(3)
115
- end
116
- end
117
- end
118
-
119
- def test_strict_record_mode_requires_exact_ordering
120
- assert_mock_failure(:deep => true, :line => __LINE__+8) do
121
- FlexMock.use("mock") do |mock|
122
- mock.should_expect do |rec|
123
- rec.should_be_strict
124
- rec.f(1)
125
- rec.f(2)
126
- end
127
- mock.f(2)
128
- mock.f(1)
129
- end
130
- end
131
- end
132
-
133
- def test_strict_record_mode_requires_once
134
- assert_mock_failure(:deep => true, :line => __LINE__+4) do
135
- FlexMock.use("mock") do |mock|
136
- mock.should_expect do |rec|
137
- rec.should_be_strict
138
- rec.f(1)
139
- end
140
- mock.f(1)
141
- mock.f(1)
142
- end
143
- end
144
- end
145
-
146
- def test_strict_record_mode_can_not_fail
147
- FlexMock.use("mock") do |mock|
148
- mock.should_expect do |rec|
149
- rec.should_be_strict
150
- rec.f(Integer)
151
- rec.f(2)
152
- end
153
- mock.f(Integer)
154
- mock.f(2)
155
- end
156
- end
157
-
158
- end
@@ -1,16 +0,0 @@
1
- require 'stringio'
2
-
3
- class FlexMock
4
- module RedirectError
5
- def redirect_error
6
- require 'stringio'
7
- old_err = $stderr
8
- $stderr = StringIO.new
9
- yield
10
- $stderr.string
11
- ensure
12
- $stderr = old_err
13
- end
14
- private :redirect_error
15
- end
16
- end
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- #---
4
- # Copyright 2003-2013 by Jim Weirich (jim.weirich@gmail.com).
5
- # All rights reserved.
6
-
7
- # Permission is granted for use, copying, modification, distribution,
8
- # and distribution of modified versions of this work as long as the
9
- # above copyright notice is included.
10
- #+++
11
-
12
- if defined?(RSpec)
13
- RSpec.configure do |config|
14
- config.mock_with :flexmock
15
- end
16
- else
17
- Spec::Runner.configure do |config|
18
- config.mock_with :flexmock
19
- end
20
- end
21
-
22
- describe "FlexMock in a RSpec example" do
23
- specify "should be able to create a mock" do
24
- m = flexmock()
25
- end
26
-
27
- specify "should have an error when a mock is not called" do
28
- m = flexmock("Expectation Failured")
29
- m.should_receive(:hi).with().once
30
- lambda {
31
- flexmock_verify
32
- }.should raise_error(RSpec::Expectations::ExpectationNotMetError, /\bhi\b.*incorrect.*times/i)
33
- end
34
-
35
- specify "should be able to create a stub" do
36
- s = "Hello World"
37
- flexmock(:base, s).should_receive(:downcase).with().once.and_return("hello WORLD")
38
-
39
- s.downcase.should == "hello WORLD"
40
- end
41
-
42
- specify "Should show an example failure" do
43
- lambda {
44
- 1.should == 2
45
- }.should raise_error(RSpec::Expectations::ExpectationNotMetError,
46
- /expected: 2.*got: 1/m)
47
- end
48
-
49
- specify "Should show how mocks are displayed in error messages" do
50
- m = flexmock("x")
51
- lambda {
52
- m.should == 2
53
- }.should raise_error(RSpec::Expectations::ExpectationNotMetError, /got: <FlexMock:x>/)
54
- end
55
-
56
- end
@@ -1,207 +0,0 @@
1
- require 'flexmock/rspec'
2
-
3
- RSpec.configure do |config|
4
- config.mock_with :flexmock
5
- end
6
-
7
- describe "Dog" do
8
- class Dog
9
- def wags(arg)
10
- fail "SHOULD NOT BE CALLED"
11
- end
12
-
13
- def barks
14
- fail "SHOULD NOT BE CALLED"
15
- end
16
- end
17
-
18
- let(:dog) { flexmock(:on, Dog) }
19
-
20
- context "single calls with arguments" do
21
- before do
22
- dog.wags(:tail)
23
- end
24
-
25
- it "accepts no with" do
26
- dog.should have_received(:wags)
27
- end
28
-
29
- it "accepts with restriction" do
30
- dog.should have_received(:wags).with(:tail)
31
- end
32
-
33
- it "accepts not methods called" do
34
- dog.should_not have_received(:bark)
35
- end
36
-
37
- it "rejects incorrect with restriction" do
38
- should_fail(/^expected wag\(:foot\) to be received by <FlexMock:Dog Mock>/i) do
39
- dog.should have_received(:wag).with(:foot)
40
- end
41
- end
42
-
43
- it "rejects not on correct matcher" do
44
- should_fail(/^expected wags\(:tail\) to NOT be received by <FlexMock:Dog Mock>/i) do
45
- dog.should_not have_received(:wags).with(:tail)
46
- end
47
- end
48
- end
49
-
50
- context "multiple calls with multiple arguments" do
51
- before do
52
- dog.wags(:tail)
53
- dog.wags(:tail)
54
- dog.wags(:tail)
55
- dog.wags(:head, :tail)
56
- dog.barks
57
- dog.barks
58
- end
59
-
60
- it "accepts wags(:tail) multiple times" do
61
- dog.should have_received(:wags).with(:tail).times(3)
62
- end
63
-
64
- it "rejects wags(:tail) wrong times value" do
65
- should_fail(/^expected wags\(:tail\) to be received by <FlexMock:Dog Mock>/i) do
66
- dog.should have_received(:wags).with(:tail).times(2)
67
- end
68
- end
69
-
70
- it "detects any_args" do
71
- dog.should have_received(:wags).times(4)
72
- end
73
-
74
- it "accepts once" do
75
- dog.should have_received(:wags).with(:head, :tail).once
76
- end
77
-
78
- it "rejects an incorrect once" do
79
- should_fail(/^expected wags\(:tail\) to be received by <FlexMock:Dog Mock> once/i) do
80
- dog.should have_received(:wags).with(:tail).once
81
- end
82
- end
83
-
84
- it "accepts twice" do
85
- dog.should have_received(:barks).twice
86
- end
87
-
88
- it "rejects an incorrect twice" do
89
- should_fail(/^expected wags\(:tail\) to be received by <FlexMock:Dog Mock> twice/) do
90
- dog.should have_received(:wags).with(:tail).twice
91
- end
92
- end
93
-
94
- it "accepts never" do
95
- dog.should have_received(:jump).never
96
- end
97
-
98
- it "rejects an incorrect never" do
99
- should_fail(/^expected barks\(\) to be received by <FlexMock:Dog Mock> never/i) do
100
- dog.should have_received(:barks).with().never
101
- end
102
- end
103
-
104
- it "rejects an incorrect never" do
105
- dog.should_not have_received(:jump)
106
- end
107
- end
108
-
109
- context "with additional validations" do
110
- it "accepts when correct" do
111
- dog.wags(:tail)
112
- dog.should have_received(:wags).and { |arg| arg.should == :tail }
113
- end
114
-
115
- it "rejects when incorrect" do
116
- dog.wags(:tail)
117
- should_fail(/expected: :foot.*got: :tail/im) do
118
- dog.should have_received(:wags).and { |arg| arg.should == :foot }
119
- end
120
- end
121
-
122
- it "rejects on all calls" do
123
- dog.wags(:foot)
124
- dog.wags(:foot)
125
- dog.wags(:tail)
126
- should_fail(/expected: :foot.*got: :tail/im) do
127
- dog.should have_received(:wags).and { |arg| arg.should == :foot }
128
- end
129
- end
130
-
131
- it "runs the first additional block" do
132
- dog.wags(:tail)
133
- should_fail(/expected: :foot.*got: :tail/im) do
134
- dog.should have_received(:wags).and { |args|
135
- args.should == :foot
136
- }.and { |args|
137
- args.should == :tail
138
- }
139
- end
140
- end
141
-
142
- it "runs the second additional block" do
143
- dog.wags(:tail)
144
- should_fail(/expected: :foot.*got: :tail/im) do
145
- dog.should have_received(:wags).and { |args|
146
- args.should == :tail
147
- }.and { |args|
148
- args.should == :foot
149
- }
150
- end
151
- end
152
- end
153
-
154
- context "with ordinal constraints" do
155
- it "detects the first call" do
156
- dog.wags(:tail)
157
- dog.wags(:foot)
158
- dog.should have_received(:wags).and { |arg| arg.should == :tail }.on(1)
159
- end
160
-
161
- it "detects the second call" do
162
- dog.wags(:tail)
163
- dog.wags(:foot)
164
- dog.should have_received(:wags).and { |arg| arg.should == :foot }.on(2)
165
- end
166
- end
167
-
168
- context "with blocks" do
169
- before do
170
- dog.wags { }
171
- dog.barks
172
- end
173
-
174
- it "accepts wags with a block" do
175
- dog.should have_received(:wags).with_a_block
176
- dog.should have_received(:wags)
177
- end
178
-
179
- it "accepts barks without a block" do
180
- dog.should have_received(:barks).without_a_block
181
- dog.should have_received(:barks)
182
- end
183
-
184
- it "rejects wags without a block" do
185
- should_fail(/without a block/) do
186
- dog.should have_received(:wags).without_a_block
187
- end
188
- end
189
-
190
- it "rejects barks with a block" do
191
- should_fail(/with a block/) do
192
- dog.should have_received(:barks).with_a_block
193
- end
194
- end
195
- end
196
-
197
- def should_fail(message_pattern)
198
- failed = false
199
- begin
200
- yield
201
- rescue RSpec::Expectations::ExpectationNotMetError => ex
202
- failed = true
203
- ex.message.should match(message_pattern)
204
- end
205
- RSpec::Expectations.fail_with "Expected block to fail with message #{message_pattern.inspect}, no failure detected" unless failed
206
- end
207
- end
data/test/samples_test.rb DELETED
@@ -1,283 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- #---
4
- # Copyright 2003-2013 by Jim Weirich (jim.weirich@gmail.com).
5
- # All rights reserved.
6
-
7
- # Permission is granted for use, copying, modification, distribution,
8
- # and distribution of modified versions of this work as long as the
9
- # above copyright notice is included.
10
- #+++
11
-
12
- require 'test/test_setup'
13
-
14
- # Sample FlexMock Usage.
15
-
16
- class TestSamples < Test::Unit::TestCase
17
- include FlexMock::TestCase
18
-
19
- # This is a basic example where we setup a mock object to mimic an
20
- # IO object. We know that the +count_lines+ method uses gets, so we
21
- # tell the mock object to handle +gets+ by returning successive
22
- # elements of an array (just as the real +gets+ returns successive
23
- # elements of a file.
24
- def test_file_io
25
- mock_file = flexmock("file")
26
- mock_file.should_receive(:gets).and_return("line 1", "line 2", nil)
27
- assert_equal 2, count_lines(mock_file)
28
- end
29
-
30
- # Count the number of lines in a file. Used in the test_file_io
31
- # test.
32
- def count_lines(file)
33
- n = 0
34
- while file.gets
35
- n += 1
36
- end
37
- n
38
- end
39
- end
40
-
41
-
42
- class TestUndefined < Test::Unit::TestCase
43
- include FlexMock::TestCase
44
-
45
- def test_undefined_values
46
- m = flexmock("mock")
47
- m.should_receive(:divide_by).with(0).
48
- and_return_undefined
49
- assert_equal FlexMock.undefined, m.divide_by(0)
50
- end
51
- end
52
-
53
-
54
- class TestSimple < Test::Unit::TestCase
55
- include FlexMock::TestCase
56
-
57
- def test_simple_mock
58
- m = flexmock(:pi => 3.1416, :e => 2.71)
59
- assert_equal 3.1416, m.pi
60
- assert_equal 2.71, m.e
61
- end
62
- end
63
-
64
- class TestDog < Test::Unit::TestCase
65
- include FlexMock::TestCase
66
-
67
- def test_dog_wags
68
- tail_mock = flexmock(:wag => :happy)
69
- assert_equal :happy, tail_mock.wag
70
- end
71
- end
72
-
73
- class Woofer
74
- end
75
-
76
- class Dog
77
- def initialize
78
- @woofer = Woofer.new
79
- end
80
- def bark
81
- @woofer.woof
82
- end
83
- def wag
84
- :happy
85
- end
86
- end
87
-
88
- class TestDogBarking < Test::Unit::TestCase
89
- include FlexMock::TestCase
90
-
91
- # Setup the tests by mocking the +new+ method of
92
- # Woofer and return a mock woofer.
93
- def setup
94
- @dog = Dog.new
95
- flexmock(@dog, :bark => :grrr)
96
- end
97
-
98
- def test_dog
99
- assert_equal :grrr, @dog.bark # Mocked Method
100
- assert_equal :happy, @dog.wag # Normal Method
101
- end
102
- end
103
-
104
- class TestDogBarkingWithNewInstances < Test::Unit::TestCase
105
- include FlexMock::TestCase
106
-
107
- # Setup the tests by mocking Woofer to always
108
- # return partial mocks.
109
- def setup
110
- flexmock(Woofer).new_instances.should_receive(:woof => :grrr)
111
- end
112
-
113
- def test_dog
114
- assert_equal :grrr, Dog.new.bark # All dog objects
115
- assert_equal :grrr, Dog.new.bark # are mocked.
116
- end
117
- end
118
-
119
- class TestDefaults < Test::Unit::TestCase
120
- include FlexMock::TestCase
121
-
122
- def setup
123
- @mock_dog = flexmock("Fido")
124
- @mock_dog.should_receive(:tail => :a_tail, :bark => "woof").by_default
125
- end
126
-
127
- def test_something_where_bark_must_be_called_once
128
- @mock_dog.should_receive(:bark => "bow wow").once
129
- assert_equal "bow wow", @mock_dog.bark
130
- assert_equal :a_tail, @mock_dog.tail
131
- end
132
- end
133
-
134
- class TestDemeter < Test::Unit::TestCase
135
- include FlexMock::TestCase
136
- def test_manual_mocking
137
- # Manually mocking a Law of Demeter violation
138
- cog = flexmock("cog")
139
- cog.should_receive(:turn).once.and_return(:ok)
140
- joint = flexmock("gear", :cog => cog)
141
- axle = flexmock("axle", :universal_joint => joint)
142
- chassis = flexmock("chassis", :axle => axle)
143
- car = flexmock("car", :chassis => chassis)
144
-
145
- # test code
146
- assert_equal :ok, car.chassis.axle.universal_joint.cog.turn
147
- end
148
-
149
- def test_demeter
150
- car = flexmock("car")
151
- car.should_receive( "chassis.axle.universal_joint.cog.turn" => :ok).once
152
-
153
- # Test code
154
- assert_equal :ok, car.chassis.axle.universal_joint.cog.turn
155
- end
156
-
157
- end
158
-
159
- class TestDb < Test::Unit::TestCase
160
- include FlexMock::TestCase
161
-
162
- def test_db
163
- db = flexmock('db')
164
- db.should_receive(:query).and_return([1,2,3])
165
- db.should_receive(:update).with(5).and_return(nil).once
166
-
167
- # test code
168
- assert_nil db.update(5)
169
- end
170
- end
171
-
172
-
173
- class TestDb < Test::Unit::TestCase
174
- include FlexMock::TestCase
175
-
176
- def test_query_and_update
177
- db = flexmock('db')
178
- db.should_receive(:query).and_return([1,2,3]).ordered
179
- db.should_receive(:update).and_return(nil).ordered
180
- # test code here
181
- assert_raises(assertion_failed_error) do
182
- db.update
183
- db.query
184
- end
185
- end
186
-
187
- def test_ordered_queries
188
- db = flexmock('db')
189
- db.should_receive(:startup).once.ordered
190
- db.should_receive(:query).with("CPWR").and_return(12.3).
191
- once.ordered(:queries)
192
- db.should_receive(:query).with("MSFT").and_return(10.0).
193
- once.ordered(:queries)
194
- db.should_receive(:query).with(/^....$/).and_return(3.3).
195
- at_least.once.ordered(:queries)
196
- db.should_receive(:finish).once.ordered
197
- # test code here
198
- db.startup
199
- db.query("CPWR")
200
- db.query("MSFT")
201
- db.query("asdf")
202
- db.finish
203
- end
204
-
205
- def test_ordered_queries_in_record_mode
206
- db = flexmock('db')
207
- db.should_expect do |rec|
208
- rec.startup.once.ordered
209
- rec.query("CPWR") { 12.3 }.once.ordered(:queries)
210
- rec.query("MSFT") { 10.0 }.once.ordered(:queries)
211
- rec.query(/^....$/) { 3.3 }.at_least.once.ordered(:queries)
212
- rec.finish.once.ordered
213
- end
214
- # test code here using +db+.
215
- db.startup
216
- db.query("CPWR")
217
- db.query("MSFT")
218
- db.query("asdf")
219
- db.finish
220
- end
221
-
222
- def known_good_way_to_build_xml(builder)
223
- builder.html
224
- end
225
-
226
- def new_way_to_build_xml(builder)
227
- known_good_way_to_build_xml(builder)
228
- end
229
-
230
- def test_build_xml
231
- builder = flexmock('builder')
232
- builder.should_expect do |rec|
233
- rec.should_be_strict
234
- known_good_way_to_build_xml(rec) # record the messages
235
- end
236
- new_way_to_build_xml(builder) # compare to new way
237
- end
238
-
239
- end
240
-
241
- class TestMoreSamples < Test::Unit::TestCase
242
- include FlexMock::TestCase
243
-
244
- def test_multiple_gets
245
- file = flexmock('file')
246
- file.should_receive(:gets).with_no_args.
247
- and_return("line 1\n", "line 2\n")
248
- # test code here
249
- assert_equal "line 1\n", file.gets
250
- assert_equal "line 2\n", file.gets
251
- end
252
-
253
- def test_an_important_message
254
- m = flexmock('m')
255
- m.should_receive(:an_important_message).and_return(1).once
256
- m.should_ignore_missing
257
- # test code here
258
- assert_equal 1, m.an_important_message
259
- assert_equal FlexMock.undefined, m.other
260
- end
261
-
262
- class QuoteService
263
- end
264
-
265
- class Portfolio
266
- def initialize
267
- @quote_service = QuoteService.new
268
- end
269
- def value
270
- @quote_service.quote
271
- end
272
- end
273
-
274
- def test_portfolio_value
275
- flexmock(QuoteService).new_instances do |m|
276
- m.should_receive(:quote).and_return(100)
277
- end
278
- port = Portfolio.new
279
- value = port.value # Portfolio calls QuoteService.quote
280
- assert_equal 100, value
281
- end
282
-
283
- end