rspec 1.2.0 → 1.2.1
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/.document +4 -4
- data/{History.txt → History.rdoc} +27 -4
- data/Manifest.txt +18 -7
- data/{README.txt → README.rdoc} +0 -0
- data/Rakefile +16 -9
- data/{Ruby1.9.markdown → Ruby1.9.rdoc} +3 -3
- data/TODO.txt +0 -7
- data/Upgrade.rdoc +110 -0
- data/features/matchers/create_matcher.feature +40 -0
- data/features/matchers/create_matcher_outside_rspec.feature +39 -0
- data/features/pending/pending_examples.feature +5 -5
- data/features/step_definitions/running_rspec.rb +13 -0
- data/features/subject/explicit_subject.feature +31 -0
- data/features/subject/implicit_subject.feature +31 -0
- data/lib/spec/adapters/mock_frameworks/flexmock.rb +1 -0
- data/lib/spec/adapters/mock_frameworks/mocha.rb +1 -0
- data/lib/spec/adapters/mock_frameworks/rr.rb +1 -0
- data/lib/spec/adapters/mock_frameworks/rspec.rb +12 -10
- data/lib/spec/dsl.rb +0 -1
- data/lib/spec/dsl/main.rb +3 -3
- data/lib/spec/example.rb +4 -3
- data/lib/spec/example/example_group_factory.rb +1 -3
- data/lib/spec/example/example_group_methods.rb +22 -28
- data/lib/spec/example/example_group_proxy.rb +64 -0
- data/lib/spec/example/example_methods.rb +8 -11
- data/lib/spec/example/example_proxy.rb +42 -0
- data/lib/spec/example/shared_example_group.rb +1 -1
- data/lib/spec/example/subject.rb +14 -3
- data/lib/spec/expectations.rb +1 -1
- data/lib/spec/expectations/differs/default.rb +46 -49
- data/lib/spec/expectations/differs/load-diff-lcs.rb +12 -0
- data/lib/spec/interop/test/unit/testcase.rb +2 -2
- data/lib/spec/matchers.rb +49 -9
- data/lib/spec/matchers/be.rb +12 -15
- data/lib/spec/matchers/change.rb +1 -0
- data/lib/spec/matchers/dsl.rb +15 -0
- data/lib/spec/matchers/have.rb +9 -8
- data/lib/spec/matchers/include.rb +2 -16
- data/lib/spec/matchers/match_array.rb +2 -14
- data/lib/spec/matchers/matcher.rb +16 -11
- data/lib/spec/matchers/pretty.rb +36 -0
- data/lib/spec/matchers/raise_error.rb +9 -8
- data/lib/spec/matchers/simple_matcher.rb +1 -0
- data/lib/spec/matchers/throw_symbol.rb +1 -1
- data/lib/spec/mocks/argument_expectation.rb +2 -0
- data/lib/spec/mocks/message_expectation.rb +2 -0
- data/lib/spec/mocks/proxy.rb +9 -10
- data/lib/spec/runner.rb +1 -0
- data/lib/spec/runner/extensions/kernel.rb +9 -0
- data/lib/spec/runner/formatter/base_formatter.rb +22 -9
- data/lib/spec/runner/formatter/html_formatter.rb +2 -1
- data/lib/spec/runner/heckle_runner.rb +1 -0
- data/lib/spec/runner/option_parser.rb +4 -1
- data/lib/spec/runner/options.rb +11 -0
- data/lib/spec/runner/spec_parser.rb +15 -22
- data/lib/spec/version.rb +4 -6
- data/spec/autotest/autotest_helper.rb +6 -1
- data/spec/spec/dsl/main_spec.rb +3 -3
- data/spec/spec/example/example_group_factory_spec.rb +11 -23
- data/spec/spec/example/example_group_methods_spec.rb +45 -20
- data/spec/spec/example/example_group_proxy_spec.rb +63 -0
- data/spec/spec/example/example_group_spec.rb +15 -0
- data/spec/spec/example/example_methods_spec.rb +5 -35
- data/spec/spec/example/example_proxy_spec.rb +47 -0
- data/spec/spec/example/nested_example_group_spec.rb +3 -3
- data/spec/spec/example/shared_example_group_spec.rb +4 -4
- data/spec/spec/example/subject_spec.rb +77 -0
- data/spec/spec/matchers/be_close_spec.rb +10 -10
- data/spec/spec/matchers/be_instance_of_spec.rb +13 -8
- data/spec/spec/matchers/be_kind_of_spec.rb +10 -8
- data/spec/spec/{dsl/matchers_spec.rb → matchers/dsl_spec.rb} +4 -4
- data/spec/spec/matchers/matcher_spec.rb +53 -1
- data/spec/spec/matchers/matchers_spec.rb +2 -0
- data/spec/spec/package/bin_spec_spec.rb +4 -4
- data/spec/spec/runner/command_line_spec.rb +2 -2
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +4 -4
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +2 -2
- data/spec/spec/runner/formatter/html_formatted-1.8.4.html +1 -1
- data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +1 -1
- data/spec/spec/runner/formatter/html_formatted-1.8.5.html +1 -1
- data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +1 -1
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +1 -1
- data/spec/spec/runner/formatter/html_formatted-1.8.7.html +1 -1
- data/spec/spec/runner/formatter/html_formatted-1.9.1.html +1 -1
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +12 -11
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +2 -2
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +2 -2
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +2 -2
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +1 -1
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +1 -1
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +1 -1
- data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +1 -1
- data/spec/spec/runner/option_parser_spec.rb +20 -0
- data/spec/spec/runner/options_spec.rb +23 -1
- data/spec/spec/runner/reporter_spec.rb +20 -17
- data/spec/spec/runner/spec_parser_spec.rb +1 -1
- metadata +33 -15
- data/Upgrade.markdown +0 -63
- data/lib/spec/dsl/matchers.rb +0 -13
- data/lib/spec/example/example_description.rb +0 -15
|
@@ -34,7 +34,7 @@ module Spec
|
|
|
34
34
|
|
|
35
35
|
describe "#backtrace" do
|
|
36
36
|
it "returns the backtrace from where the example was defined" do
|
|
37
|
-
example = ExampleGroup.dup.new
|
|
37
|
+
example = ExampleGroup.dup.new ExampleProxy.new
|
|
38
38
|
example.backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}")
|
|
39
39
|
end
|
|
40
40
|
end
|
|
@@ -46,46 +46,16 @@ module Spec
|
|
|
46
46
|
|
|
47
47
|
it "sends a deprecation warning" do
|
|
48
48
|
Kernel.should_receive(:warn).with(/#implementation_backtrace.*deprecated.*#backtrace instead/m)
|
|
49
|
-
example = ExampleGroup.dup.new
|
|
49
|
+
example = ExampleGroup.dup.new ExampleProxy.new
|
|
50
50
|
example.implementation_backtrace
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
it "returns the backtrace from where the example was defined" do
|
|
54
|
-
example = ExampleGroup.dup.new
|
|
54
|
+
example = ExampleGroup.dup.new ExampleProxy.new
|
|
55
55
|
example.implementation_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}")
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
describe "#subject" do
|
|
60
|
-
before(:each) do
|
|
61
|
-
@example_group = ExampleGroupDouble
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should return an instance of the described class" do
|
|
65
|
-
group = Class.new(ExampleGroupDouble).describe(Array)
|
|
66
|
-
example = group.new("")
|
|
67
|
-
example.subject.should == []
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should return a Module" do
|
|
71
|
-
group = Class.new(ExampleGroupDouble).describe(Enumerable)
|
|
72
|
-
example = group.new("")
|
|
73
|
-
example.subject.should == Enumerable
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "should return a string" do
|
|
77
|
-
group = Class.new(ExampleGroupDouble).describe('foo')
|
|
78
|
-
example = group.new("")
|
|
79
|
-
example.subject.should == 'foo'
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should return a number" do
|
|
83
|
-
group = Class.new(ExampleGroupDouble).describe(15)
|
|
84
|
-
example = group.new("")
|
|
85
|
-
example.subject.should == 15
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
59
|
describe "#should" do
|
|
90
60
|
before(:each) do
|
|
91
61
|
@example_group = Class.new(ExampleGroupDouble)
|
|
@@ -140,14 +110,14 @@ module Spec
|
|
|
140
110
|
|
|
141
111
|
describe "#options" do
|
|
142
112
|
it "should expose the options hash" do
|
|
143
|
-
example = ExampleGroupDouble.new "name", :this => 'that' do; end
|
|
113
|
+
example = ExampleGroupDouble.new ExampleProxy.new("name", :this => 'that') do; end
|
|
144
114
|
example.options[:this].should == 'that'
|
|
145
115
|
end
|
|
146
116
|
end
|
|
147
117
|
|
|
148
118
|
describe "#set_instance_variables_from_hash" do
|
|
149
119
|
it "preserves the options" do
|
|
150
|
-
example = ExampleGroupDouble.new "name", :this => 'that' do; end
|
|
120
|
+
example = ExampleGroupDouble.new ExampleProxy.new("name", :this => 'that') do; end
|
|
151
121
|
example.set_instance_variables_from_hash({:@_options => {}})
|
|
152
122
|
example.options[:this].should == 'that'
|
|
153
123
|
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module Example
|
|
5
|
+
|
|
6
|
+
describe ExampleProxy do
|
|
7
|
+
|
|
8
|
+
describe "#description" do
|
|
9
|
+
it "provides the submitted description" do
|
|
10
|
+
proxy = ExampleProxy.new("the description")
|
|
11
|
+
proxy.description.should == "the description"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe "#update" do
|
|
16
|
+
it "updates the description" do
|
|
17
|
+
proxy = ExampleProxy.new("old description")
|
|
18
|
+
proxy.update("new description")
|
|
19
|
+
proxy.description.should == "new description"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "#options" do
|
|
24
|
+
it "provides the submitted options" do
|
|
25
|
+
proxy = ExampleProxy.new(:ignore, {:these => :options})
|
|
26
|
+
proxy.options.should == {:these => :options}
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "#backtrace (deprecated - use #location)" do
|
|
31
|
+
it "provides the location of the declaration of this group" do
|
|
32
|
+
proxy = ExampleProxy.new(:ignore, {}, "path/to/location:37")
|
|
33
|
+
proxy.backtrace.should == "path/to/location:37"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "#location" do
|
|
38
|
+
it "provides the location of the declaration of this group" do
|
|
39
|
+
proxy = ExampleProxy.new(:ignore, {}, "path/to/location:37")
|
|
40
|
+
proxy.location.should == "path/to/location:37"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -58,11 +58,11 @@ module Spec
|
|
|
58
58
|
|
|
59
59
|
describe "Nested Example Groups" do
|
|
60
60
|
describe "description options", :other_options => "other options" do
|
|
61
|
-
it "
|
|
62
|
-
self.class.options[:
|
|
61
|
+
it "includes :location" do
|
|
62
|
+
self.class.options[:location].should match(/#{__FILE__}/)
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
it "
|
|
65
|
+
it "includes any other options" do
|
|
66
66
|
self.class.options[:other_options].should == "other options"
|
|
67
67
|
end
|
|
68
68
|
end
|
|
@@ -66,12 +66,12 @@ module Spec
|
|
|
66
66
|
SharedExampleGroup.register(
|
|
67
67
|
"shared example_group",
|
|
68
68
|
:shared => true,
|
|
69
|
-
:
|
|
69
|
+
:location => "/my/spec/a/../shared.rb"
|
|
70
70
|
)
|
|
71
71
|
SharedExampleGroup.register(
|
|
72
72
|
"shared example_group",
|
|
73
73
|
:shared => true,
|
|
74
|
-
:
|
|
74
|
+
:location => "/my/spec/b/../shared.rb"
|
|
75
75
|
)
|
|
76
76
|
end
|
|
77
77
|
|
|
@@ -79,13 +79,13 @@ module Spec
|
|
|
79
79
|
SharedExampleGroup.register(
|
|
80
80
|
"shared example_group",
|
|
81
81
|
:shared => true,
|
|
82
|
-
:
|
|
82
|
+
:location => "/my/spec/a/shared.rb"
|
|
83
83
|
)
|
|
84
84
|
lambda do
|
|
85
85
|
SharedExampleGroup.register(
|
|
86
86
|
"shared example_group",
|
|
87
87
|
:shared => true,
|
|
88
|
-
:
|
|
88
|
+
:location => "/my/spec/b/shared.rb"
|
|
89
89
|
)
|
|
90
90
|
end.should raise_error(ArgumentError, /already exists/)
|
|
91
91
|
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module Example
|
|
5
|
+
describe "implicit subject" do
|
|
6
|
+
describe "with a class" do
|
|
7
|
+
it "returns an instance of the class" do
|
|
8
|
+
group = Class.new(ExampleGroupDouble).describe(Array)
|
|
9
|
+
example = group.new(ExampleProxy.new)
|
|
10
|
+
example.subject.should == []
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe "with a Module" do
|
|
15
|
+
it "returns the Module" do
|
|
16
|
+
group = Class.new(ExampleGroupDouble).describe(Enumerable)
|
|
17
|
+
example = group.new(ExampleProxy.new)
|
|
18
|
+
example.subject.should == Enumerable
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "with a string" do
|
|
23
|
+
it "return the string" do
|
|
24
|
+
group = Class.new(ExampleGroupDouble).describe('foo')
|
|
25
|
+
example = group.new(ExampleProxy.new)
|
|
26
|
+
example.subject.should == 'foo'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "with a number" do
|
|
31
|
+
it "returns the number" do
|
|
32
|
+
group = Class.new(ExampleGroupDouble).describe(15)
|
|
33
|
+
example = group.new(ExampleProxy.new)
|
|
34
|
+
example.subject.should == 15
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe "explicit subject" do
|
|
41
|
+
describe "defined in a top level group" do
|
|
42
|
+
it "replaces the implicit subject in that group" do
|
|
43
|
+
group = Class.new(ExampleGroupDouble).describe(Array)
|
|
44
|
+
group.subject { [1,2,3] }
|
|
45
|
+
example = group.new(ExampleProxy.new)
|
|
46
|
+
example.subject.should == [1,2,3]
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe "defined in a top level group" do
|
|
51
|
+
it "is available in a nested group (subclass)" do
|
|
52
|
+
klass = Class.new do
|
|
53
|
+
extend Spec::Example::Subject::ExampleGroupMethods
|
|
54
|
+
include Spec::Example::Subject::ExampleMethods
|
|
55
|
+
class << self
|
|
56
|
+
def described_class
|
|
57
|
+
Array
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
def described_class
|
|
61
|
+
self.class.described_class
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
subject {
|
|
65
|
+
[1,2,3]
|
|
66
|
+
}
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
subclass = Class.new(klass)
|
|
70
|
+
|
|
71
|
+
object = subclass.new
|
|
72
|
+
object.subject.should == [1,2,3]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
2
|
module Spec
|
|
3
3
|
module Matchers
|
|
4
|
-
describe "be_close" do
|
|
5
|
-
it "
|
|
4
|
+
describe "[actual.should] be_close(expected, delta)" do
|
|
5
|
+
it "matches when actual == expected" do
|
|
6
6
|
be_close(5.0, 0.5).matches?(5.0).should be_true
|
|
7
7
|
end
|
|
8
|
-
it "
|
|
8
|
+
it "matches when actual < (expected + delta)" do
|
|
9
9
|
be_close(5.0, 0.5).matches?(5.49).should be_true
|
|
10
10
|
end
|
|
11
|
-
it "
|
|
11
|
+
it "matches when actual > (expected - delta)" do
|
|
12
12
|
be_close(5.0, 0.5).matches?(4.51).should be_true
|
|
13
13
|
end
|
|
14
|
-
it "
|
|
14
|
+
it "does not match when actual == (expected - delta)" do
|
|
15
15
|
be_close(5.0, 0.5).matches?(4.5).should be_false
|
|
16
16
|
end
|
|
17
|
-
it "
|
|
17
|
+
it "does not match when actual < (expected - delta)" do
|
|
18
18
|
be_close(5.0, 0.5).matches?(4.49).should be_false
|
|
19
19
|
end
|
|
20
|
-
it "
|
|
20
|
+
it "does not match when actual == (expected + delta)" do
|
|
21
21
|
be_close(5.0, 0.5).matches?(5.5).should be_false
|
|
22
22
|
end
|
|
23
|
-
it "
|
|
23
|
+
it "does not match when actual > (expected + delta)" do
|
|
24
24
|
be_close(5.0, 0.5).matches?(5.51).should be_false
|
|
25
25
|
end
|
|
26
|
-
it "
|
|
26
|
+
it "provides a failure message for should" do
|
|
27
27
|
#given
|
|
28
28
|
matcher = be_close(5.0, 0.5)
|
|
29
29
|
#when
|
|
@@ -31,7 +31,7 @@ module Spec
|
|
|
31
31
|
#then
|
|
32
32
|
matcher.failure_message_for_should.should == "expected 5.0 +/- (< 0.5), got 5.51"
|
|
33
33
|
end
|
|
34
|
-
it "
|
|
34
|
+
it "provides a description" do
|
|
35
35
|
matcher = be_close(5.0, 0.5)
|
|
36
36
|
matcher.matches?(5.1)
|
|
37
37
|
matcher.description.should == "be close to 5.0 (within +- 0.5)"
|
|
@@ -3,27 +3,32 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
|
3
3
|
module Spec
|
|
4
4
|
module Matchers
|
|
5
5
|
[:be_instance_of, :be_an_instance_of].each do |method|
|
|
6
|
-
describe "#{method}" do
|
|
7
|
-
it "passes if
|
|
6
|
+
describe "actual.should #{method}(expected)" do
|
|
7
|
+
it "passes if actual is instance of expected class" do
|
|
8
8
|
5.should send(method, Fixnum)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
it "
|
|
11
|
+
it "fails if actual is instance of subclass of expected class" do
|
|
12
12
|
lambda { 5.should send(method, Numeric) }.should fail_with(%Q{expected instance of Numeric, got 5})
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
it "fails with failure message unless
|
|
15
|
+
it "fails with failure message for should unless actual is instance of expected class" do
|
|
16
16
|
lambda { "foo".should send(method, Array) }.should fail_with(%Q{expected instance of Array, got "foo"})
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
it "fails with negative failure message if object is kind of given class" do
|
|
20
|
-
lambda { "foo".should_not send(method, String) }.should fail_with(%Q{expected "foo" not to be an instance of String})
|
|
21
|
-
end
|
|
22
|
-
|
|
23
19
|
it "provides a description" do
|
|
24
20
|
Spec::Matchers::BeInstanceOf.new(Class).description.should == "be an instance of Class"
|
|
25
21
|
end
|
|
26
22
|
end
|
|
23
|
+
|
|
24
|
+
describe "actual.should_not #{method}(expected)" do
|
|
25
|
+
|
|
26
|
+
it "fails with failure message for should_not if actual is instance of expected class" do
|
|
27
|
+
lambda { "foo".should_not send(method, String) }.should fail_with(%Q{expected "foo" not to be an instance of String})
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
27
32
|
end
|
|
28
33
|
end
|
|
29
34
|
end
|
|
@@ -3,27 +3,29 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
|
3
3
|
module Spec
|
|
4
4
|
module Matchers
|
|
5
5
|
[:be_kind_of, :be_a_kind_of].each do |method|
|
|
6
|
-
describe "#{method}" do
|
|
7
|
-
it "passes if
|
|
6
|
+
describe "actual.should #{method}(expected)" do
|
|
7
|
+
it "passes if actual is instance of expected class" do
|
|
8
8
|
5.should send(method, Fixnum)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
it "passes if
|
|
11
|
+
it "passes if actual is instance of subclass of expected class" do
|
|
12
12
|
5.should send(method, Numeric)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
it "fails with failure message unless
|
|
15
|
+
it "fails with failure message for should unless actual is kind of expected class" do
|
|
16
16
|
lambda { "foo".should send(method, Array) }.should fail_with(%Q{expected kind of Array, got "foo"})
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
it "fails with negative failure message if object is kind of given class" do
|
|
20
|
-
lambda { "foo".should_not send(method, String) }.should fail_with(%Q{expected "foo" not to be a kind of String})
|
|
21
|
-
end
|
|
22
|
-
|
|
23
19
|
it "provides a description" do
|
|
24
20
|
Spec::Matchers::BeKindOf.new(Class).description.should == "be a kind of Class"
|
|
25
21
|
end
|
|
26
22
|
end
|
|
23
|
+
|
|
24
|
+
describe "actual.should_not #{method}(expected)" do
|
|
25
|
+
it "fails with failure message for should_not if actual is kind of expected class" do
|
|
26
|
+
lambda { "foo".should_not send(method, String) }.should fail_with(%Q{expected "foo" not to be a kind of String})
|
|
27
|
+
end
|
|
28
|
+
end
|
|
27
29
|
end
|
|
28
30
|
end
|
|
29
31
|
end
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
2
|
|
|
3
3
|
module Spec
|
|
4
|
-
module
|
|
5
|
-
module
|
|
4
|
+
module Matchers
|
|
5
|
+
module DSL
|
|
6
6
|
describe "#create" do
|
|
7
7
|
it "creates a method that initializes a new matcher with the submitted name and expected arg" do
|
|
8
8
|
# FIXME - this expects new to be called, but we need something
|
|
9
9
|
# more robust - that expects new to be called with a specific
|
|
10
10
|
# block (lambda, proc, whatever)
|
|
11
11
|
mod = Module.new
|
|
12
|
-
mod.extend Spec::DSL
|
|
12
|
+
mod.extend Spec::Matchers::DSL
|
|
13
13
|
mod.create(:foo)
|
|
14
14
|
|
|
15
15
|
obj = Object.new
|
|
@@ -90,8 +90,60 @@ module Spec
|
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
-
context "
|
|
93
|
+
context "with no args" do
|
|
94
|
+
before(:each) do
|
|
95
|
+
@matcher = Spec::Matchers::Matcher.new(:matcher_name) do
|
|
96
|
+
match do |actual|
|
|
97
|
+
actual == 5
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "matches" do
|
|
103
|
+
@matcher.matches?(5).should be_true
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "describes" do
|
|
107
|
+
@matcher.description.should == "matcher name"
|
|
108
|
+
end
|
|
94
109
|
end
|
|
110
|
+
|
|
111
|
+
context "with 1 arg" do
|
|
112
|
+
before(:each) do
|
|
113
|
+
@matcher = Spec::Matchers::Matcher.new(:matcher_name, 1) do |expected|
|
|
114
|
+
match do |actual|
|
|
115
|
+
actual == 5 && expected == 1
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "matches" do
|
|
121
|
+
@matcher.matches?(5).should be_true
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "describes" do
|
|
125
|
+
@matcher.description.should == "matcher name 1"
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context "with multiple args" do
|
|
130
|
+
before(:each) do
|
|
131
|
+
@matcher = Spec::Matchers::Matcher.new(:matcher_name, 1, 2, 3, 4) do |a,b,c,d|
|
|
132
|
+
match do |sum|
|
|
133
|
+
a + b + c + d == sum
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "matches" do
|
|
139
|
+
@matcher.matches?(10).should be_true
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "describes" do
|
|
143
|
+
@matcher.description.should == "matcher name 1, 2, 3, and 4"
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
95
147
|
end
|
|
96
148
|
end
|
|
97
149
|
end
|