spicycode-micronaut 0.0.2 → 0.0.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.
- data/Rakefile +23 -10
- data/examples/example_helper.rb +3 -3
- data/examples/lib/micronaut/behaviour_group_example.rb +175 -0
- data/examples/lib/micronaut/expectations/differs/default_example.rb +1 -2
- data/examples/lib/micronaut/expectations/extensions/object_example.rb +15 -8
- data/examples/lib/micronaut/expectations/fail_with_example.rb +2 -2
- data/examples/lib/micronaut/matchers/be_close_example.rb +42 -0
- data/examples/lib/micronaut/matchers/be_example.rb +257 -0
- data/examples/lib/micronaut/matchers/change_example.rb +329 -0
- data/examples/lib/micronaut/matchers/description_generation_example.rb +167 -0
- data/examples/lib/micronaut/matchers/eql_example.rb +29 -0
- data/examples/lib/micronaut/matchers/equal_example.rb +29 -0
- data/examples/lib/micronaut/matchers/exist_example.rb +69 -0
- data/examples/lib/micronaut/matchers/handler_example.rb +146 -0
- data/examples/lib/micronaut/matchers/has_example.rb +63 -0
- data/examples/lib/micronaut/matchers/have_example.rb +575 -0
- data/examples/lib/micronaut/matchers/include_example.rb +88 -0
- data/examples/lib/micronaut/matchers/match_example.rb +41 -0
- data/examples/lib/micronaut/matchers/matcher_methods_example.rb +66 -0
- data/examples/lib/micronaut/matchers/operator_matcher_example.rb +191 -0
- data/examples/lib/micronaut/matchers/raise_error_example.rb +315 -0
- data/examples/lib/micronaut/matchers/respond_to_example.rb +54 -0
- data/examples/lib/micronaut/matchers/satisfy_example.rb +36 -0
- data/examples/lib/micronaut/matchers/simple_matcher_example.rb +93 -0
- data/examples/lib/micronaut/matchers/throw_symbol_example.rb +96 -0
- data/examples/resources/example_classes.rb +67 -0
- data/lib/autotest/micronaut.rb +9 -4
- data/lib/micronaut/behaviour_group.rb +43 -0
- data/lib/micronaut/behaviour_group_class_methods.rb +134 -0
- data/lib/micronaut/example_runner.rb +7 -9
- data/lib/micronaut/example_world.rb +11 -7
- data/lib/micronaut/expectations/differs/default.rb +6 -15
- data/lib/micronaut/expectations/errors.rb +7 -0
- data/lib/micronaut/expectations/{object_extensions.rb → extensions/object.rb} +5 -4
- data/lib/micronaut/expectations/{string_and_symbol_extensions.rb → extensions/string_and_symbol.rb} +0 -0
- data/lib/micronaut/expectations/extensions.rb +2 -0
- data/lib/micronaut/expectations/wrap_expectation.rb +5 -0
- data/lib/micronaut/expectations.rb +5 -5
- data/lib/micronaut/extensions/kernel.rb +2 -4
- data/lib/micronaut/matchers/be_close.rb +6 -22
- data/lib/micronaut/matchers/eql.rb +7 -25
- data/lib/micronaut/matchers/equal.rb +6 -24
- data/lib/micronaut/matchers/exist.rb +8 -14
- data/lib/micronaut/matchers/has.rb +12 -28
- data/lib/micronaut/matchers/include.rb +12 -9
- data/lib/micronaut/matchers/match.rb +8 -27
- data/lib/micronaut/matchers/method_missing.rb +1 -1
- data/lib/micronaut/matchers/operator_matcher.rb +23 -46
- data/lib/micronaut/matchers/raise_error.rb +4 -8
- data/lib/micronaut/matchers/respond_to.rb +2 -1
- data/lib/micronaut/matchers/throw_symbol.rb +9 -3
- data/lib/micronaut/matchers.rb +10 -3
- data/lib/micronaut/mocking/with_mocha.rb +0 -1
- data/lib/micronaut.rb +3 -3
- metadata +31 -7
- data/examples/lib/micronaut/example_group_example.rb +0 -116
- data/lib/micronaut/example_group.rb +0 -100
- data/lib/micronaut/exceptions.rb +0 -7
@@ -0,0 +1,146 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
|
2
|
+
|
3
|
+
module ExampleExpectations
|
4
|
+
|
5
|
+
class ArbitraryMatcher
|
6
|
+
def initialize(*args, &block)
|
7
|
+
if args.last.is_a? Hash
|
8
|
+
@expected = args.last[:expected]
|
9
|
+
end
|
10
|
+
if block_given?
|
11
|
+
@expected = block.call
|
12
|
+
end
|
13
|
+
@block = block
|
14
|
+
end
|
15
|
+
|
16
|
+
def matches?(target)
|
17
|
+
@target = target
|
18
|
+
return @expected == target
|
19
|
+
end
|
20
|
+
|
21
|
+
def with(new_value)
|
22
|
+
@expected = new_value
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def failure_message
|
27
|
+
"expected #{@expected}, got #{@target}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def negative_failure_message
|
31
|
+
"expected not #{@expected}, got #{@target}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class PositiveOnlyMatcher < ArbitraryMatcher
|
36
|
+
undef negative_failure_message rescue nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def arbitrary_matcher(*args, &block)
|
40
|
+
ArbitraryMatcher.new(*args, &block)
|
41
|
+
end
|
42
|
+
|
43
|
+
def positive_only_matcher(*args, &block)
|
44
|
+
PositiveOnlyMatcher.new(*args, &block)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
describe Micronaut::Expectations::ExpectationMatcherHandler do
|
50
|
+
describe "#handle_matcher" do
|
51
|
+
it "should ask the matcher if it matches" do
|
52
|
+
matcher = mock("matcher")
|
53
|
+
actual = Object.new
|
54
|
+
matcher.expects(:matches?).with(actual).returns(true)
|
55
|
+
Micronaut::Expectations::ExpectationMatcherHandler.handle_matcher(actual, matcher)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should explain when the matcher parameter is not a matcher" do
|
59
|
+
begin
|
60
|
+
nonmatcher = mock("nonmatcher")
|
61
|
+
actual = Object.new
|
62
|
+
Micronaut::Expectations::ExpectationMatcherHandler.handle_matcher(actual, nonmatcher)
|
63
|
+
rescue Micronaut::Expectations::InvalidMatcherError => e
|
64
|
+
end
|
65
|
+
|
66
|
+
e.message.should =~ /^Expected a matcher, got /
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return the match value" do
|
70
|
+
matcher = mock("matcher")
|
71
|
+
actual = Object.new
|
72
|
+
matcher.expects(:matches?).with(actual).returns(:this_value)
|
73
|
+
Micronaut::Expectations::ExpectationMatcherHandler.handle_matcher(actual, matcher).should == :this_value
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe Micronaut::Expectations::NegativeExpectationMatcherHandler do
|
79
|
+
describe "#handle_matcher" do
|
80
|
+
it "should explain when matcher does not support should_not" do
|
81
|
+
matcher = mock("matcher")
|
82
|
+
matcher.stubs(:matches?)
|
83
|
+
actual = Object.new
|
84
|
+
lambda {
|
85
|
+
Micronaut::Expectations::NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
|
86
|
+
}.should fail_with(/Matcher does not support should_not.\n/)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should ask the matcher if it matches" do
|
90
|
+
matcher = mock("matcher")
|
91
|
+
actual = Object.new
|
92
|
+
matcher.stubs(:negative_failure_message)
|
93
|
+
matcher.expects(:matches?).with(actual).returns(false)
|
94
|
+
Micronaut::Expectations::NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should explain when the matcher parameter is not a matcher" do
|
98
|
+
begin
|
99
|
+
nonmatcher = mock("nonmatcher")
|
100
|
+
actual = Object.new
|
101
|
+
Micronaut::Expectations::NegativeExpectationMatcherHandler.handle_matcher(actual, nonmatcher)
|
102
|
+
rescue Micronaut::Expectations::InvalidMatcherError => e
|
103
|
+
end
|
104
|
+
|
105
|
+
e.message.should =~ /^Expected a matcher, got /
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
it "should return the match value" do
|
110
|
+
matcher = mock("matcher")
|
111
|
+
actual = Object.new
|
112
|
+
matcher.expects(:matches?).with(actual).returns(false)
|
113
|
+
matcher.stubs(:negative_failure_message).returns("ignore")
|
114
|
+
Micronaut::Expectations::NegativeExpectationMatcherHandler.handle_matcher(actual, matcher).should be_false
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
#
|
119
|
+
# describe Micronaut::Expectations::ExpectationMatcherHandler do
|
120
|
+
# include ExampleExpectations
|
121
|
+
#
|
122
|
+
# it "should handle submitted args" do
|
123
|
+
# 5.should arbitrary_matcher(:expected => 5)
|
124
|
+
# 5.should arbitrary_matcher(:expected => "wrong").with(5)
|
125
|
+
# lambda { 5.should arbitrary_matcher(:expected => 4) }.should fail_with("expected 4, got 5")
|
126
|
+
# lambda { 5.should arbitrary_matcher(:expected => 5).with(4) }.should fail_with("expected 4, got 5")
|
127
|
+
# 5.should_not arbitrary_matcher(:expected => 4)
|
128
|
+
# 5.should_not arbitrary_matcher(:expected => 5).with(4)
|
129
|
+
# lambda { 5.should_not arbitrary_matcher(:expected => 5) }.should fail_with("expected not 5, got 5")
|
130
|
+
# lambda { 5.should_not arbitrary_matcher(:expected => 4).with(5) }.should fail_with("expected not 5, got 5")
|
131
|
+
# end
|
132
|
+
#
|
133
|
+
# it "should handle the submitted block" do
|
134
|
+
# 5.should arbitrary_matcher { 5 }
|
135
|
+
# 5.should arbitrary_matcher(:expected => 4) { 5 }
|
136
|
+
# 5.should arbitrary_matcher(:expected => 4).with(5) { 3 }
|
137
|
+
# end
|
138
|
+
#
|
139
|
+
# it "should explain when matcher does not support should_not" do
|
140
|
+
# lambda {
|
141
|
+
# 5.should_not positive_only_matcher(:expected => 5)
|
142
|
+
# }.should fail_with(/Matcher does not support should_not.\n/)
|
143
|
+
# end
|
144
|
+
#
|
145
|
+
#
|
146
|
+
# end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
|
2
|
+
|
3
|
+
describe "should have_sym(*args)" do
|
4
|
+
it "should pass if #has_sym?(*args) returns true" do
|
5
|
+
{:a => "A"}.should have_key(:a)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should fail if #has_sym?(*args) returns false" do
|
9
|
+
lambda {
|
10
|
+
{:b => "B"}.should have_key(:a)
|
11
|
+
}.should fail_with("expected #has_key?(:a) to return true, got false")
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should fail if target does not respond to #has_sym?" do
|
15
|
+
lambda {
|
16
|
+
Object.new.should have_key(:a)
|
17
|
+
}.should raise_error(NoMethodError)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should reraise an exception thrown in #has_sym?(*args)" do
|
21
|
+
o = Object.new
|
22
|
+
def o.has_sym?(*args)
|
23
|
+
raise "Funky exception"
|
24
|
+
end
|
25
|
+
lambda { o.should have_sym(:foo) }.should raise_error("Funky exception")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "should_not have_sym(*args)" do
|
30
|
+
it "should pass if #has_sym?(*args) returns false" do
|
31
|
+
{:a => "A"}.should_not have_key(:b)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should fail if #has_sym?(*args) returns true" do
|
35
|
+
lambda {
|
36
|
+
{:a => "A"}.should_not have_key(:a)
|
37
|
+
}.should fail_with("expected #has_key?(:a) to return false, got true")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should fail if target does not respond to #has_sym?" do
|
41
|
+
lambda {
|
42
|
+
Object.new.should have_key(:a)
|
43
|
+
}.should raise_error(NoMethodError)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should reraise an exception thrown in #has_sym?(*args)" do
|
47
|
+
o = Object.new
|
48
|
+
def o.has_sym?(*args)
|
49
|
+
raise "Funky exception"
|
50
|
+
end
|
51
|
+
lambda { o.should_not have_sym(:foo) }.should raise_error("Funky exception")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "has" do
|
56
|
+
it "should work when the target implements #send" do
|
57
|
+
o = {:a => "A"}
|
58
|
+
def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
|
59
|
+
lambda {
|
60
|
+
o.should have_key(:a)
|
61
|
+
}.should_not raise_error
|
62
|
+
end
|
63
|
+
end
|