rspec-expectations 2.8.0.rc1 → 2.8.0.rc2

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,23 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2006 David Chelimsky, The RSpec Development Team
4
+ Copyright (c) 2005 Steven Baker
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -22,19 +22,21 @@ Minitest, or Cucumber, you can install it directly:
22
22
 
23
23
  Here's an example using rspec-core:
24
24
 
25
- describe Order do
26
- it "sums the prices of the items in its line items" do
27
- order = Order.new
28
- order.add_entry(LineItem.new(:item => Item.new(
29
- :price => Money.new(1.11, :USD)
30
- )
31
- order.add_entry(LineItem.new(:item => Item.new(
32
- :price => Money.new(2.22, :USD),
33
- :quantity => 2
34
- )
35
- order.total.should eq(Money.new(5.55, :USD))
36
- end
37
- end
25
+ ```ruby
26
+ describe Order do
27
+ it "sums the prices of the items in its line items" do
28
+ order = Order.new
29
+ order.add_entry(LineItem.new(:item => Item.new(
30
+ :price => Money.new(1.11, :USD)
31
+ )))
32
+ order.add_entry(LineItem.new(:item => Item.new(
33
+ :price => Money.new(2.22, :USD),
34
+ :quantity => 2
35
+ )))
36
+ order.total.should eq(Money.new(5.55, :USD))
37
+ end
38
+ end
39
+ ```
38
40
 
39
41
  The `describe` and `it` methods come from rspec-core. The `Order`, `LineItem`,
40
42
  and `Item` classes would be from _your_ code. The last line of the example
@@ -48,73 +50,97 @@ the example passes. If not, it fails with a message like:
48
50
 
49
51
  ### Equivalence
50
52
 
51
- actual.should eq(expected) # passes if actual == expected
52
- actual.should == expected # passes if actual == expected
53
- actual.should eql(expected) # passes if actual.eql?(expected)
53
+ ```ruby
54
+ actual.should eq(expected) # passes if actual == expected
55
+ actual.should == expected # passes if actual == expected
56
+ actual.should eql(expected) # passes if actual.eql?(expected)
57
+ ```
54
58
 
55
59
  ### Identity
56
60
 
57
- actual.should be(expected) # passes if actual.equal?(expected)
58
- actual.should equal(expected) # passes if actual.equal?(expected)
61
+ ```ruby
62
+ actual.should be(expected) # passes if actual.equal?(expected)
63
+ actual.should equal(expected) # passes if actual.equal?(expected)
64
+ ```
59
65
 
60
66
  ### Comparisons
61
67
 
62
- actual.should be > expected
63
- actual.should be >= expected
64
- actual.should be <= expected
65
- actual.should be < expected
66
- actual.should be_within(delta).of(expected)
68
+ ```ruby
69
+ actual.should be > expected
70
+ actual.should be >= expected
71
+ actual.should be <= expected
72
+ actual.should be < expected
73
+ actual.should be_within(delta).of(expected)
74
+ ```
67
75
 
68
76
  ### Regular expressions
69
77
 
70
- actual.should =~ /expression/
71
- actual.should match(/expression/)
78
+ ```ruby
79
+ actual.should =~ /expression/
80
+ actual.should match(/expression/)
81
+ ```
72
82
 
73
83
  ### Types/classes
74
84
 
75
- actual.should be_an_instance_of(expected)
76
- actual.should be_a_kind_of(expected)
85
+ ```ruby
86
+ actual.should be_an_instance_of(expected)
87
+ actual.should be_a_kind_of(expected)
88
+ ```
77
89
 
78
90
  ### Truthiness
79
91
 
80
- actual.should be_true # passes if actual is truthy (not nil or false)
81
- actual.should be_false # passes if actual is falsy (nil or false)
82
- actual.should be_nil # passes if actual is nil
92
+ ```ruby
93
+ actual.should be_true # passes if actual is truthy (not nil or false)
94
+ actual.should be_false # passes if actual is falsy (nil or false)
95
+ actual.should be_nil # passes if actual is nil
96
+ ```
83
97
 
84
98
  ### Expecting errors
85
99
 
86
- expect { ... }.to raise_error
87
- expect { ... }.to raise_error(ErrorClass)
88
- expect { ... }.to raise_error("message")
89
- expect { ... }.to raise_error(ErrorClass, "message")
100
+ ```ruby
101
+ expect { ... }.to raise_error
102
+ expect { ... }.to raise_error(ErrorClass)
103
+ expect { ... }.to raise_error("message")
104
+ expect { ... }.to raise_error(ErrorClass, "message")
105
+ ```
90
106
 
91
107
  ### Expecting throws
92
108
 
93
- expect { ... }.to throw_symbol
94
- expect { ... }.to throw_symbol(:symbol)
95
- expect { ... }.to throw_symbol(:symbol, 'value')
109
+ ```ruby
110
+ expect { ... }.to throw_symbol
111
+ expect { ... }.to throw_symbol(:symbol)
112
+ expect { ... }.to throw_symbol(:symbol, 'value')
113
+ ```
96
114
 
97
115
  ### Predicate matchers
98
116
 
99
- actual.should be_xxx # passes if actual.xxx?
100
- actual.should have_xxx(:arg) # passes if actual.has_xxx?(:arg)
117
+ ```ruby
118
+ actual.should be_xxx # passes if actual.xxx?
119
+ actual.should have_xxx(:arg) # passes if actual.has_xxx?(:arg)
120
+ ```
101
121
 
102
122
  See [RSpec::Matchers](../RSpec/Matchers) for more about predicate matchers.
103
123
 
104
124
  ### Ranges (Ruby >= 1.9 only)
105
125
 
106
- (1..10).should cover(3)
126
+ ```ruby
127
+ (1..10).should cover(3)
128
+ ```
107
129
 
108
130
  ### Collection membership
109
131
 
110
- actual.should include(expected)
132
+ ```ruby
133
+ actual.should include(expected)
134
+ ```
111
135
 
112
136
  #### Examples
113
137
 
114
- [1,2,3].should include(1)
115
- [1,2,3].should include(1, 2)
116
- {:a => 'b'}.should include(:a => 'b')
117
- "this string".should include("is str")
138
+ ```ruby
139
+ [1,2,3].should include(1)
140
+ [1,2,3].should include(1, 2)
141
+ {:a => 'b'}.should include(:a => 'b')
142
+ "this string".should include("is str")
143
+ ```
118
144
 
119
145
  ## Learn more
120
146
 
@@ -1,16 +1,33 @@
1
+ # Built-in Matchers
2
+
3
+ Here is a list of matchers that ship with rspec-expectations. Each matcher
4
+ can be used with `should` or `should_not` e.g.
5
+
6
+ result.should eq(3)
7
+ list.should_not be_empty
8
+
1
9
  ## Object identity
2
10
 
3
- actual.should equal(expected) # passes if actual.equal?(expected)
11
+ actual.should be(expected) # passes if actual.equal?(expected)
4
12
 
5
13
  ## Object equivalence
6
14
 
7
- actual.should == expected # passes if actual == expected
8
- actual.should eql(expected) # passes if actual.eql?(expected)
15
+ actual.should eq(expected) # passes if actual == expected
9
16
 
10
17
  ## Optional APIs for identity/equivalence
11
18
 
12
- actual.should eq(expected) # passes if actual == expected
13
- actual.should be(expected) # passes if actual.equal?(expected)
19
+ actual.should == expected # passes if actual == expected
20
+ actual.should eql(expected) # passes if actual.eql?(expected)
21
+ actual.should equal(expected) # passes if actual.equal?(expected)
22
+
23
+ # NOTE: this can't work in Ruby 1.8, so we don't support it at all:
24
+ # actual.should != expected
25
+ # The reason is that Ruby 1.8 parses it as:
26
+ # !(actual.should.==(expected)),
27
+ # so by the time RSpec sees it it has no way to know that it's
28
+ # been negated. Use either of these instead:
29
+ # actual.should_not eq(expected)
30
+ # actual.should_not == expected
14
31
 
15
32
  ## Comparisons
16
33
 
@@ -11,7 +11,7 @@ module RSpec
11
11
  # @param [Object] expected
12
12
  # @param [Object] actual
13
13
  #
14
- # Adds a diff to the failure message when +expected+ and +actual+ are
14
+ # Adds a diff to the failure message when `expected` and `actual` are
15
15
  # both present.
16
16
  def fail_with(message, expected=nil, actual=nil)
17
17
  if !message
@@ -22,10 +22,10 @@ module RSpec
22
22
  if actual && expected
23
23
  if all_strings?(actual, expected)
24
24
  if any_multiline_strings?(actual, expected)
25
- message << "\nDiff:" << self.differ.diff_as_string(actual, expected)
25
+ message << "\nDiff:" << differ.diff_as_string(actual, expected)
26
26
  end
27
27
  elsif no_procs?(actual, expected) && no_numbers?(actual, expected)
28
- message << "\nDiff:" << self.differ.diff_as_object(actual, expected)
28
+ message << "\nDiff:" << differ.diff_as_object(actual, expected)
29
29
  end
30
30
  end
31
31
 
@@ -2,7 +2,7 @@ module RSpec
2
2
  module Expectations
3
3
  # @private
4
4
  module Version
5
- STRING = '2.8.0.rc1'
5
+ STRING = '2.8.0.rc2'
6
6
  end
7
7
  end
8
8
  end
@@ -1,5 +1,7 @@
1
1
  module RSpec
2
2
  module Matchers
3
+ # @api private
4
+ #
3
5
  # Used _internally_ as a base class for matchers that ship with
4
6
  # rspec-expectations.
5
7
  #
@@ -11,7 +13,7 @@ module RSpec
11
13
  module BaseMatcher
12
14
  include RSpec::Matchers::Pretty
13
15
 
14
- attr_reader :actual, :expected
16
+ attr_reader :actual, :expected, :rescued_exception
15
17
 
16
18
  def initialize(expected=nil)
17
19
  @expected = expected
@@ -21,6 +23,15 @@ module RSpec
21
23
  @actual = actual
22
24
  end
23
25
 
26
+ def match_unless_raises(exception=Exception)
27
+ begin
28
+ yield
29
+ true
30
+ rescue exception => @rescued_exception
31
+ false
32
+ end
33
+ end
34
+
24
35
  def failure_message_for_should
25
36
  "expected #{actual.inspect} to #{name_to_sentence}#{expected_to_sentence}"
26
37
  end
@@ -36,6 +47,10 @@ module RSpec
36
47
  def diffable?
37
48
  false
38
49
  end
50
+
51
+ def ==(other)
52
+ matches?(other)
53
+ end
39
54
  end
40
55
  end
41
56
  end
@@ -4,9 +4,10 @@ module RSpec
4
4
  # Defines a custom matcher.
5
5
  # @see RSpec::Matchers
6
6
  def define(name, &declarations)
7
+ matcher = RSpec::Matchers::Matcher.new(name, &declarations)
7
8
  define_method name do |*expected|
8
9
  $matcher_execution_context = self
9
- RSpec::Matchers::Matcher.new name, *expected, &declarations
10
+ matcher.for_expected *expected
10
11
  end
11
12
  end
12
13
 
@@ -1,16 +1,20 @@
1
1
  module RSpec
2
2
  module Matchers
3
+ # Provides the context in which the block passed to RSpec::Matchers.define
4
+ # will be evaluated.
3
5
  class Matcher
4
6
  include RSpec::Matchers::Extensions::InstanceEvalWithArgs
5
7
  include RSpec::Matchers::Pretty
6
8
  include RSpec::Matchers
7
9
 
8
10
  attr_reader :expected, :actual, :rescued_exception
9
- def initialize(name, *expected, &declarations)
10
- @name = name
11
- @expected = expected
12
- @actual = nil
13
- @diffable = false
11
+
12
+ # @api private
13
+ def initialize(name, &declarations)
14
+ @name = name
15
+ @declarations = declarations
16
+ @actual = nil
17
+ @diffable = false
14
18
  @expected_exception, @rescued_exception = nil, nil
15
19
  @match_for_should_not_block = nil
16
20
 
@@ -19,12 +23,19 @@ module RSpec
19
23
  :failure_message_for_should => lambda {|actual| "expected #{actual.inspect} to #{name_to_sentence}#{expected_to_sentence}"},
20
24
  :failure_message_for_should_not => lambda {|actual| "expected #{actual.inspect} not to #{name_to_sentence}#{expected_to_sentence}"}
21
25
  }
26
+ end
27
+
28
+ # @api private
29
+ def for_expected(*expected)
30
+ @expected = expected
22
31
  making_declared_methods_public do
23
- instance_eval_with_args(*@expected, &declarations)
32
+ instance_eval_with_args(*@expected, &@declarations)
24
33
  end
34
+ self
25
35
  end
26
-
27
- #Used internally by +should+ and +should_not+.
36
+
37
+ # @api private
38
+ # Used internally by +should+ and +should_not+.
28
39
  def matches?(actual)
29
40
  @actual = actual
30
41
  if @expected_exception
@@ -43,65 +54,142 @@ module RSpec
43
54
  end
44
55
  end
45
56
 
46
- # Used internally by +should_not+
47
- def does_not_match?(actual)
48
- @actual = actual
49
- @match_for_should_not_block ?
50
- instance_eval_with_args(actual, &@match_for_should_not_block) :
51
- !matches?(actual)
52
- end
53
-
54
- def include(*args)
55
- singleton_class.__send__(:include, *args)
56
- end
57
-
58
- def define_method(name, &block)
59
- singleton_class.__send__(:define_method, name, &block)
60
- end
61
-
62
- # See RSpec::Matchers
57
+ # Stores the block that is used to determine whether this matcher passes
58
+ # or fails. The block should return a boolean value. When the matcher is
59
+ # passed to `should` and the block returns `true`, then the expectation
60
+ # passes. Similarly, when the matcher is passed to `should_not` and the
61
+ # block returns `false`, then the expectation passes.
62
+ #
63
+ # Use `match_for_should` when used in conjuntion with
64
+ # `match_for_should_not`.
65
+ #
66
+ # @example
67
+ #
68
+ # RSpec::Matchers.define :be_even do
69
+ # match do |actual|
70
+ # actual.even?
71
+ # end
72
+ # end
73
+ #
74
+ # 4.should be_even # passes
75
+ # 3.should_not be_even # passes
76
+ # 3.should be_even # fails
77
+ # 4.should_not be_even # fails
78
+ #
79
+ # @yield [Object] actual the actual value (or receiver of should)
63
80
  def match(&block)
64
81
  @match_block = block
65
82
  end
66
- alias match_for_should match
67
83
 
68
- # See RSpec::Matchers
84
+ alias_method :match_for_should, :match
85
+
86
+ # Use this to define the block for a negative expectation (`should_not`)
87
+ # when the positive and negative forms require different handling. This
88
+ # is rarely necessary, but can be helpful, for example, when specifying
89
+ # asynchronous processes that require different timeouts.
90
+ #
91
+ # @yield [Object] actual the actual value (or receiver of should)
69
92
  def match_for_should_not(&block)
70
93
  @match_for_should_not_block = block
71
94
  end
72
95
 
73
- # See RSpec::Matchers
96
+ # Use this instead of `match` when the block will raise an exception
97
+ # rather than returning false to indicate a failure.
98
+ #
99
+ # @example
100
+ #
101
+ # RSpec::Matchers.define :accept_as_valid do |candidate_address|
102
+ # match_unless_raises ValidationException do |validator|
103
+ # validator.validate(candidate_address)
104
+ # end
105
+ # end
106
+ #
107
+ # email_validator.should accept_as_valid("person@company.com")
74
108
  def match_unless_raises(exception=Exception, &block)
75
109
  @expected_exception = exception
76
110
  match(&block)
77
111
  end
78
112
 
79
- # See RSpec::Matchers
113
+ # Customize the failure messsage to use when this matcher is invoked with
114
+ # `should`. Only use this when the message generated by default doesn't
115
+ # suit your needs.
116
+ #
117
+ # @example
118
+ #
119
+ # RSpec::Matchers.define :have_strength do |expected|
120
+ # match { ... }
121
+ #
122
+ # failure_message_for_should do |actual|
123
+ # "Expected strength of #{expected}, but had #{actual.strength}"
124
+ # end
125
+ # end
126
+ #
127
+ # @yield [Object] actual the actual object
80
128
  def failure_message_for_should(&block)
81
129
  cache_or_call_cached(:failure_message_for_should, &block)
82
130
  end
83
131
 
84
- # See RSpec::Matchers
132
+ # Customize the failure messsage to use when this matcher is invoked with
133
+ # `should_not`. Only use this when the message generated by default
134
+ # doesn't suit your needs.
135
+ #
136
+ # @example
137
+ #
138
+ # RSpec::Matchers.define :have_strength do |expected|
139
+ # match { ... }
140
+ #
141
+ # failure_message_for_should_not do |actual|
142
+ # "Expected not to have strength of #{expected}, but did"
143
+ # end
144
+ # end
145
+ #
146
+ # @yield [Object] actual the actual object
147
+ # @yield [Object] actual the actual object
85
148
  def failure_message_for_should_not(&block)
86
149
  cache_or_call_cached(:failure_message_for_should_not, &block)
87
150
  end
88
151
 
89
- # See RSpec::Matchers
152
+
153
+ # Customize the description to use for one-liners. Only use this when
154
+ # the description generated by default doesn't suit your needs.
155
+ #
156
+ # @example
157
+ #
158
+ # RSpec::Matchers.define :qualify_for do |expected|
159
+ # match { ... }
160
+ #
161
+ # description do
162
+ # "qualify for #{expected}"
163
+ # end
164
+ # end
90
165
  def description(&block)
91
166
  cache_or_call_cached(:description, &block)
92
167
  end
93
168
 
94
- #Used internally by objects returns by +should+ and +should_not+.
95
- def diffable?
96
- @diffable
97
- end
98
-
99
- # See RSpec::Matchers
169
+ # Tells the matcher to diff the actual and expected values in the failure
170
+ # message.
100
171
  def diffable
101
172
  @diffable = true
102
173
  end
103
174
 
104
- # See RSpec::Matchers
175
+ # Convenience for defining methods on this matcher to create a fluent
176
+ # interface. The trick about fluent interfaces is that each method must
177
+ # return self in order to chain methods together. `chain` handles that
178
+ # for you.
179
+ #
180
+ # @example
181
+ #
182
+ # RSpec::Matchers.define :have_errors_on do |key|
183
+ # chain :with do |message|
184
+ # @message = message
185
+ # end
186
+ #
187
+ # match do |actual|
188
+ # actual.errors[key] == @message
189
+ # end
190
+ # end
191
+ #
192
+ # minor.should have_errors_on(:age).with("Not old enough to participate")
105
193
  def chain(method, &block)
106
194
  define_method method do |*args|
107
195
  block.call(*args)
@@ -109,8 +197,31 @@ module RSpec
109
197
  end
110
198
  end
111
199
 
200
+ # @api private
201
+ # Used internally by objects returns by +should+ and +should_not+.
202
+ def diffable?
203
+ @diffable
204
+ end
205
+
206
+ # @api private
207
+ # Used internally by +should_not+
208
+ def does_not_match?(actual)
209
+ @actual = actual
210
+ @match_for_should_not_block ?
211
+ instance_eval_with_args(actual, &@match_for_should_not_block) :
212
+ !matches?(actual)
213
+ end
214
+
112
215
  private
113
216
 
217
+ def include(*args)
218
+ singleton_class.__send__(:include, *args)
219
+ end
220
+
221
+ def define_method(name, &block)
222
+ singleton_class.__send__(:define_method, name, &block)
223
+ end
224
+
114
225
  def method_missing(method, *args, &block)
115
226
  if $matcher_execution_context.respond_to?(method)
116
227
  $matcher_execution_context.send method, *args, &block
@@ -0,0 +1,53 @@
1
+ module RSpec::Matchers
2
+
3
+ describe BaseMatcher do
4
+ describe "#match_unless_raises" do
5
+ let(:matcher) do
6
+ Class.new do
7
+ include BaseMatcher
8
+ end.new
9
+ end
10
+
11
+ it "returns true if there are no errors" do
12
+ matcher.match_unless_raises {}.should be_true
13
+ end
14
+
15
+ it "returns false if there is an error" do
16
+ matcher.match_unless_raises { raise }.should be_false
17
+ end
18
+
19
+ it "returns false if the submitted error is raised" do
20
+ matcher.match_unless_raises(RuntimeError){ raise "foo" }.should be_false
21
+ end
22
+
23
+ it "re-raises any error other than the one specified" do
24
+ expect do
25
+ matcher.match_unless_raises(ArgumentError){ raise "foo" }
26
+ end.to raise_error
27
+ end
28
+
29
+ it "stores the rescued exception for use in messages" do
30
+ matcher.match_unless_raises(RuntimeError){ raise "foo" }
31
+ matcher.rescued_exception.should be_a(RuntimeError)
32
+ matcher.rescued_exception.message.should eq("foo")
33
+ end
34
+
35
+ end
36
+
37
+ describe "#==" do
38
+ it "responds the same way as matches?" do
39
+ matcher = Class.new do
40
+ include BaseMatcher
41
+ def matches?(actual)
42
+ actual == expected
43
+ end
44
+ end
45
+ matcher.new(3).matches?(3).should be_true
46
+ matcher.new(3).should eq(3)
47
+
48
+ matcher.new(3).matches?(4).should be_false
49
+ matcher.new(3).should_not eq(4)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -3,23 +3,6 @@ require 'spec_helper'
3
3
  module RSpec
4
4
  module Matchers
5
5
  module DSL
6
- describe "#define" do
7
- it "creates a method that initializes a new matcher with the submitted name and expected arg" do
8
- # FIXME - this expects new to be called, but we need something
9
- # more robust - that expects new to be called with a specific
10
- # block (lambda, proc, whatever)
11
- mod = Module.new
12
- mod.extend RSpec::Matchers::DSL
13
- mod.define(:foo)
14
-
15
- obj = Object.new
16
- obj.extend mod
17
-
18
- RSpec::Matchers::Matcher.should_receive(:new).with(:foo, 3) { stub('matcher').as_null_object }
19
-
20
- obj.foo(3)
21
- end
22
- end
23
6
  end
24
7
  end
25
8
  end
@@ -27,7 +27,7 @@ module RSpec
27
27
  RSpec::Matchers::Matcher.new(:be_a_greeting) do
28
28
  include MatcherHelperModule
29
29
  match { |actual| actual == greeting }
30
- end
30
+ end.for_expected
31
31
  end
32
32
 
33
33
  it "has access to the module's methods" do
@@ -45,7 +45,7 @@ module RSpec
45
45
  it 'allows multiple modules to be included at once' do
46
46
  m = RSpec::Matchers::Matcher.new(:multiple_modules) do
47
47
  include Enumerable, Comparable
48
- end
48
+ end.for_expected
49
49
  m.should be_a(Enumerable)
50
50
  m.should be_a(Comparable)
51
51
  end
@@ -53,11 +53,11 @@ module RSpec
53
53
 
54
54
  context "without overrides" do
55
55
  before(:each) do
56
- @matcher = RSpec::Matchers::Matcher.new(:be_a_multiple_of, 3) do |multiple|
56
+ @matcher = RSpec::Matchers::Matcher.new(:be_a_multiple_of) do |multiple|
57
57
  match do |actual|
58
58
  actual % multiple == 0
59
59
  end
60
- end
60
+ end.for_expected(3)
61
61
  end
62
62
 
63
63
  it "provides a default description" do
@@ -77,7 +77,7 @@ module RSpec
77
77
 
78
78
  context "with separate match logic for should and should not" do
79
79
  let(:matcher) do
80
- RSpec::Matchers::Matcher.new(:to_be_composed_of, 7, 11) do |a, b|
80
+ RSpec::Matchers::Matcher.new(:to_be_composed_of) do |a, b|
81
81
  match_for_should do |actual|
82
82
  actual == a * b
83
83
  end
@@ -85,7 +85,7 @@ module RSpec
85
85
  match_for_should_not do |actual|
86
86
  actual == a + b
87
87
  end
88
- end
88
+ end.for_expected(7, 11)
89
89
  end
90
90
 
91
91
  it "invokes the match_for_should block for #matches?" do
@@ -105,9 +105,9 @@ module RSpec
105
105
  end
106
106
 
107
107
  it "allows helper methods to be defined with #define_method to have access to matcher parameters" do
108
- matcher = RSpec::Matchers::Matcher.new(:name, 3, 4) do |a, b|
108
+ matcher = RSpec::Matchers::Matcher.new(:name) do |a, b|
109
109
  define_method(:sum) { a + b }
110
- end
110
+ end.for_expected(3,4)
111
111
 
112
112
  matcher.sum.should == 7
113
113
  end
@@ -118,19 +118,19 @@ module RSpec
118
118
  end
119
119
 
120
120
  it "is diffable when told to be" do
121
- matcher = RSpec::Matchers::Matcher.new(:name) { diffable }
121
+ matcher = RSpec::Matchers::Matcher.new(:name) { diffable }.for_expected
122
122
  matcher.should be_diffable
123
123
  end
124
124
 
125
125
  it "provides expected" do
126
- matcher = RSpec::Matchers::Matcher.new(:name, 'expected string') {}
126
+ matcher = RSpec::Matchers::Matcher.new(:name) {}.for_expected('expected string')
127
127
  matcher.expected.should == ['expected string']
128
128
  end
129
129
 
130
130
  it "provides actual" do
131
- matcher = RSpec::Matchers::Matcher.new(:name, 'expected string') do
131
+ matcher = RSpec::Matchers::Matcher.new(:name) do
132
132
  match {|actual|}
133
- end
133
+ end.for_expected('expected string')
134
134
 
135
135
  matcher.matches?('actual string')
136
136
 
@@ -139,27 +139,27 @@ module RSpec
139
139
 
140
140
  context "wrapping another expectation (should == ...)" do
141
141
  it "returns true if the wrapped expectation passes" do
142
- matcher = RSpec::Matchers::Matcher.new(:name, 'value') do |expected|
142
+ matcher = RSpec::Matchers::Matcher.new(:name) do |expected|
143
143
  match do |actual|
144
144
  actual.should == expected
145
145
  end
146
- end
146
+ end.for_expected('value')
147
147
  matcher.matches?('value').should be_true
148
148
  end
149
149
 
150
150
  it "returns false if the wrapped expectation fails" do
151
- matcher = RSpec::Matchers::Matcher.new(:name, 'value') do |expected|
151
+ matcher = RSpec::Matchers::Matcher.new(:name) do |expected|
152
152
  match do |actual|
153
153
  actual.should == expected
154
154
  end
155
- end
155
+ end.for_expected('value')
156
156
  matcher.matches?('other value').should be_false
157
157
  end
158
158
  end
159
159
 
160
160
  context "with overrides" do
161
161
  before(:each) do
162
- @matcher = RSpec::Matchers::Matcher.new(:be_boolean, true) do |boolean|
162
+ @matcher = RSpec::Matchers::Matcher.new(:be_boolean) do |boolean|
163
163
  match do |actual|
164
164
  actual
165
165
  end
@@ -172,7 +172,7 @@ module RSpec
172
172
  failure_message_for_should_not do |actual|
173
173
  "expected #{actual} not to be the boolean #{boolean}"
174
174
  end
175
- end
175
+ end.for_expected(true)
176
176
  end
177
177
 
178
178
  it "does not hide result of match block when true" do
@@ -204,16 +204,16 @@ module RSpec
204
204
  match do |actual|
205
205
  actual == 5
206
206
  end
207
- end
207
+ end.for_expected
208
208
  matcher.matches?(5).should be_true
209
209
  end
210
210
 
211
211
  it "exposes arg submitted through #new to matcher block" do
212
- matcher = RSpec::Matchers::Matcher.new(:ignore, 4) do |expected|
212
+ matcher = RSpec::Matchers::Matcher.new(:ignore) do |expected|
213
213
  match do |actual|
214
214
  actual > expected
215
215
  end
216
- end
216
+ end.for_expected(4)
217
217
  matcher.matches?(5).should be_true
218
218
  end
219
219
  end
@@ -224,7 +224,7 @@ module RSpec
224
224
  match do |actual|
225
225
  actual == 5
226
226
  end
227
- end
227
+ end.for_expected
228
228
  end
229
229
 
230
230
  it "matches" do
@@ -238,11 +238,11 @@ module RSpec
238
238
 
239
239
  context "with 1 arg" do
240
240
  before(:each) do
241
- @matcher = RSpec::Matchers::Matcher.new(:matcher_name, 1) do |expected|
241
+ @matcher = RSpec::Matchers::Matcher.new(:matcher_name) do |expected|
242
242
  match do |actual|
243
243
  actual == 5 && expected == 1
244
244
  end
245
- end
245
+ end.for_expected(1)
246
246
  end
247
247
 
248
248
  it "matches" do
@@ -256,11 +256,11 @@ module RSpec
256
256
 
257
257
  context "with multiple args" do
258
258
  before(:each) do
259
- @matcher = RSpec::Matchers::Matcher.new(:matcher_name, 1, 2, 3, 4) do |a,b,c,d|
259
+ @matcher = RSpec::Matchers::Matcher.new(:matcher_name) do |a,b,c,d|
260
260
  match do |sum|
261
261
  a + b + c + d == sum
262
262
  end
263
- end
263
+ end.for_expected(1,2,3,4)
264
264
  end
265
265
 
266
266
  it "matches" do
@@ -273,7 +273,7 @@ module RSpec
273
273
  end
274
274
 
275
275
  it "supports helper methods" do
276
- matcher = RSpec::Matchers::Matcher.new(:be_similar_to, [1,2,3]) do |sample|
276
+ matcher = RSpec::Matchers::Matcher.new(:be_similar_to) do |sample|
277
277
  match do |actual|
278
278
  similar?(sample, actual)
279
279
  end
@@ -281,7 +281,7 @@ module RSpec
281
281
  def similar?(a, b)
282
282
  a.sort == b.sort
283
283
  end
284
- end
284
+ end.for_expected([1,2,3])
285
285
 
286
286
  matcher.matches?([2,3,1]).should be_true
287
287
  end
@@ -291,23 +291,23 @@ module RSpec
291
291
  def second_word
292
292
  self
293
293
  end
294
- end
294
+ end.for_expected
295
295
 
296
296
  matcher.second_word.should == matcher
297
297
  end
298
298
 
299
299
  it "treats method missing normally for undeclared methods" do
300
- matcher = RSpec::Matchers::Matcher.new(:ignore) { }
300
+ matcher = RSpec::Matchers::Matcher.new(:ignore) { }.for_expected
301
301
  expect { matcher.non_existent_method }.to raise_error(NoMethodError)
302
302
  end
303
303
 
304
304
  it "has access to other matchers" do
305
- matcher = RSpec::Matchers::Matcher.new(:ignore, 3) do |expected|
305
+ matcher = RSpec::Matchers::Matcher.new(:ignore) do |expected|
306
306
  match do |actual|
307
307
  extend RSpec::Matchers
308
308
  actual.should eql(5 + expected)
309
309
  end
310
- end
310
+ end.for_expected(3)
311
311
 
312
312
  matcher.matches?(8).should be_true
313
313
  end
@@ -323,12 +323,12 @@ module RSpec
323
323
  end
324
324
  let(:matcher) do
325
325
  m = mod
326
- RSpec::Matchers::Matcher.new :equal, 4 do |expected|
326
+ RSpec::Matchers::Matcher.new :equal do |expected|
327
327
  extend m
328
328
  match_unless_raises UnexpectedError do
329
329
  assert_equal expected, actual
330
330
  end
331
- end
331
+ end.for_expected(4)
332
332
  end
333
333
 
334
334
  context "with passing assertion" do
@@ -352,11 +352,11 @@ module RSpec
352
352
 
353
353
  context "with an unexpected error" do
354
354
  let(:matcher) do
355
- RSpec::Matchers::Matcher.new :foo, :bar do |expected|
355
+ RSpec::Matchers::Matcher.new :foo do |expected|
356
356
  match_unless_raises SyntaxError do |actual|
357
357
  raise "unexpected exception"
358
358
  end
359
- end
359
+ end.for_expected(:bar)
360
360
  end
361
361
 
362
362
  it "raises the error" do
@@ -374,15 +374,15 @@ module RSpec
374
374
  @expected_value = expected_value
375
375
  end
376
376
  match { |actual| actual == @expected_value }
377
- end
377
+ end.for_expected
378
378
 
379
379
  matcher.expecting('value').matches?('value').should be_true
380
380
  matcher.expecting('value').matches?('other value').should be_false
381
381
  end
382
382
 
383
383
  it "prevents name collisions on chainable methods from different matchers" do
384
- m1 = RSpec::Matchers::Matcher.new(:m1) { chain(:foo) { raise "foo in m1" } }
385
- m2 = RSpec::Matchers::Matcher.new(:m2) { chain(:foo) { raise "foo in m2" } }
384
+ m1 = RSpec::Matchers::Matcher.new(:m1) { chain(:foo) { raise "foo in m1" } }.for_expected
385
+ m2 = RSpec::Matchers::Matcher.new(:m2) { chain(:foo) { raise "foo in m2" } }.for_expected
386
386
 
387
387
  expect { m1.foo }.to raise_error("foo in m1")
388
388
  expect { m2.foo }.to raise_error("foo in m2")
metadata CHANGED
@@ -1,24 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-expectations
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15424215
4
+ hash: 15424209
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 2
8
8
  - 8
9
9
  - 0
10
10
  - rc
11
- - 1
12
- version: 2.8.0.rc1
11
+ - 2
12
+ version: 2.8.0.rc2
13
13
  platform: ruby
14
14
  authors:
15
+ - Steven Baker
15
16
  - David Chelimsky
16
- - Chad Humphries
17
17
  autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2011-11-06 00:00:00 Z
21
+ date: 2011-12-20 00:00:00 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -32,18 +32,19 @@ dependencies:
32
32
  - 1
33
33
  - 2
34
34
  version: 1.1.2
35
- requirement: *id001
36
- type: :runtime
37
35
  prerelease: false
36
+ requirement: *id001
38
37
  name: diff-lcs
38
+ type: :runtime
39
39
  description: rspec expectations (should[_not] and matchers)
40
- email: dchelimsky@gmail.com;chad.humphries@gmail.com
40
+ email: rspec-users@rubyforge.org
41
41
  executables: []
42
42
 
43
43
  extensions: []
44
44
 
45
45
  extra_rdoc_files:
46
46
  - README.md
47
+ - License.txt
47
48
  files:
48
49
  - lib/rspec-expectations.rb
49
50
  - lib/rspec/expectations.rb
@@ -89,6 +90,7 @@ files:
89
90
  - lib/rspec/matchers/respond_to.rb
90
91
  - lib/rspec/matchers/satisfy.rb
91
92
  - lib/rspec/matchers/throw_symbol.rb
93
+ - License.txt
92
94
  - README.md
93
95
  - features/README.markdown
94
96
  - features/Upgrade.md
@@ -124,6 +126,7 @@ files:
124
126
  - spec/rspec/expectations/extensions/kernel_spec.rb
125
127
  - spec/rspec/expectations/fail_with_spec.rb
126
128
  - spec/rspec/expectations/handler_spec.rb
129
+ - spec/rspec/matchers/base_matcher_spec.rb
127
130
  - spec/rspec/matchers/be_close_spec.rb
128
131
  - spec/rspec/matchers/be_instance_of_spec.rb
129
132
  - spec/rspec/matchers/be_kind_of_spec.rb
@@ -156,8 +159,8 @@ files:
156
159
  - spec/support/matchers.rb
157
160
  - spec/support/ruby_version.rb
158
161
  homepage: http://github.com/rspec/rspec-expectations
159
- licenses: []
160
-
162
+ licenses:
163
+ - MIT
161
164
  post_install_message:
162
165
  rdoc_options:
163
166
  - --charset=UTF-8
@@ -189,7 +192,7 @@ rubyforge_project: rspec
189
192
  rubygems_version: 1.8.11
190
193
  signing_key:
191
194
  specification_version: 3
192
- summary: rspec-expectations-2.8.0.rc1
195
+ summary: rspec-expectations-2.8.0.rc2
193
196
  test_files:
194
197
  - features/README.markdown
195
198
  - features/Upgrade.md
@@ -225,6 +228,7 @@ test_files:
225
228
  - spec/rspec/expectations/extensions/kernel_spec.rb
226
229
  - spec/rspec/expectations/fail_with_spec.rb
227
230
  - spec/rspec/expectations/handler_spec.rb
231
+ - spec/rspec/matchers/base_matcher_spec.rb
228
232
  - spec/rspec/matchers/be_close_spec.rb
229
233
  - spec/rspec/matchers/be_instance_of_spec.rb
230
234
  - spec/rspec/matchers/be_kind_of_spec.rb
@@ -256,3 +260,4 @@ test_files:
256
260
  - spec/support/classes.rb
257
261
  - spec/support/matchers.rb
258
262
  - spec/support/ruby_version.rb
263
+ has_rdoc: