grasshopper 0.4.1 → 0.4.2
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.
- data/lib/grasshopper.rb +2 -64
- data/lib/grasshopper/mock.rb +25 -0
- data/lib/grasshopper/stub.rb +38 -0
- data/test/mock_test.rb +63 -0
- data/test/{grasshopper_test.rb → stub_test.rb} +2 -61
- metadata +8 -4
data/lib/grasshopper.rb
CHANGED
@@ -1,64 +1,2 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
class Mock
|
4
|
-
include MiniTest::Assertions
|
5
|
-
|
6
|
-
def verify_next
|
7
|
-
@verify_next = true
|
8
|
-
end
|
9
|
-
|
10
|
-
def method_missing(message, *args, &block)
|
11
|
-
@messages ||= []
|
12
|
-
if @verify_next
|
13
|
-
index = @messages.index { |item| message == item[0] and item[1] == args }
|
14
|
-
assert(index, "Should have seen an invocation of #{message}")
|
15
|
-
@messages.delete_at(index || @messages.length)
|
16
|
-
else
|
17
|
-
@messages << [message, args]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.verify mock
|
22
|
-
mock.verify_next
|
23
|
-
mock
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class StubHelper
|
28
|
-
def initialize(stub, message)
|
29
|
-
@stub = stub
|
30
|
-
@message = message
|
31
|
-
end
|
32
|
-
|
33
|
-
def then_return(retval)
|
34
|
-
@stub.add_a_stub(@message, retval)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
class Stub
|
39
|
-
def initialize
|
40
|
-
@stubs = {}
|
41
|
-
end
|
42
|
-
|
43
|
-
def add_a_stub(message, retval)
|
44
|
-
@stubs[message] = retval
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.when(whatever)
|
48
|
-
StubHelper.new(@@stub, @@message)
|
49
|
-
end
|
50
|
-
|
51
|
-
def method_missing(sym, *args)
|
52
|
-
@@stub = self
|
53
|
-
@@message = [sym, args]
|
54
|
-
@stubs[[sym, args]]
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.like(stubs)
|
58
|
-
stub = Stub.new
|
59
|
-
stubs.each do |method, retval|
|
60
|
-
Stub.when(stub.send(method)).then_return(retval)
|
61
|
-
end
|
62
|
-
stub
|
63
|
-
end
|
64
|
-
end
|
1
|
+
require 'grasshopper/mock'
|
2
|
+
require 'grasshopper/stub'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'minitest/unit'
|
2
|
+
|
3
|
+
class Mock
|
4
|
+
include MiniTest::Assertions
|
5
|
+
|
6
|
+
def verify_next
|
7
|
+
@verify_next = true
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(message, *args, &block)
|
11
|
+
@messages ||= []
|
12
|
+
if @verify_next
|
13
|
+
index = @messages.index { |item| message == item[0] and item[1] == args }
|
14
|
+
assert(index, "Should have seen an invocation of #{message}")
|
15
|
+
@messages.delete_at(index || @messages.length)
|
16
|
+
else
|
17
|
+
@messages << [message, args]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.verify mock
|
22
|
+
mock.verify_next
|
23
|
+
mock
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Stub
|
2
|
+
def initialize
|
3
|
+
@stubs = {}
|
4
|
+
end
|
5
|
+
|
6
|
+
def add_a_stub(message, retval)
|
7
|
+
@stubs[message] = retval
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.when(whatever)
|
11
|
+
StubHelper.new(@@stub, @@message)
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(sym, *args)
|
15
|
+
@@stub = self
|
16
|
+
@@message = [sym, args]
|
17
|
+
@stubs[[sym, args]]
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.like(stubs)
|
21
|
+
stub = Stub.new
|
22
|
+
stubs.each do |method, retval|
|
23
|
+
Stub.when(stub.send(method)).then_return(retval)
|
24
|
+
end
|
25
|
+
stub
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class StubHelper
|
30
|
+
def initialize(stub, message)
|
31
|
+
@stub = stub
|
32
|
+
@message = message
|
33
|
+
end
|
34
|
+
|
35
|
+
def then_return(retval)
|
36
|
+
@stub.add_a_stub(@message, retval)
|
37
|
+
end
|
38
|
+
end
|
data/test/mock_test.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'grasshopper/mock'
|
3
|
+
|
4
|
+
class MockTest < MiniTest::Unit::TestCase
|
5
|
+
def test_fails_verify_if_no_such_message
|
6
|
+
mock = Mock.new
|
7
|
+
|
8
|
+
assert_raises MiniTest::Assertion do
|
9
|
+
Mock.verify(mock).never_sent
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_no_failure_if_message_was_sent
|
14
|
+
mock = Mock.new
|
15
|
+
mock.message_was_sent
|
16
|
+
Mock.verify(mock).message_was_sent
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_can_verify_number_of_invocations
|
20
|
+
mock = Mock.new
|
21
|
+
2.times { mock.message_sent_twice }
|
22
|
+
2.times { Mock.verify(mock).message_sent_twice }
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_fails_if_too_few_invocations
|
26
|
+
mock = Mock.new
|
27
|
+
mock.message_sent_once
|
28
|
+
|
29
|
+
assert_raises MiniTest::Assertion do
|
30
|
+
2.times { Mock.verify(mock).message_sent_once }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_validate_param
|
35
|
+
mock = Mock.new
|
36
|
+
mock.message_with_param("to verify")
|
37
|
+
Mock.verify(mock).message_with_param("to verify")
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_validate_two_params
|
41
|
+
mock = Mock.new
|
42
|
+
mock.message_with_params("to", "verify")
|
43
|
+
Mock.verify(mock).message_with_params("to", "verify")
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_validate_wrong_param_explodes
|
47
|
+
mock = Mock.new
|
48
|
+
mock.message_with_param("param")
|
49
|
+
|
50
|
+
assert_raises MiniTest::Assertion do
|
51
|
+
Mock.verify(mock).message_with_param("wrong param")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_validate_wrong_number_params_explodes
|
56
|
+
mock = Mock.new
|
57
|
+
mock.message_with_param("param", "two")
|
58
|
+
|
59
|
+
assert_raises MiniTest::Assertion do
|
60
|
+
Mock.verify(mock).message_with_param("param")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -1,66 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
require 'grasshopper'
|
3
|
-
|
4
|
-
class MockTest < MiniTest::Unit::TestCase
|
5
|
-
def test_fails_verify_if_no_such_message
|
6
|
-
mock = Mock.new
|
7
|
-
|
8
|
-
assert_raises MiniTest::Assertion do
|
9
|
-
Mock.verify(mock).never_sent
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_no_failure_if_message_was_sent
|
14
|
-
mock = Mock.new
|
15
|
-
mock.message_was_sent
|
16
|
-
Mock.verify(mock).message_was_sent
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_can_verify_number_of_invocations
|
20
|
-
mock = Mock.new
|
21
|
-
2.times { mock.message_sent_twice }
|
22
|
-
2.times { Mock.verify(mock).message_sent_twice }
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_fails_if_too_few_invocations
|
26
|
-
mock = Mock.new
|
27
|
-
mock.message_sent_once
|
28
|
-
|
29
|
-
assert_raises MiniTest::Assertion do
|
30
|
-
2.times { Mock.verify(mock).message_sent_once }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_validate_param
|
35
|
-
mock = Mock.new
|
36
|
-
mock.message_with_param("to verify")
|
37
|
-
Mock.verify(mock).message_with_param("to verify")
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_validate_two_params
|
41
|
-
mock = Mock.new
|
42
|
-
mock.message_with_params("to", "verify")
|
43
|
-
Mock.verify(mock).message_with_params("to", "verify")
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_validate_wrong_param_explodes
|
47
|
-
mock = Mock.new
|
48
|
-
mock.message_with_param("param")
|
49
|
-
|
50
|
-
assert_raises MiniTest::Assertion do
|
51
|
-
Mock.verify(mock).message_with_param("wrong param")
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_validate_wrong_number_params_explodes
|
56
|
-
mock = Mock.new
|
57
|
-
mock.message_with_param("param", "two")
|
58
|
-
|
59
|
-
assert_raises MiniTest::Assertion do
|
60
|
-
Mock.verify(mock).message_with_param("param")
|
61
|
-
end
|
62
|
-
end
|
2
|
+
require 'grasshopper/stub'
|
63
3
|
|
4
|
+
class StubTest < MiniTest::Unit::TestCase
|
64
5
|
def test_stub_returns_nil
|
65
6
|
assert_nil(Stub.new.unknown_method)
|
66
7
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grasshopper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -85,10 +85,13 @@ extra_rdoc_files:
|
|
85
85
|
- README.md
|
86
86
|
files:
|
87
87
|
- lib/grasshopper.rb
|
88
|
+
- lib/grasshopper/mock.rb
|
89
|
+
- lib/grasshopper/stub.rb
|
88
90
|
- LICENSE.txt
|
89
91
|
- README.md
|
90
|
-
- test/grasshopper_test.rb
|
91
92
|
- test/test_helper.rb
|
93
|
+
- test/mock_test.rb
|
94
|
+
- test/stub_test.rb
|
92
95
|
homepage: http://github.com/mattraibert/grasshopper
|
93
96
|
licenses:
|
94
97
|
- GPLv3
|
@@ -104,7 +107,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
107
|
version: '0'
|
105
108
|
segments:
|
106
109
|
- 0
|
107
|
-
hash:
|
110
|
+
hash: -2614166097439653959
|
108
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
112
|
none: false
|
110
113
|
requirements:
|
@@ -118,5 +121,6 @@ signing_key:
|
|
118
121
|
specification_version: 3
|
119
122
|
summary: A tiny mocking framework focused on the Arrange-Act-Assert test pattern
|
120
123
|
test_files:
|
121
|
-
- test/grasshopper_test.rb
|
122
124
|
- test/test_helper.rb
|
125
|
+
- test/mock_test.rb
|
126
|
+
- test/stub_test.rb
|