rspec-expectations 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +6 -5
- data/History.markdown +13 -3
- data/README.markdown +10 -0
- data/Rakefile +1 -1
- data/features/matchers/be_within.feature +43 -0
- data/features/matchers/exist.feature +44 -0
- data/features/matchers/include.feature +1 -1
- data/features/matchers/respond_to.feature +1 -1
- data/features/matchers/satisfy.feature +31 -0
- data/features/matchers/throw_symbol.feature +85 -0
- data/features/matchers/types.feature +2 -2
- data/features/test_frameworks/test_unit.feature +5 -1
- data/lib/rspec/expectations.rb +1 -1
- data/lib/rspec/expectations/extensions.rb +0 -1
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers.rb +2 -4
- data/lib/rspec/matchers/be_close.rb +2 -17
- data/lib/rspec/matchers/be_within.rb +40 -0
- data/lib/rspec/matchers/block_aliases.rb +18 -0
- data/lib/rspec/matchers/have.rb +2 -2
- data/lib/rspec/matchers/matcher.rb +6 -6
- data/lib/rspec/matchers/operator_matcher.rb +9 -0
- data/lib/rspec/matchers/throw_symbol.rb +43 -26
- data/rspec-expectations.gemspec +1 -5
- data/spec/rspec/matchers/be_close_spec.rb +11 -39
- data/spec/rspec/matchers/be_spec.rb +4 -0
- data/spec/rspec/matchers/be_within_spec.rb +64 -0
- data/spec/rspec/matchers/have_spec.rb +11 -1
- data/spec/rspec/matchers/matcher_spec.rb +8 -0
- data/spec/rspec/matchers/operator_matcher_spec.rb +26 -0
- data/spec/rspec/matchers/throw_symbol_spec.rb +27 -10
- data/spec/spec_helper.rb +17 -4
- metadata +22 -77
- data/lib/rspec/expectations/extensions/rspec/core/example_group.rb +0 -19
data/Gemfile
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
+
%w[rspec-core rspec-expectations rspec-mocks].each do |lib|
|
4
|
+
gem lib, :path => File.expand_path("../../#{lib}", __FILE__)
|
5
|
+
end
|
6
|
+
|
3
7
|
gem "rake"
|
4
|
-
gem "cucumber"
|
5
|
-
gem "aruba", "
|
8
|
+
gem "cucumber", "0.8.5"
|
9
|
+
gem "aruba", "0.2.2"
|
6
10
|
gem "autotest"
|
7
11
|
gem "diff-lcs"
|
8
|
-
gem "rspec-expectations", :path => "."
|
9
|
-
gem "rspec-core", :path => "../rspec-core"
|
10
|
-
gem "rspec-mocks", :path => "../rspec-mocks"
|
11
12
|
gem "watchr"
|
12
13
|
gem "rcov"
|
13
14
|
gem "relish"
|
data/History.markdown
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
## rspec-expectations release history (incomplete)
|
2
2
|
|
3
|
-
### 2.0
|
3
|
+
### 2.1.0 / 2010-11-07
|
4
4
|
|
5
|
-
[full changelog](http://github.com/rspec/rspec-expectations/compare/v2.0.
|
5
|
+
[full changelog](http://github.com/rspec/rspec-expectations/compare/v2.0.1...v2.1.0)
|
6
6
|
|
7
7
|
* Enhancements
|
8
|
-
*
|
8
|
+
* be_within(delta).of(expected) matcher (Myron Marston)
|
9
|
+
* Lots of new Cucumber features (Myron Marston)
|
10
|
+
* Raise error if you try "should != expected" on Ruby-1.9 (Myron Marston)
|
11
|
+
* Improved failure messages from throw_symbol (Myron Marston)
|
12
|
+
|
13
|
+
* Bug fixes
|
14
|
+
* Eliminate hard dependency on RSpec::Core (Myron Marston)
|
15
|
+
* have_matcher - use pluralize only when ActiveSupport inflections are indeed
|
16
|
+
defined (Josep M Bach)
|
17
|
+
* throw_symbol matcher no longer swallows exceptions (Myron Marston)
|
18
|
+
* fix matcher chaining to avoid name collisions (Myron Marston)
|
9
19
|
|
10
20
|
### 2.0.0 / 2010-10-10
|
11
21
|
|
data/README.markdown
CHANGED
@@ -3,6 +3,16 @@
|
|
3
3
|
rspec-expectations adds `should` and `should_not` to every object and includes
|
4
4
|
RSpec::Matchers, a library of standard matchers.
|
5
5
|
|
6
|
+
## Documentation
|
7
|
+
|
8
|
+
* [Cucumber features](http://relishapp.com/rspec/rspec-expectations/v/2-0)
|
9
|
+
* [RDoc](http://rubydoc.info/gems/rspec-expectations/2.0.1/frames)
|
10
|
+
|
11
|
+
## Install
|
12
|
+
|
13
|
+
gem install rspec # for rspec-core, rspec-expectations, rspec-mocks
|
14
|
+
gem install rspec-expecctations # for rspec-core only
|
15
|
+
|
6
16
|
## Matchers
|
7
17
|
|
8
18
|
Matchers are objects used to compose expectations:
|
data/Rakefile
CHANGED
@@ -58,7 +58,7 @@ end
|
|
58
58
|
desc "Push cukes to relishapp using the relish-client-gem"
|
59
59
|
task :relish, :version do |t, args|
|
60
60
|
raise "rake relish[VERSION]" unless args[:version]
|
61
|
-
sh "bundle exec relish --organization rspec --project rspec-expectations -v #{args[:version]}
|
61
|
+
sh "bundle exec relish push --organization rspec --project rspec-expectations -v #{args[:version]}"
|
62
62
|
end
|
63
63
|
|
64
64
|
task :clobber do
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Feature: be_within matcher
|
2
|
+
|
3
|
+
Normal equality expectations do not work well for floating point values.
|
4
|
+
Consider this irb session:
|
5
|
+
|
6
|
+
> radius = 3
|
7
|
+
=> 3
|
8
|
+
> area_of_circle = radius * radius * Math::PI
|
9
|
+
=> 28.2743338823081
|
10
|
+
> area_of_circle == 28.2743338823081
|
11
|
+
=> false
|
12
|
+
|
13
|
+
Instead, you should use the be_within matcher to check that the value
|
14
|
+
is within a delta of your expected value:
|
15
|
+
|
16
|
+
area_of_circle.should be_within(0.1).of(28.3)
|
17
|
+
|
18
|
+
Note that the difference between the actual and expected values must be
|
19
|
+
smaller than your delta; if it is equal, the matcher will fail.
|
20
|
+
|
21
|
+
Scenario: basic usage
|
22
|
+
Given a file named "be_within_matcher_spec.rb" with:
|
23
|
+
"""
|
24
|
+
describe 27.5 do
|
25
|
+
it { should be_within(0.5).of(27.9) }
|
26
|
+
it { should be_within(0.5).of(27.1) }
|
27
|
+
it { should_not be_within(0.5).of(28) }
|
28
|
+
it { should_not be_within(0.5).of(27) }
|
29
|
+
|
30
|
+
# deliberate failures
|
31
|
+
it { should_not be_within(0.5).of(27.9) }
|
32
|
+
it { should_not be_within(0.5).of(27.1) }
|
33
|
+
it { should be_within(0.5).of(28) }
|
34
|
+
it { should be_within(0.5).of(27) }
|
35
|
+
end
|
36
|
+
"""
|
37
|
+
When I run "rspec be_within_matcher_spec.rb"
|
38
|
+
Then the output should contain all of these:
|
39
|
+
| 8 examples, 4 failures |
|
40
|
+
| expected 27.5 not to be within 0.5 of 27.9 |
|
41
|
+
| expected 27.5 not to be within 0.5 of 27.1 |
|
42
|
+
| expected 27.5 to be within 0.5 of 28 |
|
43
|
+
| expected 27.5 to be within 0.5 of 27 |
|
@@ -0,0 +1,44 @@
|
|
1
|
+
Feature: exist matcher
|
2
|
+
|
3
|
+
The exist matcher is used to specify that something exists
|
4
|
+
(as indicated by #exist?):
|
5
|
+
|
6
|
+
obj.should exist # passes if obj.exist?
|
7
|
+
|
8
|
+
Scenario: basic usage
|
9
|
+
Given a file named "exist_matcher_spec.rb" with:
|
10
|
+
"""
|
11
|
+
class Planet
|
12
|
+
attr_reader :name
|
13
|
+
|
14
|
+
def initialize(name)
|
15
|
+
@name = name
|
16
|
+
end
|
17
|
+
|
18
|
+
def inspect
|
19
|
+
"<Planet: #{name}>"
|
20
|
+
end
|
21
|
+
|
22
|
+
def exist?
|
23
|
+
%w[Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune].include?(name)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "Earth" do
|
28
|
+
subject { Planet.new("Earth") }
|
29
|
+
it { should exist }
|
30
|
+
it { should_not exist } # deliberate failure
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "Tatooine" do
|
34
|
+
subject { Planet.new("Tatooine") }
|
35
|
+
it { should_not exist }
|
36
|
+
it { should exist } # deliberate failure
|
37
|
+
end
|
38
|
+
"""
|
39
|
+
When I run "rspec exist_matcher_spec.rb"
|
40
|
+
Then the output should contain all of these:
|
41
|
+
| 4 examples, 2 failures |
|
42
|
+
| expected <Planet: Earth> not to exist |
|
43
|
+
| expected <Planet: Tatooine> to exist |
|
44
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Feature: include matcher
|
2
2
|
|
3
|
-
Use the include matcher to specify
|
3
|
+
Use the include matcher to specify that a collection includes one or more
|
4
4
|
expected objects. This works on any object that responds to #include? (such
|
5
5
|
as a string or array):
|
6
6
|
|
@@ -6,7 +6,7 @@ Feature: respond_to matcher
|
|
6
6
|
obj.should respond_to(:foo) # pass if obj.respond_to?(:foo)
|
7
7
|
|
8
8
|
You can specify that an object responds to multiple messages in a single
|
9
|
-
statement with multiple arguments passed to the matcher
|
9
|
+
statement with multiple arguments passed to the matcher:
|
10
10
|
|
11
11
|
obj.should respond_to(:foo, :bar) # passes if obj.respond_to?(:foo) && obj.respond_to?(:bar)
|
12
12
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Feature: Satisfy matcher
|
2
|
+
|
3
|
+
The satisfy matcher is extremely flexible and can handle almost anything
|
4
|
+
you want to specify. It passes if the block you provide returns true:
|
5
|
+
|
6
|
+
10.should satisfy { |v| v % 5 == 0 }
|
7
|
+
7.should_not satisfy { |v| v % 5 == 0 }
|
8
|
+
|
9
|
+
This flexibility comes at a cost, however: the failure message
|
10
|
+
("expected [actual] to satisfy block") is not very descriptive
|
11
|
+
or helpful. You will usually be better served by using one of
|
12
|
+
the other built-in matchers, or writing a custom matcher.
|
13
|
+
|
14
|
+
Scenario: basic usage
|
15
|
+
Given a file named "satisfy_matcher_spec.rb" with:
|
16
|
+
"""
|
17
|
+
describe 10 do
|
18
|
+
it { should satisfy { |v| v > 5 } }
|
19
|
+
it { should_not satisfy { |v| v > 15 } }
|
20
|
+
|
21
|
+
# deliberate failures
|
22
|
+
it { should_not satisfy { |v| v > 5 } }
|
23
|
+
it { should satisfy { |v| v > 15 } }
|
24
|
+
end
|
25
|
+
"""
|
26
|
+
When I run "rspec satisfy_matcher_spec.rb"
|
27
|
+
Then the output should contain all of these:
|
28
|
+
| 4 examples, 2 failures |
|
29
|
+
| expected 10 not to satisfy block |
|
30
|
+
| expected 10 to satisfy block |
|
31
|
+
|
@@ -0,0 +1,85 @@
|
|
1
|
+
Feature: Throw symbol matcher
|
2
|
+
|
3
|
+
The throw_symbol matcher is used to specify that a block of code
|
4
|
+
throws a symbol. The most basic form passes if any symbol is thrown:
|
5
|
+
|
6
|
+
expect { throw :foo }.to throw_symbol
|
7
|
+
|
8
|
+
You'll often want to specify that a particular symbol is thrown:
|
9
|
+
|
10
|
+
expect { throw :foo }.to throw_symbol(:foo)
|
11
|
+
|
12
|
+
If you care about the additional argument given to throw, you can
|
13
|
+
specify that as well:
|
14
|
+
|
15
|
+
expect { throw :foo, 7 }.to throw_symbol(:foo, 7)
|
16
|
+
|
17
|
+
Scenario: basic usage
|
18
|
+
Given a file named "throw_symbol_matcher_spec.rb" with:
|
19
|
+
"""
|
20
|
+
describe "throw" do
|
21
|
+
specify { expect { throw :foo }.to throw_symbol }
|
22
|
+
specify { expect { throw :bar, 7 }.to throw_symbol }
|
23
|
+
specify { expect { 5 + 5 }.to_not throw_symbol }
|
24
|
+
|
25
|
+
# deliberate failures
|
26
|
+
specify { expect { throw :foo }.to_not throw_symbol }
|
27
|
+
specify { expect { throw :bar, 7 }.to_not throw_symbol }
|
28
|
+
specify { expect { 5 + 5 }.to throw_symbol }
|
29
|
+
end
|
30
|
+
"""
|
31
|
+
When I run "rspec throw_symbol_matcher_spec.rb"
|
32
|
+
Then the output should contain all of these:
|
33
|
+
| 6 examples, 3 failures |
|
34
|
+
| expected no Symbol to be thrown, got :foo |
|
35
|
+
| expected no Symbol to be thrown, got :bar |
|
36
|
+
| expected a Symbol to be thrown, got nothing |
|
37
|
+
|
38
|
+
Scenario: specify thrown symbol
|
39
|
+
Given a file named "throw_symbol_matcher_spec.rb" with:
|
40
|
+
"""
|
41
|
+
describe "throw symbol" do
|
42
|
+
specify { expect { throw :foo }.to throw_symbol(:foo) }
|
43
|
+
specify { expect { throw :foo, 7 }.to throw_symbol(:foo) }
|
44
|
+
specify { expect { 5 + 5 }.to_not throw_symbol(:foo) }
|
45
|
+
specify { expect { throw :bar }.to_not throw_symbol(:foo) }
|
46
|
+
|
47
|
+
# deliberate failures
|
48
|
+
specify { expect { throw :foo }.to_not throw_symbol(:foo) }
|
49
|
+
specify { expect { throw :foo, 7 }.to_not throw_symbol(:foo) }
|
50
|
+
specify { expect { 5 + 5 }.to throw_symbol(:foo) }
|
51
|
+
specify { expect { throw :bar }.to throw_symbol(:foo) }
|
52
|
+
end
|
53
|
+
"""
|
54
|
+
When I run "rspec throw_symbol_matcher_spec.rb"
|
55
|
+
Then the output should contain all of these:
|
56
|
+
| 8 examples, 4 failures |
|
57
|
+
| expected :foo not to be thrown, got :foo |
|
58
|
+
| expected :foo not to be thrown, got :foo with 7 |
|
59
|
+
| expected :foo to be thrown, got nothing |
|
60
|
+
| expected :foo to be thrown, got :bar |
|
61
|
+
|
62
|
+
Scenario: specify thrown symbol and argument
|
63
|
+
Given a file named "throw_symbol_argument_matcher_spec.rb" with:
|
64
|
+
"""
|
65
|
+
describe "throw symbol with argument" do
|
66
|
+
specify { expect { throw :foo, 7 }.to throw_symbol(:foo, 7) }
|
67
|
+
specify { expect { throw :foo, 8 }.to_not throw_symbol(:foo, 7) }
|
68
|
+
specify { expect { throw :bar, 7 }.to_not throw_symbol(:foo, 7) }
|
69
|
+
specify { expect { throw :foo }.to_not throw_symbol(:foo, 7) }
|
70
|
+
|
71
|
+
# deliberate failures
|
72
|
+
specify { expect { throw :foo, 7 }.to_not throw_symbol(:foo, 7) }
|
73
|
+
specify { expect { throw :foo, 8 }.to throw_symbol(:foo, 7) }
|
74
|
+
specify { expect { throw :bar, 7 }.to throw_symbol(:foo, 7) }
|
75
|
+
specify { expect { throw :foo }.to throw_symbol(:foo, 7) }
|
76
|
+
end
|
77
|
+
"""
|
78
|
+
When I run "rspec throw_symbol_argument_matcher_spec.rb"
|
79
|
+
Then the output should contain all of these:
|
80
|
+
| 8 examples, 4 failures |
|
81
|
+
| expected :foo with 7 not to be thrown, got :foo with 7 |
|
82
|
+
| expected :foo with 7 to be thrown, got :foo with 8 |
|
83
|
+
| expected :foo with 7 to be thrown, got :bar |
|
84
|
+
| expected :foo with 7 to be thrown, got :foo with no argument |
|
85
|
+
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: specify types of objects
|
2
2
|
|
3
|
-
rspec-expectations includes two matchers specify types of objects:
|
3
|
+
rspec-expectations includes two matchers to specify types of objects:
|
4
4
|
|
5
5
|
* obj.should be_kind_of(type): calls obj.kind_of?(type), which returns
|
6
6
|
true if type is in obj's class hierarchy or is a module and is
|
@@ -31,12 +31,16 @@ Feature: Test::Unit integration
|
|
31
31
|
array.should be_empty
|
32
32
|
end
|
33
33
|
|
34
|
+
def test_expect_matcher
|
35
|
+
expect { @a = 5 }.to change { @a }.from(nil).to(5)
|
36
|
+
end
|
37
|
+
|
34
38
|
def test_custom_matcher_and_deprecation_warning
|
35
39
|
1.should be_an_int
|
36
40
|
end
|
37
41
|
end
|
38
42
|
"""
|
39
43
|
When I run "ruby rspec_expectations_test.rb"
|
40
|
-
Then the output should contain "
|
44
|
+
Then the output should contain "4 tests, 0 assertions, 1 failures, 0 errors" or "4 tests, 0 assertions, 0 failures, 1 errors"
|
41
45
|
And the output should contain "expected empty? to return true, got false"
|
42
46
|
And the output should contain "be_an_int is deprecated"
|
data/lib/rspec/expectations.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
+
require 'rspec/expectations/extensions'
|
1
2
|
require 'rspec/matchers'
|
2
3
|
require 'rspec/expectations/fail_with'
|
3
4
|
require 'rspec/expectations/errors'
|
4
5
|
require 'rspec/expectations/deprecation'
|
5
|
-
require 'rspec/expectations/extensions'
|
6
6
|
require 'rspec/expectations/handler'
|
7
7
|
require 'rspec/expectations/version'
|
8
8
|
require 'rspec/expectations/backward_compatibility'
|
data/lib/rspec/matchers.rb
CHANGED
@@ -155,10 +155,6 @@ module RSpec
|
|
155
155
|
# end
|
156
156
|
#
|
157
157
|
module Matchers
|
158
|
-
if RSpec.respond_to?(:configure)
|
159
|
-
RSpec.configure {|c| c.include self}
|
160
|
-
end
|
161
|
-
|
162
158
|
# Include Matchers for other test frameworks
|
163
159
|
if defined?(Test::Unit::TestCase)
|
164
160
|
Test::Unit::TestCase.send(:include, self)
|
@@ -177,6 +173,8 @@ require 'rspec/matchers/be'
|
|
177
173
|
require 'rspec/matchers/be_close'
|
178
174
|
require 'rspec/matchers/be_instance_of'
|
179
175
|
require 'rspec/matchers/be_kind_of'
|
176
|
+
require 'rspec/matchers/be_within'
|
177
|
+
require 'rspec/matchers/block_aliases'
|
180
178
|
require 'rspec/matchers/change'
|
181
179
|
require 'rspec/matchers/eq'
|
182
180
|
require 'rspec/matchers/eql'
|
@@ -10,23 +10,8 @@ module RSpec
|
|
10
10
|
#
|
11
11
|
# result.should be_close(3.0, 0.5)
|
12
12
|
def be_close(expected, delta)
|
13
|
-
|
14
|
-
|
15
|
-
(actual - _expected_).abs < _delta_
|
16
|
-
end
|
17
|
-
|
18
|
-
failure_message_for_should do |actual|
|
19
|
-
"expected #{_expected_} +/- (< #{_delta_}), got #{actual}"
|
20
|
-
end
|
21
|
-
|
22
|
-
failure_message_for_should_not do |actual|
|
23
|
-
"expected #{_expected_} +/- (< #{_delta_}), got #{actual}"
|
24
|
-
end
|
25
|
-
|
26
|
-
description do
|
27
|
-
"be close to #{_expected_} (within +- #{_delta_})"
|
28
|
-
end
|
29
|
-
end
|
13
|
+
RSpec.deprecate("be_close(#{expected}, #{delta})", "be_within(#{delta}).of(#{expected})")
|
14
|
+
be_within(delta).of(expected)
|
30
15
|
end
|
31
16
|
end
|
32
17
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Matchers
|
3
|
+
# :call-seq:
|
4
|
+
# should be_within(delta).of(expected)
|
5
|
+
# should_not be_within(delta).of(expected)
|
6
|
+
#
|
7
|
+
# Passes if actual == expected +/- delta
|
8
|
+
#
|
9
|
+
# == Example
|
10
|
+
#
|
11
|
+
# result.should be_within(0.5).of(3.0)
|
12
|
+
def be_within(delta)
|
13
|
+
Matcher.new :be_within, delta do |_delta_|
|
14
|
+
chain :of do |_expected_|
|
15
|
+
@_expected = _expected_
|
16
|
+
end
|
17
|
+
|
18
|
+
match do |actual|
|
19
|
+
unless @_expected
|
20
|
+
raise ArgumentError.new("You must set an expected value using #of: be_within(#{_delta_}).of(expected_value)")
|
21
|
+
end
|
22
|
+
(actual - @_expected).abs < _delta_
|
23
|
+
end
|
24
|
+
|
25
|
+
failure_message_for_should do |actual|
|
26
|
+
"expected #{actual} to #{description}"
|
27
|
+
end
|
28
|
+
|
29
|
+
failure_message_for_should_not do |actual|
|
30
|
+
"expected #{actual} not to #{description}"
|
31
|
+
end
|
32
|
+
|
33
|
+
description do
|
34
|
+
"be within #{_delta_} of #{@_expected}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Matchers
|
3
|
+
module BlockAliases
|
4
|
+
alias_method :to, :should
|
5
|
+
alias_method :to_not, :should_not
|
6
|
+
end
|
7
|
+
|
8
|
+
# Extends the submitted block with aliases to and to_not
|
9
|
+
# for should and should_not. Allows expectations like this:
|
10
|
+
#
|
11
|
+
# expect { this_block }.to change{this.expression}.from(old_value).to(new_value)
|
12
|
+
# expect { this_block }.to raise_error
|
13
|
+
def expect(&block)
|
14
|
+
block.extend BlockAliases
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
data/lib/rspec/matchers/have.rb
CHANGED
@@ -4,7 +4,7 @@ module RSpec
|
|
4
4
|
def initialize(expected, relativity=:exactly)
|
5
5
|
@expected = (expected == :no ? 0 : expected)
|
6
6
|
@relativity = relativity
|
7
|
-
@actual = nil
|
7
|
+
@actual = @collection_name = @plural_collection_name = nil
|
8
8
|
end
|
9
9
|
|
10
10
|
def relativities
|
@@ -75,7 +75,7 @@ EOF
|
|
75
75
|
|
76
76
|
def method_missing(sym, *args, &block)
|
77
77
|
@collection_name = sym
|
78
|
-
if inflector = (defined?(ActiveSupport::Inflector) ? ActiveSupport::Inflector : (defined?(Inflector) ? Inflector : nil))
|
78
|
+
if inflector = (defined?(ActiveSupport::Inflector) && ActiveSupport::Inflector.respond_to?(:pluralize) ? ActiveSupport::Inflector : (defined?(Inflector) ? Inflector : nil))
|
79
79
|
@plural_collection_name = inflector.pluralize(sym.to_s)
|
80
80
|
end
|
81
81
|
@args = args
|
@@ -11,7 +11,9 @@ module RSpec
|
|
11
11
|
@expected = expected
|
12
12
|
@actual = nil
|
13
13
|
@diffable = false
|
14
|
-
@expected_exception, @rescued_exception = nil
|
14
|
+
@expected_exception, @rescued_exception = nil, nil
|
15
|
+
@match_for_should_not_block = nil
|
16
|
+
|
15
17
|
@messages = {
|
16
18
|
:description => lambda {"#{name_to_sentence}#{expected_to_sentence}"},
|
17
19
|
:failure_message_for_should => lambda {|actual| "expected #{actual.inspect} to #{name_to_sentence}#{expected_to_sentence}"},
|
@@ -97,11 +99,9 @@ module RSpec
|
|
97
99
|
|
98
100
|
# See RSpec::Matchers
|
99
101
|
def chain(method, &block)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
self
|
104
|
-
end
|
102
|
+
define_method method do |*args|
|
103
|
+
block.call(*args)
|
104
|
+
self
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
@@ -29,6 +29,15 @@ module RSpec
|
|
29
29
|
eval_match(@actual, operator, expected)
|
30
30
|
end
|
31
31
|
end
|
32
|
+
|
33
|
+
negative_operator = operator.sub(/^=/, '!')
|
34
|
+
if negative_operator != operator && respond_to?(negative_operator)
|
35
|
+
define_method(negative_operator) do |expected|
|
36
|
+
opposite_should = ::RSpec::Matchers.last_should == :should ? :should_not : :should
|
37
|
+
raise "RSpec does not support `#{::RSpec::Matchers.last_should} #{negative_operator} expected`. " +
|
38
|
+
"Use `#{opposite_should} #{operator} expected` instead."
|
39
|
+
end
|
40
|
+
end
|
32
41
|
end
|
33
42
|
|
34
43
|
['==', '===', '=~', '>', '>=', '<', '<='].each do |operator|
|
@@ -19,42 +19,45 @@ module RSpec
|
|
19
19
|
throw :proc_did_not_throw_anything, :nothing_thrown
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
|
+
if @caught_arg == :nothing_thrown
|
24
|
+
@caught_arg = nil
|
25
|
+
else
|
26
|
+
@caught_symbol = @expected_symbol
|
27
|
+
end
|
23
28
|
end
|
24
29
|
|
25
30
|
# Ruby 1.8 uses NameError with `symbol'
|
26
31
|
# Ruby 1.9 uses ArgumentError with :symbol
|
27
32
|
rescue NameError, ArgumentError => e
|
28
|
-
|
33
|
+
unless e.message =~ /uncaught throw (`|\:)([a-zA-Z0-9_]*)(')?/
|
34
|
+
other_exception = e
|
35
|
+
raise
|
36
|
+
end
|
29
37
|
@caught_symbol = $2.to_sym
|
30
|
-
|
38
|
+
rescue => other_exception
|
39
|
+
raise
|
31
40
|
ensure
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
if @expected_arg.nil?
|
36
|
-
return @caught_symbol == @expected_symbol
|
41
|
+
unless other_exception
|
42
|
+
if @expected_symbol.nil?
|
43
|
+
return !@caught_symbol.nil?
|
37
44
|
else
|
38
|
-
|
45
|
+
if @expected_arg.nil?
|
46
|
+
return @caught_symbol == @expected_symbol
|
47
|
+
else
|
48
|
+
return (@caught_symbol == @expected_symbol) & (@caught_arg == @expected_arg)
|
49
|
+
end
|
39
50
|
end
|
40
51
|
end
|
41
52
|
end
|
42
53
|
end
|
43
54
|
|
44
55
|
def failure_message_for_should
|
45
|
-
|
46
|
-
"expected #{expected}, got #{@caught_symbol.inspect}"
|
47
|
-
else
|
48
|
-
"expected #{expected} but nothing was thrown"
|
49
|
-
end
|
56
|
+
"expected #{expected} to be thrown, got #{caught}"
|
50
57
|
end
|
51
58
|
|
52
59
|
def failure_message_for_should_not
|
53
|
-
if @expected_symbol
|
54
|
-
"expected #{expected} not to be thrown"
|
55
|
-
else
|
56
|
-
"expected no Symbol, got :#{@caught_symbol}"
|
57
|
-
end
|
60
|
+
"expected #{expected('no Symbol')}#{' not' if @expected_symbol} to be thrown, got #{caught}"
|
58
61
|
end
|
59
62
|
|
60
63
|
def description
|
@@ -62,15 +65,29 @@ module RSpec
|
|
62
65
|
end
|
63
66
|
|
64
67
|
private
|
65
|
-
|
66
|
-
def expected
|
67
|
-
@expected_symbol
|
68
|
+
|
69
|
+
def expected(symbol_desc = 'a Symbol')
|
70
|
+
throw_description(@expected_symbol || symbol_desc, @expected_arg)
|
68
71
|
end
|
69
|
-
|
70
|
-
def
|
71
|
-
@
|
72
|
+
|
73
|
+
def caught
|
74
|
+
throw_description(@caught_symbol || 'nothing', @caught_arg)
|
72
75
|
end
|
73
|
-
|
76
|
+
|
77
|
+
def throw_description(symbol, arg)
|
78
|
+
symbol_description = symbol.is_a?(String) ? symbol : symbol.inspect
|
79
|
+
|
80
|
+
arg_description = if arg
|
81
|
+
" with #{arg.inspect}"
|
82
|
+
elsif @expected_arg && @caught_symbol == @expected_symbol
|
83
|
+
" with no argument"
|
84
|
+
else
|
85
|
+
""
|
86
|
+
end
|
87
|
+
|
88
|
+
symbol_description + arg_description
|
89
|
+
end
|
90
|
+
|
74
91
|
end
|
75
92
|
|
76
93
|
# :call-seq:
|
data/rspec-expectations.gemspec
CHANGED
@@ -22,10 +22,6 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.rdoc_options = ["--charset=UTF-8"]
|
23
23
|
s.require_path = "lib"
|
24
24
|
|
25
|
-
s.add_runtime_dependency 'diff-lcs', '
|
26
|
-
s.add_development_dependency 'cucumber', ">= 0.6.2"
|
27
|
-
s.add_development_dependency 'aruba', ">= 0.1.1"
|
28
|
-
s.add_development_dependency 'rspec-core', "~> 2.0.1"
|
29
|
-
s.add_development_dependency 'rspec-mocks', "~> 2.0.1"
|
25
|
+
s.add_runtime_dependency 'diff-lcs', '~> 1.1.2'
|
30
26
|
end
|
31
27
|
|
@@ -1,49 +1,21 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
|
2
3
|
module RSpec
|
3
4
|
module Matchers
|
4
5
|
describe "[actual.should] be_close(expected, delta)" do
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
it "matches when actual < (expected + delta)" do
|
9
|
-
be_close(5.0, 0.5).matches?(5.49).should be_true
|
10
|
-
end
|
11
|
-
it "matches when actual > (expected - delta)" do
|
12
|
-
be_close(5.0, 0.5).matches?(4.51).should be_true
|
13
|
-
end
|
14
|
-
it "does not match when actual == (expected - delta)" do
|
15
|
-
be_close(5.0, 0.5).matches?(4.5).should be_false
|
16
|
-
end
|
17
|
-
it "does not match when actual < (expected - delta)" do
|
18
|
-
be_close(5.0, 0.5).matches?(4.49).should be_false
|
19
|
-
end
|
20
|
-
it "does not match when actual == (expected + delta)" do
|
21
|
-
be_close(5.0, 0.5).matches?(5.5).should be_false
|
22
|
-
end
|
23
|
-
it "does not match when actual > (expected + delta)" do
|
24
|
-
be_close(5.0, 0.5).matches?(5.51).should be_false
|
25
|
-
end
|
26
|
-
it "provides a failure message for should" do
|
27
|
-
#given
|
28
|
-
matcher = be_close(5.0, 0.5)
|
29
|
-
#when
|
30
|
-
matcher.matches?(5.51)
|
31
|
-
#then
|
32
|
-
matcher.failure_message_for_should.should == "expected 5.0 +/- (< 0.5), got 5.51"
|
6
|
+
before(:each) do
|
7
|
+
RSpec.stub(:warn)
|
33
8
|
end
|
34
9
|
|
35
|
-
it "
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
matcher.matches?(5.49)
|
40
|
-
#then
|
41
|
-
matcher.failure_message_for_should_not.should == "expected 5.0 +/- (< 0.5), got 5.49"
|
10
|
+
it "delegates to be_within(delta).of(expected)" do
|
11
|
+
should_receive(:be_within).with(0.5).and_return( be_within_matcher = stub )
|
12
|
+
be_within_matcher.should_receive(:of).with(3.0)
|
13
|
+
be_close(3.0, 0.5)
|
42
14
|
end
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
15
|
+
|
16
|
+
it "prints a deprecation warning" do
|
17
|
+
RSpec.should_receive(:warn).with(/please use be_within.*instead/)
|
18
|
+
be_close(3.0, 0.5)
|
47
19
|
end
|
48
20
|
end
|
49
21
|
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "should be_predicate" do
|
4
|
+
it "allows other undefined methods to raise errors as normal" do
|
5
|
+
expect { some_undefined_method }.to raise_error(NameError)
|
6
|
+
end
|
7
|
+
|
4
8
|
it "passes when actual returns true for :predicate?" do
|
5
9
|
actual = stub("actual", :happy? => true)
|
6
10
|
actual.should be_happy
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RSpec
|
4
|
+
module Matchers
|
5
|
+
describe "[actual.should] be_within(delta).of(expected)" do
|
6
|
+
it "matches when actual == expected" do
|
7
|
+
be_within(0.5).of(5.0).matches?(5.0).should be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
it "matches when actual < (expected + delta)" do
|
11
|
+
be_within(0.5).of(5.0).matches?(5.49).should be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
it "matches when actual > (expected - delta)" do
|
15
|
+
be_within(0.5).of(5.0).matches?(4.51).should be_true
|
16
|
+
end
|
17
|
+
|
18
|
+
it "does not match when actual == (expected - delta)" do
|
19
|
+
be_within(0.5).of(5.0).matches?(4.5).should be_false
|
20
|
+
end
|
21
|
+
|
22
|
+
it "does not match when actual < (expected - delta)" do
|
23
|
+
be_within(0.5).of(5.0).matches?(4.49).should be_false
|
24
|
+
end
|
25
|
+
|
26
|
+
it "does not match when actual == (expected + delta)" do
|
27
|
+
be_within(0.5).of(5.0).matches?(5.5).should be_false
|
28
|
+
end
|
29
|
+
|
30
|
+
it "does not match when actual > (expected + delta)" do
|
31
|
+
be_within(0.5).of(5.0).matches?(5.51).should be_false
|
32
|
+
end
|
33
|
+
|
34
|
+
it "provides a failure message for should" do
|
35
|
+
#given
|
36
|
+
matcher = be_within(0.5).of(5.0)
|
37
|
+
#when
|
38
|
+
matcher.matches?(5.51)
|
39
|
+
#then
|
40
|
+
matcher.failure_message_for_should.should == "expected 5.51 to be within 0.5 of 5.0"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "provides a failure message for should not" do
|
44
|
+
#given
|
45
|
+
matcher = be_within(0.5).of(5.0)
|
46
|
+
#when
|
47
|
+
matcher.matches?(5.49)
|
48
|
+
#then
|
49
|
+
matcher.failure_message_for_should_not.should == "expected 5.49 not to be within 0.5 of 5.0"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "provides a description" do
|
53
|
+
matcher = be_within(0.5).of(5.0)
|
54
|
+
matcher.matches?(5.1)
|
55
|
+
matcher.description.should == "be within 0.5 of 5.0"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "raises an error if no expected value is given" do
|
59
|
+
matcher = be_within(0.5)
|
60
|
+
expect { matcher.matches?(5.1) }.to raise_error(ArgumentError, /must set an expected value using #of/)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -4,7 +4,7 @@ require 'stringio'
|
|
4
4
|
describe "have matcher" do
|
5
5
|
|
6
6
|
before(:each) do
|
7
|
-
if defined?(::ActiveSupport::Inflector)
|
7
|
+
if defined?(::ActiveSupport::Inflector) && ::ActiveSupport::Inflector.respond_to?(:pluralize)
|
8
8
|
@active_support_was_defined = true
|
9
9
|
else
|
10
10
|
@active_support_was_defined = false
|
@@ -68,6 +68,16 @@ describe 'should have(1).item when ActiveSupport::Inflector is defined' do
|
|
68
68
|
owner = create_collection_owner_with(1)
|
69
69
|
owner.should have(1).item
|
70
70
|
end
|
71
|
+
|
72
|
+
context "when ActiveSupport::Inflector is partially loaded without its inflectors" do
|
73
|
+
|
74
|
+
it "does not pluralize the collection name" do
|
75
|
+
(class << ::ActiveSupport::Inflector; self; end).send :undef_method, :pluralize
|
76
|
+
owner = create_collection_owner_with(1)
|
77
|
+
expect { owner.should have(1).item }.to raise_error(NoMethodError)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
71
81
|
|
72
82
|
after(:each) do
|
73
83
|
unless @active_support_was_defined
|
@@ -334,6 +334,14 @@ module RSpec
|
|
334
334
|
matcher.expecting('value').matches?('other value').should be_false
|
335
335
|
end
|
336
336
|
|
337
|
+
it "prevents name collisions on chainable methods from different matchers" do
|
338
|
+
m1 = RSpec::Matchers::Matcher.new(:m1) { chain(:foo) { raise "foo in m1" } }
|
339
|
+
m2 = RSpec::Matchers::Matcher.new(:m2) { chain(:foo) { raise "foo in m2" } }
|
340
|
+
|
341
|
+
expect { m1.foo }.to raise_error("foo in m1")
|
342
|
+
expect { m2.foo }.to raise_error("foo in m2")
|
343
|
+
end
|
344
|
+
|
337
345
|
context "defined using the dsl" do
|
338
346
|
def a_method_in_the_example
|
339
347
|
"method defined in the example"
|
@@ -21,6 +21,32 @@ describe "should ==" do
|
|
21
21
|
|
22
22
|
end
|
23
23
|
|
24
|
+
describe "unsupported operators", :ruby => '1.9' do
|
25
|
+
it "raises an appropriate error for should != expected" do
|
26
|
+
expect {
|
27
|
+
"apple".should != "pear"
|
28
|
+
}.to raise_error(/does not support `should != expected`. Use `should_not == expected`/)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "raises an appropriate error for should_not != expected" do
|
32
|
+
expect {
|
33
|
+
"apple".should_not != "pear"
|
34
|
+
}.to raise_error(/does not support `should_not != expected`. Use `should == expected`/)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "raises an appropriate error for should !~ expected" do
|
38
|
+
expect {
|
39
|
+
"apple".should !~ /regex/
|
40
|
+
}.to raise_error(/does not support `should !~ expected`. Use `should_not =~ expected`/)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "raises an appropriate error for should_not !~ expected" do
|
44
|
+
expect {
|
45
|
+
"apple".should_not !~ /regex/
|
46
|
+
}.to raise_error(/does not support `should_not !~ expected`. Use `should =~ expected`/)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
24
50
|
describe "should_not ==" do
|
25
51
|
|
26
52
|
it "delegates message to target" do
|
@@ -17,11 +17,11 @@ module RSpec
|
|
17
17
|
end
|
18
18
|
it "provides a failure message" do
|
19
19
|
@matcher.matches?(lambda{})
|
20
|
-
@matcher.failure_message_for_should.should == "expected a Symbol
|
20
|
+
@matcher.failure_message_for_should.should == "expected a Symbol to be thrown, got nothing"
|
21
21
|
end
|
22
22
|
it "provides a negative failure message" do
|
23
23
|
@matcher.matches?(lambda{ throw :sym})
|
24
|
-
@matcher.failure_message_for_should_not.should == "expected no Symbol, got :sym"
|
24
|
+
@matcher.failure_message_for_should_not.should == "expected no Symbol to be thrown, got :sym"
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -42,18 +42,20 @@ module RSpec
|
|
42
42
|
end
|
43
43
|
it "provides a failure message when no Symbol is thrown" do
|
44
44
|
@matcher.matches?(lambda{})
|
45
|
-
@matcher.failure_message_for_should.should == "expected :sym
|
45
|
+
@matcher.failure_message_for_should.should == "expected :sym to be thrown, got nothing"
|
46
46
|
end
|
47
47
|
it "provides a failure message when wrong Symbol is thrown" do
|
48
48
|
@matcher.matches?(lambda{ throw :other_sym })
|
49
|
-
@matcher.failure_message_for_should.should == "expected :sym, got :other_sym"
|
49
|
+
@matcher.failure_message_for_should.should == "expected :sym to be thrown, got :other_sym"
|
50
50
|
end
|
51
51
|
it "provides a negative failure message" do
|
52
52
|
@matcher.matches?(lambda{ throw :sym })
|
53
|
-
@matcher.failure_message_for_should_not.should == "expected :sym not to be thrown"
|
53
|
+
@matcher.failure_message_for_should_not.should == "expected :sym not to be thrown, got :sym"
|
54
54
|
end
|
55
55
|
it "only matches NameErrors raised by uncaught throws" do
|
56
|
-
|
56
|
+
expect {
|
57
|
+
@matcher.matches?(lambda{ sym }).should be_false
|
58
|
+
}.to raise_error(NameError)
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
@@ -77,18 +79,33 @@ module RSpec
|
|
77
79
|
end
|
78
80
|
it "provides a failure message when no Symbol is thrown" do
|
79
81
|
@matcher.matches?(lambda{})
|
80
|
-
@matcher.failure_message_for_should.should == %q[expected :sym with "a"
|
82
|
+
@matcher.failure_message_for_should.should == %q[expected :sym with "a" to be thrown, got nothing]
|
81
83
|
end
|
82
84
|
it "provides a failure message when wrong Symbol is thrown" do
|
83
85
|
@matcher.matches?(lambda{ throw :other_sym })
|
84
|
-
@matcher.failure_message_for_should.should == %q[expected :sym with "a", got :other_sym]
|
86
|
+
@matcher.failure_message_for_should.should == %q[expected :sym with "a" to be thrown, got :other_sym]
|
87
|
+
end
|
88
|
+
it "provides a failure message when wrong arg is thrown" do
|
89
|
+
@matcher.matches?(lambda{ throw :sym, "b" })
|
90
|
+
@matcher.failure_message_for_should.should == %q[expected :sym with "a" to be thrown, got :sym with "b"]
|
91
|
+
end
|
92
|
+
it "provides a failure message when no arg is thrown" do
|
93
|
+
@matcher.matches?(lambda{ throw :sym })
|
94
|
+
@matcher.failure_message_for_should.should == %q[expected :sym with "a" to be thrown, got :sym with no argument]
|
85
95
|
end
|
86
96
|
it "provides a negative failure message" do
|
87
97
|
@matcher.matches?(lambda{ throw :sym })
|
88
|
-
@matcher.failure_message_for_should_not.should == %q[expected :sym with "a" not to be thrown]
|
98
|
+
@matcher.failure_message_for_should_not.should == %q[expected :sym with "a" not to be thrown, got :sym with no argument]
|
89
99
|
end
|
90
100
|
it "only matches NameErrors raised by uncaught throws" do
|
91
|
-
|
101
|
+
expect {
|
102
|
+
@matcher.matches?(lambda{ sym }).should be_false
|
103
|
+
}.to raise_error(NameError)
|
104
|
+
end
|
105
|
+
it "raises other errors" do
|
106
|
+
expect {
|
107
|
+
@matcher.matches?(lambda { raise "Boom" })
|
108
|
+
}.to raise_error(/Boom/)
|
92
109
|
end
|
93
110
|
end
|
94
111
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
def add_to_load_path(path, prepend=false)
|
2
|
-
path = File.expand_path("
|
2
|
+
path = File.expand_path("../../#{path}/lib", __FILE__)
|
3
3
|
if prepend
|
4
4
|
$LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
|
5
5
|
else
|
@@ -7,10 +7,11 @@ def add_to_load_path(path, prepend=false)
|
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
-
add_to_load_path("
|
11
|
-
add_to_load_path("
|
12
|
-
add_to_load_path("
|
10
|
+
add_to_load_path("rspec-expectations", :prepend)
|
11
|
+
add_to_load_path("rspec-core")
|
12
|
+
add_to_load_path("rspec-mocks")
|
13
13
|
|
14
|
+
require 'rspec/expectations'
|
14
15
|
require 'rspec/core'
|
15
16
|
require 'rspec/mocks'
|
16
17
|
|
@@ -49,5 +50,17 @@ RSpec::configure do |config|
|
|
49
50
|
config.include RSpec::Mocks::Methods
|
50
51
|
config.color_enabled = true
|
51
52
|
config.filter_run :focused => true
|
53
|
+
|
54
|
+
config.filter_run_excluding :ruby => lambda {|version|
|
55
|
+
case version.to_s
|
56
|
+
when "!jruby"
|
57
|
+
RUBY_ENGINE != "jruby"
|
58
|
+
when /^> (.*)/
|
59
|
+
!(RUBY_VERSION.to_s > $1)
|
60
|
+
else
|
61
|
+
!(RUBY_VERSION.to_s =~ /^#{version.to_s}/)
|
62
|
+
end
|
63
|
+
}
|
64
|
+
|
52
65
|
config.run_all_when_everything_filtered = true
|
53
66
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-expectations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 13
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 2
|
8
|
-
- 0
|
9
7
|
- 1
|
10
|
-
|
8
|
+
- 0
|
9
|
+
version: 2.1.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- David Chelimsky
|
@@ -16,89 +15,24 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2010-
|
18
|
+
date: 2010-11-07 01:00:00 -05:00
|
20
19
|
default_executable:
|
21
20
|
dependencies:
|
22
21
|
- !ruby/object:Gem::Dependency
|
23
|
-
|
22
|
+
name: diff-lcs
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
hash: 23
|
29
28
|
segments:
|
30
29
|
- 1
|
31
30
|
- 1
|
32
31
|
- 2
|
33
32
|
version: 1.1.2
|
34
|
-
requirement: *id001
|
35
33
|
type: :runtime
|
36
|
-
name: diff-lcs
|
37
|
-
prerelease: false
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
|
-
none: false
|
41
|
-
requirements:
|
42
|
-
- - ">="
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 3
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
- 6
|
48
|
-
- 2
|
49
|
-
version: 0.6.2
|
50
|
-
requirement: *id002
|
51
|
-
type: :development
|
52
|
-
name: cucumber
|
53
|
-
prerelease: false
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
version_requirements: &id003 !ruby/object:Gem::Requirement
|
56
|
-
none: false
|
57
|
-
requirements:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
hash: 25
|
61
|
-
segments:
|
62
|
-
- 0
|
63
|
-
- 1
|
64
|
-
- 1
|
65
|
-
version: 0.1.1
|
66
|
-
requirement: *id003
|
67
|
-
type: :development
|
68
|
-
name: aruba
|
69
|
-
prerelease: false
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
version_requirements: &id004 !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
|
-
requirements:
|
74
|
-
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
hash: 13
|
77
|
-
segments:
|
78
|
-
- 2
|
79
|
-
- 0
|
80
|
-
- 1
|
81
|
-
version: 2.0.1
|
82
|
-
requirement: *id004
|
83
|
-
type: :development
|
84
|
-
name: rspec-core
|
85
|
-
prerelease: false
|
86
|
-
- !ruby/object:Gem::Dependency
|
87
|
-
version_requirements: &id005 !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
|
-
requirements:
|
90
|
-
- - ~>
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
hash: 13
|
93
|
-
segments:
|
94
|
-
- 2
|
95
|
-
- 0
|
96
|
-
- 1
|
97
|
-
version: 2.0.1
|
98
|
-
requirement: *id005
|
99
|
-
type: :development
|
100
|
-
name: rspec-mocks
|
101
34
|
prerelease: false
|
35
|
+
version_requirements: *id001
|
102
36
|
description: rspec expectations (should[_not] and matchers)
|
103
37
|
email: dchelimsky@gmail.com;chad.humphries@gmail.com
|
104
38
|
executables: []
|
@@ -123,11 +57,13 @@ files:
|
|
123
57
|
- features/expectations/diffing.feature
|
124
58
|
- features/expectations/implicit_docstrings.feature
|
125
59
|
- features/matchers/access_running_example.feature
|
60
|
+
- features/matchers/be_within.feature
|
126
61
|
- features/matchers/define_diffable_matcher.feature
|
127
62
|
- features/matchers/define_matcher.feature
|
128
63
|
- features/matchers/define_matcher_outside_rspec.feature
|
129
64
|
- features/matchers/define_matcher_with_fluent_interface.feature
|
130
65
|
- features/matchers/equality.feature
|
66
|
+
- features/matchers/exist.feature
|
131
67
|
- features/matchers/expect_change.feature
|
132
68
|
- features/matchers/expect_error.feature
|
133
69
|
- features/matchers/have.feature
|
@@ -135,6 +71,8 @@ files:
|
|
135
71
|
- features/matchers/operators.feature
|
136
72
|
- features/matchers/predicates.feature
|
137
73
|
- features/matchers/respond_to.feature
|
74
|
+
- features/matchers/satisfy.feature
|
75
|
+
- features/matchers/throw_symbol.feature
|
138
76
|
- features/matchers/types.feature
|
139
77
|
- features/step_definitions/additional_cli_steps.rb
|
140
78
|
- features/support/env.rb
|
@@ -148,7 +86,6 @@ files:
|
|
148
86
|
- lib/rspec/expectations/extensions.rb
|
149
87
|
- lib/rspec/expectations/extensions/array.rb
|
150
88
|
- lib/rspec/expectations/extensions/kernel.rb
|
151
|
-
- lib/rspec/expectations/extensions/rspec/core/example_group.rb
|
152
89
|
- lib/rspec/expectations/fail_with.rb
|
153
90
|
- lib/rspec/expectations/handler.rb
|
154
91
|
- lib/rspec/expectations/version.rb
|
@@ -157,6 +94,8 @@ files:
|
|
157
94
|
- lib/rspec/matchers/be_close.rb
|
158
95
|
- lib/rspec/matchers/be_instance_of.rb
|
159
96
|
- lib/rspec/matchers/be_kind_of.rb
|
97
|
+
- lib/rspec/matchers/be_within.rb
|
98
|
+
- lib/rspec/matchers/block_aliases.rb
|
160
99
|
- lib/rspec/matchers/change.rb
|
161
100
|
- lib/rspec/matchers/compatibility.rb
|
162
101
|
- lib/rspec/matchers/dsl.rb
|
@@ -189,6 +128,7 @@ files:
|
|
189
128
|
- spec/rspec/matchers/be_instance_of_spec.rb
|
190
129
|
- spec/rspec/matchers/be_kind_of_spec.rb
|
191
130
|
- spec/rspec/matchers/be_spec.rb
|
131
|
+
- spec/rspec/matchers/be_within_spec.rb
|
192
132
|
- spec/rspec/matchers/change_spec.rb
|
193
133
|
- spec/rspec/matchers/compatibility_spec.rb
|
194
134
|
- spec/rspec/matchers/description_generation_spec.rb
|
@@ -227,7 +167,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
227
167
|
requirements:
|
228
168
|
- - ">="
|
229
169
|
- !ruby/object:Gem::Version
|
230
|
-
hash:
|
170
|
+
hash: -1883027973330642761
|
231
171
|
segments:
|
232
172
|
- 0
|
233
173
|
version: "0"
|
@@ -236,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
236
176
|
requirements:
|
237
177
|
- - ">="
|
238
178
|
- !ruby/object:Gem::Version
|
239
|
-
hash:
|
179
|
+
hash: -1883027973330642761
|
240
180
|
segments:
|
241
181
|
- 0
|
242
182
|
version: "0"
|
@@ -246,7 +186,7 @@ rubyforge_project: rspec
|
|
246
186
|
rubygems_version: 1.3.7
|
247
187
|
signing_key:
|
248
188
|
specification_version: 3
|
249
|
-
summary: rspec-expectations-2.0
|
189
|
+
summary: rspec-expectations-2.1.0
|
250
190
|
test_files:
|
251
191
|
- features/README.markdown
|
252
192
|
- features/expectations/attribute_of_subject.feature
|
@@ -254,11 +194,13 @@ test_files:
|
|
254
194
|
- features/expectations/diffing.feature
|
255
195
|
- features/expectations/implicit_docstrings.feature
|
256
196
|
- features/matchers/access_running_example.feature
|
197
|
+
- features/matchers/be_within.feature
|
257
198
|
- features/matchers/define_diffable_matcher.feature
|
258
199
|
- features/matchers/define_matcher.feature
|
259
200
|
- features/matchers/define_matcher_outside_rspec.feature
|
260
201
|
- features/matchers/define_matcher_with_fluent_interface.feature
|
261
202
|
- features/matchers/equality.feature
|
203
|
+
- features/matchers/exist.feature
|
262
204
|
- features/matchers/expect_change.feature
|
263
205
|
- features/matchers/expect_error.feature
|
264
206
|
- features/matchers/have.feature
|
@@ -266,6 +208,8 @@ test_files:
|
|
266
208
|
- features/matchers/operators.feature
|
267
209
|
- features/matchers/predicates.feature
|
268
210
|
- features/matchers/respond_to.feature
|
211
|
+
- features/matchers/satisfy.feature
|
212
|
+
- features/matchers/throw_symbol.feature
|
269
213
|
- features/matchers/types.feature
|
270
214
|
- features/step_definitions/additional_cli_steps.rb
|
271
215
|
- features/support/env.rb
|
@@ -278,6 +222,7 @@ test_files:
|
|
278
222
|
- spec/rspec/matchers/be_instance_of_spec.rb
|
279
223
|
- spec/rspec/matchers/be_kind_of_spec.rb
|
280
224
|
- spec/rspec/matchers/be_spec.rb
|
225
|
+
- spec/rspec/matchers/be_within_spec.rb
|
281
226
|
- spec/rspec/matchers/change_spec.rb
|
282
227
|
- spec/rspec/matchers/compatibility_spec.rb
|
283
228
|
- spec/rspec/matchers/description_generation_spec.rb
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module RSpec
|
2
|
-
module Core
|
3
|
-
class ExampleGroup
|
4
|
-
module BlockAliases
|
5
|
-
alias_method :to, :should
|
6
|
-
alias_method :to_not, :should_not
|
7
|
-
end
|
8
|
-
|
9
|
-
# Extends the submitted block with aliases to and to_not
|
10
|
-
# for should and should_not. Allows expectations like this:
|
11
|
-
#
|
12
|
-
# expect { this_block }.to change{this.expression}.from(old_value).to(new_value)
|
13
|
-
# expect { this_block }.to raise_error
|
14
|
-
def expect(&block)
|
15
|
-
block.extend BlockAliases
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|