muack 0.5.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.
@@ -0,0 +1,77 @@
1
+
2
+ require 'muack/test'
3
+
4
+ describe Muack::Proxy do
5
+ describe 'Muack.verify==true' do
6
+ after do
7
+ Muack.verify.should.eq true
8
+ Muack::EnsureReset.call
9
+ end
10
+
11
+ should 'proxy with regular method' do
12
+ mock_proxy(Str).reverse
13
+ Str.reverse.should.eq 'ooM'
14
+ end
15
+
16
+ should 'proxy multiple times' do
17
+ 2.times{ mock_proxy(Str).reverse }
18
+ 2.times{ Str.reverse.should.eq 'ooM' }
19
+ end
20
+
21
+ should 'proxy multiple times with super method' do
22
+ 2.times{ mock_proxy(Str).class }
23
+ 2.times{ Str.class.should.eq String }
24
+ end
25
+
26
+ should 'proxy and call the block' do
27
+ mock_proxy(Obj).method_missing(:inspect){ |str| str.reverse }
28
+ Obj.inspect.should.eq 'jbo'
29
+ end
30
+
31
+ should 'proxy and call the block with super' do
32
+ mock_proxy(Str).class{ |k| k.name.reverse }
33
+ Str.class.should.eq 'gnirtS'
34
+ end
35
+
36
+ should 'mock_proxy and call, mock_proxy and call' do
37
+ mock_proxy(Obj).class{ |k| k.name.reverse }
38
+ Obj.class.should.eq 'tcejbO'
39
+ mock_proxy(Obj).class{ |k| k.name.upcase }
40
+ Obj.class.should.eq 'OBJECT'
41
+ end
42
+
43
+ should 'stub_proxy and call, stub_proxy and call' do
44
+ stub_proxy(Obj).kind_of?(Object){ |b| !b }
45
+ Obj.kind_of?(Object).should.eq false
46
+ stub_proxy(Obj).kind_of?(String){ |b| b.to_s }
47
+ Obj.kind_of?(String).should.eq 'false'
48
+ end
49
+
50
+ should 'stub_proxy with any times' do
51
+ stub_proxy(Obj).class{ |k| k.name.downcase }
52
+ 3.times{ Obj.class.should.eq 'object' }
53
+ end
54
+ end
55
+
56
+ describe 'Muack.verify==false' do
57
+ after do
58
+ Muack.reset
59
+ Muack::EnsureReset.call
60
+ end
61
+
62
+ should 'raise Muack::Expected error if passing unexpected argument' do
63
+ mock_proxy(Str).reverse
64
+ Str.reverse.should.eq 'ooM'
65
+ begin
66
+ Str.reverse
67
+ 'never'.should.eq 'reach'
68
+ rescue Muack::Expected => e
69
+ e.expected .should.eq '"Moo".reverse()'
70
+ e.expected_times.should.eq 1
71
+ e.actual_times .should.eq 2
72
+ e.message .should.eq "\nExpected: \"Moo\".reverse()\n " \
73
+ "called 1 times\n but was 2 times."
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,16 @@
1
+
2
+ require 'bacon'
3
+ require 'muack'
4
+
5
+ include Muack::API
6
+
7
+ describe 'Hello' do
8
+ before{ Muack.reset }
9
+ after { Muack.verify }
10
+
11
+ should 'say world!' do
12
+ str = 'Hello'
13
+ mock(str).say('!'){ |arg| "World#{arg}" }
14
+ str.say('!').should.equal 'World!'
15
+ end
16
+ end
@@ -0,0 +1,200 @@
1
+
2
+ require 'muack/test'
3
+
4
+ describe Muack::Satisfy do
5
+ describe Muack::IsA do
6
+ should 'have human readable to_s and inspect' do
7
+ matcher = is_a(String)
8
+ expected = 'Muack::API.is_a(String)'
9
+ matcher.to_s .should.eq expected
10
+ matcher.inspect.should.eq expected
11
+ end
12
+
13
+ should 'satisfy' do
14
+ mock(Str).say(is_a(String)){ |arg| arg.reverse }
15
+ Str.say('Foo').should.eq 'ooF'
16
+ Muack.verify.should.eq true
17
+ Muack::EnsureReset.call
18
+ end
19
+
20
+ should 'raise Muack::Unexpected error if passing unexpected argument' do
21
+ mock(Obj).say(is_a(Array)){ 'boo' }
22
+ begin
23
+ Obj.say(false)
24
+ 'never'.should.eq 'reach'
25
+ rescue Muack::Unexpected => e
26
+ e.expected.should.eq 'obj.say(Muack::API.is_a(Array))'
27
+ e.was .should.eq 'obj.say(false)'
28
+ e.message .should.eq "\nExpected: #{e.expected}\n but was: #{e.was}"
29
+ ensure
30
+ Muack.reset
31
+ Muack::EnsureReset.call
32
+ end
33
+ end
34
+ end
35
+
36
+ describe Muack::Anything do
37
+ should 'have human readable to_s and inspect' do
38
+ matcher = anything
39
+ expected = 'Muack::API.anything()'
40
+ matcher.to_s .should.eq expected
41
+ matcher.inspect.should.eq expected
42
+ end
43
+
44
+ should 'satisfy' do
45
+ mock(Str).say(anything){ |arg| arg*2 }
46
+ Str.say(5).should.eq 10
47
+ Muack.verify.should.eq true
48
+
49
+ mock(Str).say(anything){ |arg| arg.upcase }
50
+ Str.say('b').should.eq 'B'
51
+
52
+ Muack.verify.should.eq true
53
+ Muack::EnsureReset.call
54
+ end
55
+
56
+ should 'raise Muack::Unexpected error if passing unexpected argument' do
57
+ mock(Obj).say(anything){ 'boo' }
58
+ begin
59
+ Obj.say(6, 7)
60
+ 'never'.should.eq 'reach'
61
+ rescue Muack::Unexpected => e
62
+ e.expected.should.eq 'obj.say(Muack::API.anything())'
63
+ e.was .should.eq 'obj.say(6, 7)'
64
+ e.message .should.eq "\nExpected: #{e.expected}\n but was: #{e.was}"
65
+ ensure
66
+ Muack.reset
67
+ Muack::EnsureReset.call
68
+ end
69
+ end
70
+ end
71
+
72
+ describe Muack::Match do
73
+ should 'have human readable to_s and inspect' do
74
+ matcher = match(/\w/)
75
+ expected = 'Muack::API.match(/\w/)'
76
+ matcher.to_s .should.eq expected
77
+ matcher.inspect.should.eq expected
78
+ end
79
+
80
+ should 'satisfy' do
81
+ mock(Str).say(match(/\w/)){ |arg| arg }
82
+ Str.say('aa').should.eq 'aa'
83
+ Muack.verify.should.eq true
84
+ Muack::EnsureReset.call
85
+ end
86
+
87
+ should 'raise Muack::Unexpected error if passing unexpected argument' do
88
+ mock(Obj).say(match(/\w/)){ 'boo' }
89
+ begin
90
+ Obj.say('!')
91
+ 'never'.should.eq 'reach'
92
+ rescue Muack::Unexpected => e
93
+ e.expected.should.eq 'obj.say(Muack::API.match(/\w/))'
94
+ e.was .should.eq 'obj.say("!")'
95
+ e.message .should.eq "\nExpected: #{e.expected}\n but was: #{e.was}"
96
+ ensure
97
+ Muack.reset
98
+ Muack::EnsureReset.call
99
+ end
100
+ end
101
+ end
102
+
103
+ describe Muack::HashIncluding do
104
+ should 'have human readable to_s and inspect' do
105
+ matcher = hash_including(:b => 2)
106
+ expected = 'Muack::API.hash_including({:b=>2})'
107
+ matcher.to_s .should.eq expected
108
+ matcher.inspect.should.eq expected
109
+ end
110
+
111
+ should 'satisfy' do
112
+ mock(Str).say(hash_including(:b => 2)){ |arg| arg[:a] }
113
+ Str.say(:a => 1, :b => 2).should.eq 1
114
+ Muack.verify.should.eq true
115
+ Muack::EnsureReset.call
116
+ end
117
+
118
+ should 'raise Muack::Unexpected error if passing unexpected argument' do
119
+ mock(Obj).say(hash_including(:b => 2)){ 'boo' }
120
+ begin
121
+ Obj.say(:a => 1)
122
+ 'never'.should.eq 'reach'
123
+ rescue Muack::Unexpected => e
124
+ e.expected.should.eq 'obj.say(Muack::API.hash_including({:b=>2}))'
125
+ e.was .should.eq 'obj.say({:a=>1})'
126
+ e.message .should.eq "\nExpected: #{e.expected}\n but was: #{e.was}"
127
+ ensure
128
+ Muack.reset
129
+ Muack::EnsureReset.call
130
+ end
131
+ end
132
+ end
133
+
134
+ describe Muack::Within do
135
+ should 'have human readable to_s and inspect' do
136
+ matcher = within(0..9)
137
+ expected = 'Muack::API.within(0..9)'
138
+ matcher.to_s .should.eq expected
139
+ matcher.inspect.should.eq expected
140
+ end
141
+
142
+ should 'satisfy' do
143
+ mock(Str).say(within(0..9)){ |arg| arg*2 }
144
+ Str.say(5).should.eq 10
145
+ Muack.verify.should.eq true
146
+
147
+ mock(Str).say(within(%[a b])){ |arg| arg.upcase }
148
+ Str.say('b').should.eq 'B'
149
+
150
+ Muack.verify.should.eq true
151
+ Muack::EnsureReset.call
152
+ end
153
+
154
+ should 'raise Muack::Unexpected error if passing unexpected argument' do
155
+ mock(Obj).say(within(0..5)){ 'boo' }
156
+ begin
157
+ Obj.say(6)
158
+ 'never'.should.eq 'reach'
159
+ rescue Muack::Unexpected => e
160
+ e.expected.should.eq 'obj.say(Muack::API.within(0..5))'
161
+ e.was .should.eq 'obj.say(6)'
162
+ e.message .should.eq "\nExpected: #{e.expected}\n but was: #{e.was}"
163
+ ensure
164
+ Muack.reset
165
+ Muack::EnsureReset.call
166
+ end
167
+ end
168
+ end
169
+
170
+ describe Muack::Satisfy do
171
+ should 'have human readable to_s and inspect' do
172
+ matcher = satisfy{ |arg| arg % 2 == 0 }
173
+ expected = 'Muack::API.satisfy(#<Proc:'
174
+ matcher.to_s .should.start_with expected
175
+ matcher.inspect.should.start_with expected
176
+ end
177
+
178
+ should 'satisfy' do
179
+ mock(Str).say(satisfy{ |arg| arg % 2 == 0 }){ |arg| arg + 1 }
180
+ Str.say(14).should.eq 15
181
+ Muack.verify.should.eq true
182
+ Muack::EnsureReset.call
183
+ end
184
+
185
+ should 'raise Muack::Unexpected error if passing unexpected argument' do
186
+ mock(Obj).say(satisfy{ |arg| arg % 2 == 0 }){ 'boo' }
187
+ begin
188
+ Obj.say(1)
189
+ 'never'.should.eq 'reach'
190
+ rescue Muack::Unexpected => e
191
+ e.expected.should.start_with 'obj.say(Muack::API.satisfy(#<Proc:'
192
+ e.was .should.eq 'obj.say(1)'
193
+ e.message .should.eq "\nExpected: #{e.expected}\n but was: #{e.was}"
194
+ ensure
195
+ Muack.reset
196
+ Muack::EnsureReset.call
197
+ end
198
+ end
199
+ end
200
+ end
data/test/test_stub.rb ADDED
@@ -0,0 +1,62 @@
1
+
2
+ require 'muack/test'
3
+
4
+ describe Muack::Stub do
5
+ describe 'Muack.verify==true' do
6
+ after do
7
+ Muack.verify.should.eq true
8
+ Muack::EnsureReset.call
9
+ end
10
+
11
+ should 'stub with regular method' do
12
+ stub(Obj).say{ 'goo' }
13
+ 3.times{ Obj.say.should.eq 'goo' }
14
+ end
15
+
16
+ should 'stub with any arguments' do
17
+ stub(Str).say{ Str.sub('M', 'H') }.with_any_args
18
+ Str.say .should.eq 'Hoo'
19
+ Str.say(0) .should.eq 'Hoo'
20
+ Str.say(0, 1).should.eq 'Hoo'
21
+ Str.say(' ').should.eq 'Hoo'
22
+ end
23
+
24
+ should 'accept block form' do
25
+ stub(Obj){ |o| o.say{0}; o.saya{1} }
26
+ Obj.saya.should.eq 1
27
+ Obj.say .should.eq 0
28
+ end
29
+ end
30
+
31
+ describe 'Muack.verify==false' do
32
+ after do
33
+ Muack.reset
34
+ Muack::EnsureReset.call
35
+ end
36
+
37
+ should 'raise Muack::Unexpected error if passing unexpected argument' do
38
+ stub(Obj).say(true){ 'boo' }
39
+ begin
40
+ Obj.say(false)
41
+ 'never'.should.eq 'reach'
42
+ rescue Muack::Unexpected => e
43
+ e.expected.should.eq 'obj.say(true)'
44
+ e.was .should.eq 'obj.say(false)'
45
+ e.message .should.eq "\nExpected: #{e.expected}\n but was: #{e.was}"
46
+ end
47
+ end
48
+
49
+ should 'give all alternatives' do
50
+ stub(Obj).say(0){ 'boo' }
51
+ stub(Obj).say(1){ 'moo' }
52
+ begin
53
+ Obj.say(false)
54
+ 'never'.should.eq 'reach'
55
+ rescue Muack::Unexpected => e
56
+ e.expected.should.eq "obj.say(0)\n or: obj.say(1)"
57
+ e.was .should.eq 'obj.say(false)'
58
+ e.message .should.eq "\nExpected: #{e.expected}\n but was: #{e.was}"
59
+ end
60
+ end
61
+ end
62
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: muack
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Lin Jen-Shin (godfat)
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-24 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |-
14
+ Muack -- Yet another mocking library.
15
+
16
+ Basically it's an [RR][] clone, but much faster under heavy use.
17
+ It's 32x times faster (750s vs 23s) for running [Rib][] tests.
18
+
19
+ [RR]: https://github.com/rr/rr
20
+ [Rib]: https://github.com/godfat/rib
21
+ email:
22
+ - godfat (XD) godfat.org
23
+ executables: []
24
+ extensions: []
25
+ extra_rdoc_files: []
26
+ files:
27
+ - .gitmodules
28
+ - .travis.yml
29
+ - CHANGES.md
30
+ - Gemfile
31
+ - LICENSE
32
+ - README.md
33
+ - Rakefile
34
+ - lib/muack.rb
35
+ - lib/muack/any_instance_of.rb
36
+ - lib/muack/definition.rb
37
+ - lib/muack/failure.rb
38
+ - lib/muack/mock.rb
39
+ - lib/muack/modifier.rb
40
+ - lib/muack/proxy.rb
41
+ - lib/muack/satisfy.rb
42
+ - lib/muack/session.rb
43
+ - lib/muack/stub.rb
44
+ - lib/muack/test.rb
45
+ - lib/muack/version.rb
46
+ - muack.gemspec
47
+ - task/.gitignore
48
+ - task/gemgem.rb
49
+ - test/test_any_instance_of.rb
50
+ - test/test_mock.rb
51
+ - test/test_proxy.rb
52
+ - test/test_readme.rb
53
+ - test/test_satisfy.rb
54
+ - test/test_stub.rb
55
+ homepage: https://github.com/godfat/muack
56
+ licenses:
57
+ - Apache License 2.0
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.0.3
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Muack -- Yet another mocking library.
79
+ test_files:
80
+ - test/test_any_instance_of.rb
81
+ - test/test_mock.rb
82
+ - test/test_proxy.rb
83
+ - test/test_readme.rb
84
+ - test/test_satisfy.rb
85
+ - test/test_stub.rb