dchelimsky-rspec 1.1.11.7 → 1.1.12
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/History.txt +1 -1
- data/features/support/helpers/story_helper.rb +0 -3
- data/lib/spec/example/example_group_methods.rb +1 -1
- data/lib/spec/matchers.rb +1 -1
- data/lib/spec/mocks.rb +3 -3
- data/lib/spec/mocks/argument_expectation.rb +14 -14
- data/lib/spec/mocks/framework.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +1 -1
- data/lib/spec/mocks/mock.rb +3 -4
- data/lib/spec/mocks/spec_methods.rb +10 -1
- data/lib/spec/version.rb +2 -2
- data/rspec.gemspec +3 -3
- data/spec/spec/mocks/hash_including_matcher_spec.rb +4 -4
- data/spec/spec/mocks/hash_not_including_matcher_spec.rb +3 -3
- data/spec/spec/mocks/mock_spec.rb +25 -0
- data/spec/spec/runner/reporter_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -1
- metadata +3 -3
- data/lib/spec/mocks/argument_constraints.rb +0 -237
- data/lib/spec/runner/formatter/story/html_formatter.rb +0 -174
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +0 -194
- data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +0 -42
- data/lib/spec/story.rb +0 -10
- data/lib/spec/story/extensions.rb +0 -3
- data/lib/spec/story/extensions/main.rb +0 -86
- data/lib/spec/story/extensions/regexp.rb +0 -9
- data/lib/spec/story/extensions/string.rb +0 -9
- data/lib/spec/story/given_scenario.rb +0 -14
- data/lib/spec/story/runner.rb +0 -57
- data/lib/spec/story/runner/plain_text_story_runner.rb +0 -48
- data/lib/spec/story/runner/scenario_collector.rb +0 -18
- data/lib/spec/story/runner/scenario_runner.rb +0 -54
- data/lib/spec/story/runner/story_mediator.rb +0 -137
- data/lib/spec/story/runner/story_parser.rb +0 -247
- data/lib/spec/story/runner/story_runner.rb +0 -74
- data/lib/spec/story/scenario.rb +0 -14
- data/lib/spec/story/step.rb +0 -70
- data/lib/spec/story/step_group.rb +0 -89
- data/lib/spec/story/step_mother.rb +0 -38
- data/lib/spec/story/story.rb +0 -39
- data/lib/spec/story/world.rb +0 -124
- data/spec/spec/matchers/mock_constraint_matchers_spec.rb +0 -24
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +0 -95
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +0 -145
- data/spec/spec/runner/formatter/story/html_formatter_spec.rb +0 -135
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +0 -600
- data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +0 -82
- data/spec/spec/story/builders.rb +0 -46
- data/spec/spec/story/extensions/main_spec.rb +0 -161
- data/spec/spec/story/extensions_spec.rb +0 -14
- data/spec/spec/story/given_scenario_spec.rb +0 -27
- data/spec/spec/story/runner/plain_text_story_runner_spec.rb +0 -90
- data/spec/spec/story/runner/scenario_collector_spec.rb +0 -27
- data/spec/spec/story/runner/scenario_runner_spec.rb +0 -214
- data/spec/spec/story/runner/story_mediator_spec.rb +0 -143
- data/spec/spec/story/runner/story_parser_spec.rb +0 -401
- data/spec/spec/story/runner/story_runner_spec.rb +0 -294
- data/spec/spec/story/runner_spec.rb +0 -93
- data/spec/spec/story/scenario_spec.rb +0 -18
- data/spec/spec/story/step_group_spec.rb +0 -157
- data/spec/spec/story/step_mother_spec.rb +0 -84
- data/spec/spec/story/step_spec.rb +0 -272
- data/spec/spec/story/story_helper.rb +0 -2
- data/spec/spec/story/story_spec.rb +0 -84
- data/spec/spec/story/world_spec.rb +0 -423
- data/story_server/prototype/javascripts/builder.js +0 -136
- data/story_server/prototype/javascripts/controls.js +0 -972
- data/story_server/prototype/javascripts/dragdrop.js +0 -976
- data/story_server/prototype/javascripts/effects.js +0 -1117
- data/story_server/prototype/javascripts/prototype.js +0 -4140
- data/story_server/prototype/javascripts/rspec.js +0 -149
- data/story_server/prototype/javascripts/scriptaculous.js +0 -58
- data/story_server/prototype/javascripts/slider.js +0 -276
- data/story_server/prototype/javascripts/sound.js +0 -55
- data/story_server/prototype/javascripts/unittest.js +0 -568
- data/story_server/prototype/lib/server.rb +0 -24
- data/story_server/prototype/stories.html +0 -176
- data/story_server/prototype/stylesheets/rspec.css +0 -136
- data/story_server/prototype/stylesheets/test.css +0 -90
data/History.txt
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'spec/story'
|
2
1
|
require File.dirname(__FILE__) + '/../../../spec/ruby_forker'
|
3
2
|
|
4
3
|
module StoryHelper
|
@@ -11,6 +10,4 @@ module StoryHelper
|
|
11
10
|
def cmdline(args, stderr)
|
12
11
|
ruby("#{File.dirname(__FILE__) + '/../../resources/helpers/cmdline.rb'} #{args}", stderr)
|
13
12
|
end
|
14
|
-
|
15
|
-
Spec::Story::World.__send__ :include, self
|
16
13
|
end
|
@@ -118,7 +118,7 @@ WARNING
|
|
118
118
|
# exist (for state expectations)
|
119
119
|
# File.should exist("path/to/file")
|
120
120
|
#
|
121
|
-
# an_instance_of (for mock argument
|
121
|
+
# an_instance_of (for mock argument matchers)
|
122
122
|
# mock.should_receive(:message).with(an_instance_of(String))
|
123
123
|
#
|
124
124
|
# == Examples
|
data/lib/spec/matchers.rb
CHANGED
@@ -31,7 +31,7 @@ module Spec
|
|
31
31
|
# description #optional
|
32
32
|
#
|
33
33
|
# See Spec::Expectations to learn how to use these as Expectation Matchers.
|
34
|
-
# See Spec::Mocks to learn how to use them as Mock Argument
|
34
|
+
# See Spec::Mocks to learn how to use them as Mock Argument Matchers.
|
35
35
|
#
|
36
36
|
# == Predicates
|
37
37
|
#
|
data/lib/spec/mocks.rb
CHANGED
@@ -105,11 +105,11 @@ module Spec
|
|
105
105
|
# my_mock.should_receive(:sym).with(*args)
|
106
106
|
# my_mock.should_not_receive(:sym).with(*args)
|
107
107
|
#
|
108
|
-
# == Argument
|
108
|
+
# == Argument Matchers
|
109
109
|
#
|
110
110
|
# Arguments that are passed to #with are compared with actual arguments received
|
111
111
|
# using == by default. In cases in which you want to specify things about the arguments
|
112
|
-
# rather than the arguments themselves, you can use any of
|
112
|
+
# rather than the arguments themselves, you can use any of RSpec's Expression Matchers.
|
113
113
|
# They don't all make syntactic sense (they were primarily designed for use with
|
114
114
|
# Spec::Expectations), but you are free to create your own custom Spec::Matchers.
|
115
115
|
#
|
@@ -120,7 +120,7 @@ module Spec
|
|
120
120
|
#
|
121
121
|
# my_mock.should_receive(:sym).with(no_args())
|
122
122
|
# my_mock.should_receive(:sym).with(any_args())
|
123
|
-
# my_mock.should_receive(:sym).with(1,
|
123
|
+
# my_mock.should_receive(:sym).with(1, kind_of(Numeric), "b") #2nd argument can any kind of Numeric
|
124
124
|
# my_mock.should_receive(:sym).with(1, boolean(), "b") #2nd argument can true or false
|
125
125
|
# my_mock.should_receive(:sym).with(1, /abc/, "b") #2nd argument can be any String matching the submitted Regexp
|
126
126
|
# my_mock.should_receive(:sym).with(1, anything(), "b") #2nd argument can be anything at all
|
@@ -6,21 +6,21 @@ module Spec
|
|
6
6
|
|
7
7
|
def initialize(args, &block)
|
8
8
|
@args = args
|
9
|
-
@
|
9
|
+
@matchers_block = block
|
10
10
|
|
11
|
-
if
|
11
|
+
if ArgumentMatchers::AnyArgsMatcher === args.first
|
12
12
|
@match_any_args = true
|
13
|
-
elsif
|
14
|
-
@
|
13
|
+
elsif ArgumentMatchers::NoArgsMatcher === args.first
|
14
|
+
@matchers = []
|
15
15
|
else
|
16
|
-
@
|
16
|
+
@matchers = args.collect {|arg| matcher_for(arg)}
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
return
|
22
|
-
return
|
23
|
-
return
|
20
|
+
def matcher_for(arg)
|
21
|
+
return ArgumentMatchers::MatcherMatcher.new(arg) if is_matcher?(arg)
|
22
|
+
return ArgumentMatchers::RegexpMatcher.new(arg) if arg.is_a?(Regexp)
|
23
|
+
return ArgumentMatchers::EqualityProxy.new(arg)
|
24
24
|
end
|
25
25
|
|
26
26
|
def is_matcher?(obj)
|
@@ -28,15 +28,15 @@ module Spec
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def args_match?(given_args)
|
31
|
-
match_any_args? ||
|
31
|
+
match_any_args? || matchers_block_matches?(given_args) || matchers_match?(given_args)
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
35
|
-
@
|
34
|
+
def matchers_block_matches?(given_args)
|
35
|
+
@matchers_block ? @matchers_block.call(*given_args) : nil
|
36
36
|
end
|
37
37
|
|
38
|
-
def
|
39
|
-
@
|
38
|
+
def matchers_match?(given_args)
|
39
|
+
@matchers == given_args
|
40
40
|
end
|
41
41
|
|
42
42
|
def match_any_args?
|
data/lib/spec/mocks/framework.rb
CHANGED
@@ -17,7 +17,7 @@ module Spec
|
|
17
17
|
@return_block = nil
|
18
18
|
@actual_received_count = 0
|
19
19
|
@expected_received_count = expected_received_count
|
20
|
-
@args_expectation = ArgumentExpectation.new([
|
20
|
+
@args_expectation = ArgumentExpectation.new([ArgumentMatchers::AnyArgsMatcher.new])
|
21
21
|
@consecutive = false
|
22
22
|
@exception_to_raise = nil
|
23
23
|
@symbol_to_throw = nil
|
data/lib/spec/mocks/mock.rb
CHANGED
@@ -14,10 +14,9 @@ module Spec
|
|
14
14
|
end
|
15
15
|
|
16
16
|
# This allows for comparing the mock to other objects that proxy such as
|
17
|
-
# ActiveRecords belongs_to proxy objects By making the other object run
|
18
|
-
# the comparison, we're sure the call gets delegated to the proxy
|
19
|
-
#
|
20
|
-
# be safe unless the RHS redefines == in a nonsensical manner
|
17
|
+
# ActiveRecords belongs_to proxy objects. By making the other object run
|
18
|
+
# the comparison, we're sure the call gets delegated to the proxy
|
19
|
+
# target.
|
21
20
|
def ==(other)
|
22
21
|
other == __mock_proxy
|
23
22
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Spec
|
2
2
|
module Mocks
|
3
3
|
module ExampleMethods
|
4
|
-
include Spec::Mocks::
|
4
|
+
include Spec::Mocks::ArgumentMatchers
|
5
5
|
|
6
6
|
# Shortcut for creating an instance of Spec::Mocks::Mock.
|
7
7
|
#
|
@@ -26,10 +26,19 @@ module Spec
|
|
26
26
|
|
27
27
|
alias :stub :mock
|
28
28
|
|
29
|
+
# DEPRECATED - use mock('name').as_null_object instead
|
30
|
+
#
|
29
31
|
# Shortcut for creating a mock object that will return itself in response
|
30
32
|
# to any message it receives that it hasn't been explicitly instructed
|
31
33
|
# to respond to.
|
32
34
|
def stub_everything(name = 'stub')
|
35
|
+
Kernel.warn(<<-WARNING)
|
36
|
+
|
37
|
+
DEPRECATION: stub_everything('#{name}') is deprecated and will be removed
|
38
|
+
from a future version of rspec. Please use mock('#{name}').as_null_object
|
39
|
+
or stub('#{name}').as_null_object instead.
|
40
|
+
|
41
|
+
WARNING
|
33
42
|
mock(name, :null_object => true)
|
34
43
|
end
|
35
44
|
|
data/lib/spec/version.rb
CHANGED
data/rspec.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rspec}
|
5
|
-
s.version = "1.1.
|
5
|
+
s.version = "1.1.12"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["RSpec Development Team"]
|
9
|
-
s.date = %q{2009-01-
|
9
|
+
s.date = %q{2009-01-11}
|
10
10
|
s.description = %q{Behaviour Driven Development for Ruby.}
|
11
11
|
s.email = ["rspec-devel@rubyforge.org"]
|
12
12
|
s.executables = ["autospec", "spec"]
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
s.rubyforge_project = %q{rspec}
|
20
20
|
s.rubygems_version = %q{1.3.1}
|
21
|
-
s.summary = %q{rspec 1.1.
|
21
|
+
s.summary = %q{rspec 1.1.12}
|
22
22
|
|
23
23
|
if s.respond_to? :specification_version then
|
24
24
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
@@ -2,11 +2,11 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
2
|
|
3
3
|
module Spec
|
4
4
|
module Mocks
|
5
|
-
module
|
6
|
-
describe
|
5
|
+
module ArgumentMatchers
|
6
|
+
describe HashIncludingMatcher do
|
7
7
|
|
8
8
|
it "should describe itself properly" do
|
9
|
-
|
9
|
+
HashIncludingMatcher.new(:a => 1).description.should == "hash_including(:a=>1)"
|
10
10
|
end
|
11
11
|
|
12
12
|
describe "passing" do
|
@@ -18,7 +18,7 @@ module Spec
|
|
18
18
|
hash_including(:a => 1).should == {:a => 1, :b => 2}
|
19
19
|
end
|
20
20
|
|
21
|
-
describe "when matching against other
|
21
|
+
describe "when matching against other matchers" do
|
22
22
|
it "should match an int against anything()" do
|
23
23
|
hash_including(:a => anything, :b => 2).should == {:a => 1, :b => 2}
|
24
24
|
end
|
@@ -2,11 +2,11 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
2
|
|
3
3
|
module Spec
|
4
4
|
module Mocks
|
5
|
-
module
|
6
|
-
describe
|
5
|
+
module ArgumentMatchers
|
6
|
+
describe HashNotIncludingMatcher do
|
7
7
|
|
8
8
|
it "should describe itself properly" do
|
9
|
-
|
9
|
+
HashNotIncludingMatcher.new(:a => 5).description.should == "hash_not_including(:a=>5)"
|
10
10
|
end
|
11
11
|
|
12
12
|
describe "passing" do
|
@@ -11,6 +11,21 @@ module Spec
|
|
11
11
|
@mock.rspec_reset
|
12
12
|
end
|
13
13
|
|
14
|
+
describe "deprecated #stub_everything method" do
|
15
|
+
before(:each) do
|
16
|
+
Kernel.stub!(:warn)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "creates a mock that behaves as a null object" do
|
20
|
+
stub_everything.should be_null_object
|
21
|
+
end
|
22
|
+
|
23
|
+
it "provides deprecation warning" do
|
24
|
+
Kernel.should_receive(:warn).with(/DEPRECATION: stub_everything.* is deprecated./)
|
25
|
+
stub_everything
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
14
29
|
it "should report line number of expectation of unreceived message" do
|
15
30
|
expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
|
16
31
|
begin
|
@@ -550,5 +565,15 @@ module Spec
|
|
550
565
|
valid_html_str.should_not include('<')
|
551
566
|
end
|
552
567
|
end
|
568
|
+
|
569
|
+
describe "==" do
|
570
|
+
it "sends '== self' to the comparison object" do
|
571
|
+
first = mock('first')
|
572
|
+
second = mock('second')
|
573
|
+
|
574
|
+
first.should_receive(:==).with(second)
|
575
|
+
second == first
|
576
|
+
end
|
577
|
+
end
|
553
578
|
end
|
554
579
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,7 +7,6 @@ $_spec_spec = true # Prevents Kernel.exit in various places
|
|
7
7
|
|
8
8
|
require 'spec'
|
9
9
|
require 'spec/mocks'
|
10
|
-
require 'spec/story'
|
11
10
|
spec_classes_path = File.expand_path("#{dir}/../spec/spec/spec_classes")
|
12
11
|
require spec_classes_path unless $LOAD_PATH.include?(spec_classes_path)
|
13
12
|
require File.dirname(__FILE__) + '/../lib/spec/expectations/differs/default'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dchelimsky-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RSpec Development Team
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-01-
|
12
|
+
date: 2009-01-11 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -442,6 +442,6 @@ rubyforge_project: rspec
|
|
442
442
|
rubygems_version: 1.2.0
|
443
443
|
signing_key:
|
444
444
|
specification_version: 2
|
445
|
-
summary: rspec 1.1.
|
445
|
+
summary: rspec 1.1.12
|
446
446
|
test_files: []
|
447
447
|
|
@@ -1,237 +0,0 @@
|
|
1
|
-
module Spec
|
2
|
-
module Mocks
|
3
|
-
|
4
|
-
# ArgumentConstraints are messages that you can include in message
|
5
|
-
# expectations to match arguments against a broader check than simple
|
6
|
-
# equality.
|
7
|
-
#
|
8
|
-
# With the exception of any_args() and no_args(), the constraints
|
9
|
-
# are all positional - they match against the arg in the given position.
|
10
|
-
module ArgumentConstraints
|
11
|
-
|
12
|
-
class AnyArgsConstraint
|
13
|
-
def description
|
14
|
-
"any args"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class AnyArgConstraint
|
19
|
-
def initialize(ignore)
|
20
|
-
end
|
21
|
-
|
22
|
-
def ==(other)
|
23
|
-
true
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class NoArgsConstraint
|
28
|
-
def description
|
29
|
-
"no args"
|
30
|
-
end
|
31
|
-
|
32
|
-
def ==(args)
|
33
|
-
args == []
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class RegexpConstraint
|
38
|
-
def initialize(regexp)
|
39
|
-
@regexp = regexp
|
40
|
-
end
|
41
|
-
|
42
|
-
def ==(value)
|
43
|
-
return value =~ @regexp unless value.is_a?(Regexp)
|
44
|
-
value == @regexp
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class BooleanConstraint
|
49
|
-
def initialize(ignore)
|
50
|
-
end
|
51
|
-
|
52
|
-
def ==(value)
|
53
|
-
TrueClass === value || FalseClass === value
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
class HashIncludingConstraint
|
58
|
-
def initialize(expected)
|
59
|
-
@expected = expected
|
60
|
-
end
|
61
|
-
|
62
|
-
def ==(actual)
|
63
|
-
@expected.each do | key, value |
|
64
|
-
return false unless actual.has_key?(key) && value == actual[key]
|
65
|
-
end
|
66
|
-
true
|
67
|
-
rescue NoMethodError => ex
|
68
|
-
return false
|
69
|
-
end
|
70
|
-
|
71
|
-
def description
|
72
|
-
"hash_including(#{@expected.inspect.sub(/^\{/,"").sub(/\}$/,"")})"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
class HashNotIncludingConstraint
|
77
|
-
def initialize(expected)
|
78
|
-
@expected = expected
|
79
|
-
end
|
80
|
-
|
81
|
-
def ==(actual)
|
82
|
-
@expected.each do | key, value |
|
83
|
-
return false if actual.has_key?(key) && value == actual[key]
|
84
|
-
end
|
85
|
-
true
|
86
|
-
rescue NoMethodError => ex
|
87
|
-
return false
|
88
|
-
end
|
89
|
-
|
90
|
-
def description
|
91
|
-
"hash_not_including(#{@expected.inspect.sub(/^\{/,"").sub(/\}$/,"")})"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
class DuckTypeConstraint
|
96
|
-
def initialize(*methods_to_respond_to)
|
97
|
-
@methods_to_respond_to = methods_to_respond_to
|
98
|
-
end
|
99
|
-
|
100
|
-
def ==(value)
|
101
|
-
@methods_to_respond_to.all? { |sym| value.respond_to?(sym) }
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
class MatcherConstraint
|
106
|
-
def initialize(matcher)
|
107
|
-
@matcher = matcher
|
108
|
-
end
|
109
|
-
|
110
|
-
def ==(value)
|
111
|
-
@matcher.matches?(value)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
class EqualityProxy
|
116
|
-
def initialize(given)
|
117
|
-
@given = given
|
118
|
-
end
|
119
|
-
|
120
|
-
def ==(expected)
|
121
|
-
@given == expected
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
class InstanceOf
|
126
|
-
def initialize(klass)
|
127
|
-
@klass = klass
|
128
|
-
end
|
129
|
-
|
130
|
-
def ==(actual)
|
131
|
-
actual.instance_of?(@klass)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
class KindOf
|
136
|
-
def initialize(klass)
|
137
|
-
@klass = klass
|
138
|
-
end
|
139
|
-
|
140
|
-
def ==(actual)
|
141
|
-
actual.kind_of?(@klass)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
# :call-seq:
|
146
|
-
# object.should_receive(:message).with(any_args())
|
147
|
-
#
|
148
|
-
# Passes if object receives :message with any args at all. This is
|
149
|
-
# really a more explicit variation of object.should_receive(:message)
|
150
|
-
def any_args
|
151
|
-
AnyArgsConstraint.new
|
152
|
-
end
|
153
|
-
|
154
|
-
# :call-seq:
|
155
|
-
# object.should_receive(:message).with(anything())
|
156
|
-
#
|
157
|
-
# Passes as long as there is an argument.
|
158
|
-
def anything
|
159
|
-
AnyArgConstraint.new(nil)
|
160
|
-
end
|
161
|
-
|
162
|
-
# :call-seq:
|
163
|
-
# object.should_receive(:message).with(no_args)
|
164
|
-
#
|
165
|
-
# Passes if no arguments are passed along with the message
|
166
|
-
def no_args
|
167
|
-
NoArgsConstraint.new
|
168
|
-
end
|
169
|
-
|
170
|
-
# :call-seq:
|
171
|
-
# object.should_receive(:message).with(duck_type(:hello))
|
172
|
-
# object.should_receive(:message).with(duck_type(:hello, :goodbye))
|
173
|
-
#
|
174
|
-
# Passes if the argument responds to the specified messages.
|
175
|
-
#
|
176
|
-
# == Examples
|
177
|
-
#
|
178
|
-
# array = []
|
179
|
-
# display = mock('display')
|
180
|
-
# display.should_receive(:present_names).with(duck_type(:length, :each))
|
181
|
-
# => passes
|
182
|
-
def duck_type(*args)
|
183
|
-
DuckTypeConstraint.new(*args)
|
184
|
-
end
|
185
|
-
|
186
|
-
# :call-seq:
|
187
|
-
# object.should_receive(:message).with(boolean())
|
188
|
-
#
|
189
|
-
# Passes if the argument is boolean.
|
190
|
-
def boolean
|
191
|
-
BooleanConstraint.new(nil)
|
192
|
-
end
|
193
|
-
|
194
|
-
# :call-seq:
|
195
|
-
# object.should_receive(:message).with(hash_including(:key => val))
|
196
|
-
# object.should_receive(:message).with(hash_including(:key))
|
197
|
-
# object.should_receive(:message).with(hash_including(:key, :key2 => val2))
|
198
|
-
# Passes if the argument is a hash that includes the specified key(s) or key/value
|
199
|
-
# pairs. If the hash includes other keys, it will still pass.
|
200
|
-
def hash_including(*args)
|
201
|
-
HashIncludingConstraint.new(anythingize_lonely_keys(*args))
|
202
|
-
end
|
203
|
-
|
204
|
-
# :call-seq:
|
205
|
-
# object.should_receive(:message).with(hash_not_including(:key => val))
|
206
|
-
# object.should_receive(:message).with(hash_not_including(:key))
|
207
|
-
# object.should_receive(:message).with(hash_not_including(:key, :key2 => :val2))
|
208
|
-
#
|
209
|
-
# Passes if the argument is a hash that doesn't include the specified key(s) or key/value
|
210
|
-
def hash_not_including(*args)
|
211
|
-
HashNotIncludingConstraint.new(anythingize_lonely_keys(*args))
|
212
|
-
end
|
213
|
-
|
214
|
-
# Passes if arg.instance_of?(klass)
|
215
|
-
def instance_of(klass)
|
216
|
-
InstanceOf.new(klass)
|
217
|
-
end
|
218
|
-
|
219
|
-
alias_method :an_instance_of, :instance_of
|
220
|
-
|
221
|
-
# Passes if arg.kind_of?(klass)
|
222
|
-
def kind_of(klass)
|
223
|
-
KindOf.new(klass)
|
224
|
-
end
|
225
|
-
|
226
|
-
alias_method :a_kind_of, :kind_of
|
227
|
-
|
228
|
-
private
|
229
|
-
|
230
|
-
def anythingize_lonely_keys(*args)
|
231
|
-
hash = args.last.class == Hash ? args.delete_at(-1) : {}
|
232
|
-
args.each { | arg | hash[arg] = anything }
|
233
|
-
hash
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|