rspec 1.0.3 → 1.0.4
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/CHANGES +12 -0
- data/EXAMPLES.rd +1 -1
- data/Rakefile +20 -10
- data/lib/spec/dsl/behaviour.rb +7 -3
- data/lib/spec/dsl/behaviour_eval.rb +11 -5
- data/lib/spec/dsl/description.rb +25 -2
- data/lib/spec/mocks.rb +5 -6
- data/lib/spec/mocks/argument_constraint_matchers.rb +16 -1
- data/lib/spec/mocks/argument_expectation.rb +51 -3
- data/lib/spec/mocks/error_generator.rb +1 -2
- data/lib/spec/mocks/message_expectation.rb +1 -1
- data/lib/spec/version.rb +3 -3
- data/spec/spec/dsl/behaviour_spec.rb +8 -4
- data/spec/spec/dsl/example_instance_spec.rb +1 -1
- data/spec/spec/dsl/shared_behaviour_spec.rb +34 -27
- data/spec/spec/matchers/mock_constraint_matchers_spec.rb +24 -0
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +54 -13
- data/spec/spec/mocks/mock_spec.rb +10 -10
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +65 -9
- data/spec/spec/runner/options_spec.rb +1 -1
- data/spec/spec/runner/reporter_spec.rb +7 -7
- data/spec/spec_helper.rb +1 -0
- metadata +4 -3
data/CHANGES
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== Version 1.0.4
|
2
|
+
The getting ready for JRuby release.
|
3
|
+
|
4
|
+
* Fixed [#11181] behaviour_type scoping of config.before(:each) is not working
|
5
|
+
* added mock argument constraint matchers (anything(), boolean(), an_instance_of(Type)) which work with rspec or mocha
|
6
|
+
* added mock argument constraint matchers (any_args(), no_args()) which only work with rspec
|
7
|
+
* deprecated rspec's symbol mock argument constraint matchers (:any_args, :no_args, :anything, :boolean, :numeric, :string)
|
8
|
+
* Added tarball of rspec_on_rails to the release build to support folks working behind a firewall that blocks svn access.
|
9
|
+
* Fixed [#11137] rspec incorrectly handles flash after resetting the session
|
10
|
+
* Fixed [#11143] Views code for ActionController::Base#render broke between 1.0.0 and 1.0.3 on Rails Edge r6731
|
11
|
+
* Added raise_controller_errors for controller examples in Spec::Rails
|
12
|
+
|
1
13
|
== Version 1.0.3
|
2
14
|
Bug fixes.
|
3
15
|
|
data/EXAMPLES.rd
CHANGED
data/Rakefile
CHANGED
@@ -157,19 +157,18 @@ task :tag do
|
|
157
157
|
from = `svn info #{File.dirname(__FILE__)}`.match(/URL: (.*)\/rspec/n)[1]
|
158
158
|
to = from.gsub(/trunk/, "tags/#{Spec::VERSION::TAG}")
|
159
159
|
current = from.gsub(/trunk/, "tags/CURRENT")
|
160
|
-
|
161
|
-
remove_current_cmd = "svn rm #{current}"
|
162
|
-
commit_current_cmd = "svn ci #{current} -m \"Remove tags/CURRENT\""
|
163
|
-
create_current_cmd = "svn cp #{to} #{current} -m \"Copy #{Spec::VERSION::TAG} to tags/CURRENT\""
|
164
|
-
raise "Can't tag to the same place: #{tag_cmd}" if to == from
|
160
|
+
|
165
161
|
puts "Creating tag in SVN"
|
166
|
-
|
162
|
+
tag_cmd = "svn cp #{from} #{to} -m \"Tag release #{Spec::VERSION::FULL_VERSION}\""
|
163
|
+
`#{tag_cmd}` ; raise "ERROR: #{tag_cmd}" unless $? == 0
|
164
|
+
|
167
165
|
puts "Removing CURRENT"
|
168
|
-
|
169
|
-
`#{
|
166
|
+
remove_current_cmd = "svn rm #{current} -m \"Remove tags/CURRENT\""
|
167
|
+
`#{remove_current_cmd}` ; raise "ERROR: #{remove_current_cmd}" unless $? == 0
|
168
|
+
|
170
169
|
puts "Re-Creating CURRENT"
|
171
|
-
|
172
|
-
|
170
|
+
create_current_cmd = "svn cp #{to} #{current} -m \"Copy #{Spec::VERSION::TAG} to tags/CURRENT\""
|
171
|
+
`#{create_current_cmd}` ; "ERROR: #{create_current_cmd}" unless $? == 0
|
173
172
|
end
|
174
173
|
|
175
174
|
desc "Run this task before you commit. You should see 'OK TO COMMIT'"
|
@@ -210,6 +209,17 @@ task :archive_website => [:verify_user, :website] do
|
|
210
209
|
publisher.upload
|
211
210
|
end
|
212
211
|
|
212
|
+
desc "Package the Rails plugin"
|
213
|
+
task :package_rspec_on_rails do
|
214
|
+
mkdir 'pkg' rescue nil
|
215
|
+
rm_rf 'pkg/rspec_on_rails' rescue nil
|
216
|
+
`svn export ../rspec_on_rails pkg/rspec_on_rails-#{PKG_VERSION}`
|
217
|
+
Dir.chdir 'pkg' do
|
218
|
+
`tar cvzf rspec_on_rails-#{PKG_VERSION}.tgz rspec_on_rails-#{PKG_VERSION}`
|
219
|
+
end
|
220
|
+
end
|
221
|
+
task :pkg => :package_rspec_on_rails
|
222
|
+
|
213
223
|
desc "Package the RSpec.tmbundle"
|
214
224
|
task :package_tmbundle do
|
215
225
|
mkdir 'pkg' rescue nil
|
data/lib/spec/dsl/behaviour.rb
CHANGED
@@ -31,8 +31,12 @@ module Spec
|
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
34
|
-
|
34
|
+
|
35
35
|
def init_description(*args)
|
36
|
+
unless self.class == Behaviour
|
37
|
+
args << {} unless Hash === args.last
|
38
|
+
args.last[:behaviour_class] = self.class
|
39
|
+
end
|
36
40
|
@description = Description.new(*args)
|
37
41
|
end
|
38
42
|
|
@@ -118,12 +122,12 @@ module Spec
|
|
118
122
|
end
|
119
123
|
end
|
120
124
|
|
121
|
-
protected
|
122
|
-
|
123
125
|
def behaviour_type #:nodoc:
|
124
126
|
@description[:behaviour_type]
|
125
127
|
end
|
126
128
|
|
129
|
+
protected
|
130
|
+
|
127
131
|
# Messages that this class does not understand
|
128
132
|
# are passed directly to the @eval_module.
|
129
133
|
def method_missing(sym, *args, &block)
|
@@ -71,10 +71,16 @@ module Spec
|
|
71
71
|
# predicate_matchers[matcher_name] = [method1_on_object, method2_on_object]
|
72
72
|
#
|
73
73
|
# Dynamically generates a custom matcher that will match
|
74
|
-
# a predicate on your class. RSpec
|
75
|
-
#
|
74
|
+
# a predicate on your class. RSpec provides a couple of these
|
75
|
+
# out of the box:
|
76
76
|
#
|
77
|
-
#
|
77
|
+
# exist (or state expectations)
|
78
|
+
# File.should exist("path/to/file")
|
79
|
+
#
|
80
|
+
# an_instance_of (for mock argument constraints)
|
81
|
+
# mock.should_receive(:message).with(an_instance_of(String))
|
82
|
+
#
|
83
|
+
# == Examples
|
78
84
|
#
|
79
85
|
# class Fish
|
80
86
|
# def can_swim?
|
@@ -89,7 +95,7 @@ module Spec
|
|
89
95
|
# end
|
90
96
|
# end
|
91
97
|
def predicate_matchers
|
92
|
-
@predicate_matchers ||= {:exist => :exist?}
|
98
|
+
@predicate_matchers ||= {:exist => :exist?, :an_instance_of => :is_a?}
|
93
99
|
end
|
94
100
|
|
95
101
|
def define_predicate_matchers(hash=nil) # :nodoc:
|
@@ -112,7 +118,7 @@ module Spec
|
|
112
118
|
end
|
113
119
|
|
114
120
|
# Alias for it.
|
115
|
-
def specify(description, opts={}, &block)
|
121
|
+
def specify(description=:__generate_description, opts={}, &block)
|
116
122
|
it(description, opts, &block)
|
117
123
|
end
|
118
124
|
|
data/lib/spec/dsl/description.rb
CHANGED
@@ -18,8 +18,9 @@ module Spec
|
|
18
18
|
|
19
19
|
def initialize(*args)
|
20
20
|
args, @options = args_and_options(*args)
|
21
|
-
@
|
22
|
-
|
21
|
+
init_behaviour_type(@options)
|
22
|
+
init_described_type(args)
|
23
|
+
init_description(*args)
|
23
24
|
end
|
24
25
|
|
25
26
|
def [](key)
|
@@ -40,6 +41,28 @@ module Spec
|
|
40
41
|
@description == value
|
41
42
|
end
|
42
43
|
end
|
44
|
+
|
45
|
+
private
|
46
|
+
def init_behaviour_type(options)
|
47
|
+
# NOTE - BE CAREFUL IF CHANGING THIS NEXT LINE:
|
48
|
+
# this line is as it is to satisfy JRuby - the original version
|
49
|
+
# read, simply: "if options[:behaviour_class]", which passed against ruby, but failed against jruby
|
50
|
+
if options[:behaviour_class] && options[:behaviour_class].ancestors.include?(Behaviour)
|
51
|
+
options[:behaviour_type] = parse_behaviour_type(@options[:behaviour_class])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def init_description(*args)
|
56
|
+
@description = self.class.generate_description(*args)
|
57
|
+
end
|
58
|
+
|
59
|
+
def init_described_type(args)
|
60
|
+
@described_type = args.first unless args.first.is_a?(String)
|
61
|
+
end
|
62
|
+
|
63
|
+
def parse_behaviour_type(behaviour_class)
|
64
|
+
behaviour_class.to_s.split("::").reverse[0].gsub!('Behaviour', '').downcase.to_sym
|
65
|
+
end
|
43
66
|
|
44
67
|
end
|
45
68
|
end
|
data/lib/spec/mocks.rb
CHANGED
@@ -129,13 +129,12 @@ module Spec
|
|
129
129
|
# In addition, Spec::Mocks adds some keyword Symbols that you can use to
|
130
130
|
# specify certain kinds of arguments:
|
131
131
|
#
|
132
|
-
# my_mock.should_receive(:sym).with(
|
133
|
-
# my_mock.should_receive(:sym).with(
|
134
|
-
# my_mock.should_receive(:sym).with(1,
|
135
|
-
# my_mock.should_receive(:sym).with(1,
|
136
|
-
# my_mock.should_receive(:sym).with(1, :string, "b") #2nd argument can be any String
|
132
|
+
# my_mock.should_receive(:sym).with(no_args())
|
133
|
+
# my_mock.should_receive(:sym).with(any_args())
|
134
|
+
# my_mock.should_receive(:sym).with(1, an_instance_of(Numeric), "b") #2nd argument can any type of Numeric
|
135
|
+
# my_mock.should_receive(:sym).with(1, boolean(), "b") #2nd argument can true or false
|
137
136
|
# my_mock.should_receive(:sym).with(1, /abc/, "b") #2nd argument can be any String matching the submitted Regexp
|
138
|
-
# my_mock.should_receive(:sym).with(1,
|
137
|
+
# my_mock.should_receive(:sym).with(1, anything(), "b") #2nd argument can be anything at all
|
139
138
|
# my_mock.should_receive(:sym).with(1, ducktype(:abs, :div), "b")
|
140
139
|
# #2nd argument can be object that responds to #abs and #div
|
141
140
|
#
|
@@ -4,9 +4,24 @@ module Spec
|
|
4
4
|
|
5
5
|
# Shortcut for creating an instance of Spec::Mocks::DuckTypeArgConstraint
|
6
6
|
def duck_type(*args)
|
7
|
-
|
7
|
+
DuckTypeArgConstraint.new(*args)
|
8
8
|
end
|
9
9
|
|
10
|
+
def any_args
|
11
|
+
AnyArgsConstraint.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def anything
|
15
|
+
AnyArgConstraint.new(nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
def boolean
|
19
|
+
BooleanArgConstraint.new(nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
def no_args
|
23
|
+
NoArgsConstraint.new
|
24
|
+
end
|
10
25
|
end
|
11
26
|
end
|
12
27
|
end
|
@@ -36,11 +36,32 @@ module Spec
|
|
36
36
|
def initialize(ignore)
|
37
37
|
end
|
38
38
|
|
39
|
+
def ==(other)
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
# TODO - need this?
|
39
44
|
def matches?(value)
|
40
45
|
true
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|
49
|
+
class AnyArgsConstraint
|
50
|
+
def description
|
51
|
+
"any args"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class NoArgsConstraint
|
56
|
+
def description
|
57
|
+
"no args"
|
58
|
+
end
|
59
|
+
|
60
|
+
def ==(args)
|
61
|
+
args == []
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
44
65
|
class NumericArgConstraint
|
45
66
|
def initialize(ignore)
|
46
67
|
end
|
@@ -54,6 +75,10 @@ module Spec
|
|
54
75
|
def initialize(ignore)
|
55
76
|
end
|
56
77
|
|
78
|
+
def ==(value)
|
79
|
+
matches?(value)
|
80
|
+
end
|
81
|
+
|
57
82
|
def matches?(value)
|
58
83
|
return true if value.is_a?(TrueClass)
|
59
84
|
return true if value.is_a?(FalseClass)
|
@@ -94,8 +119,14 @@ module Spec
|
|
94
119
|
|
95
120
|
def initialize(args)
|
96
121
|
@args = args
|
97
|
-
if [:any_args] == args
|
98
|
-
|
122
|
+
if [:any_args] == args
|
123
|
+
@expected_params = nil
|
124
|
+
warn_deprecated(:any_args.inspect, "any_args()")
|
125
|
+
elsif args.length == 1 && args[0].is_a?(AnyArgsConstraint) then @expected_params = nil
|
126
|
+
elsif [:no_args] == args
|
127
|
+
@expected_params = []
|
128
|
+
warn_deprecated(:no_args.inspect, "no_args()")
|
129
|
+
elsif args.length == 1 && args[0].is_a?(NoArgsConstraint) then @expected_params = []
|
99
130
|
else @expected_params = process_arg_constraints(args)
|
100
131
|
end
|
101
132
|
end
|
@@ -106,8 +137,25 @@ module Spec
|
|
106
137
|
end
|
107
138
|
end
|
108
139
|
|
140
|
+
def warn_deprecated(deprecated_method, instead)
|
141
|
+
STDERR.puts "The #{deprecated_method} constraint is deprecated. Use #{instead} instead."
|
142
|
+
end
|
143
|
+
|
109
144
|
def convert_constraint(constraint)
|
110
|
-
|
145
|
+
if [:anything, :numeric, :boolean, :string].include?(constraint)
|
146
|
+
case constraint
|
147
|
+
when :anything
|
148
|
+
instead = "anything()"
|
149
|
+
when :boolean
|
150
|
+
instead = "boolean()"
|
151
|
+
when :numeric
|
152
|
+
instead = "an_instance_of(Numeric)"
|
153
|
+
when :string
|
154
|
+
instead = "an_instance_of(String)"
|
155
|
+
end
|
156
|
+
warn_deprecated(constraint.inspect, instead)
|
157
|
+
return @@constraint_classes[constraint].new(constraint)
|
158
|
+
end
|
111
159
|
return MatcherConstraint.new(constraint) if is_matcher?(constraint)
|
112
160
|
return RegexpArgConstraint.new(constraint) if constraint.is_a?(Regexp)
|
113
161
|
return LiteralArgConstraint.new(constraint)
|
@@ -17,8 +17,7 @@ module Spec
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def raise_unexpected_message_args_error(expectation, *args)
|
20
|
-
|
21
|
-
expected_args = (expectation.expected_args == :no_args ? "(no args)" : format_args(*expectation.expected_args))
|
20
|
+
expected_args = format_args(*expectation.expected_args)
|
22
21
|
actual_args = args.empty? ? "(no args)" : format_args(*args)
|
23
22
|
__raise "#{intro} expected #{expectation.sym.inspect} with #{expected_args} but received it with #{actual_args}"
|
24
23
|
end
|
@@ -13,7 +13,7 @@ module Spec
|
|
13
13
|
@return_block = lambda {}
|
14
14
|
@received_count = 0
|
15
15
|
@expected_received_count = expected_received_count
|
16
|
-
@args_expectation = ArgumentExpectation.new([
|
16
|
+
@args_expectation = ArgumentExpectation.new([AnyArgsConstraint.new])
|
17
17
|
@consecutive = false
|
18
18
|
@exception_to_raise = nil
|
19
19
|
@symbol_to_throw = nil
|
data/lib/spec/version.rb
CHANGED
@@ -3,11 +3,11 @@ module Spec
|
|
3
3
|
unless defined? MAJOR
|
4
4
|
MAJOR = 1
|
5
5
|
MINOR = 0
|
6
|
-
TINY =
|
6
|
+
TINY = 4
|
7
7
|
RELEASE_CANDIDATE = nil
|
8
8
|
|
9
|
-
# RANDOM_TOKEN: 0.
|
10
|
-
REV = "$LastChangedRevision:
|
9
|
+
# RANDOM_TOKEN: 0.691783562403103
|
10
|
+
REV = "$LastChangedRevision: 2054 $".match(/LastChangedRevision: (\d+)/)[1]
|
11
11
|
|
12
12
|
STRING = [MAJOR, MINOR, TINY].join('.')
|
13
13
|
TAG = "REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}".upcase.gsub(/\.|-/, '_')
|
@@ -312,8 +312,8 @@ module Spec
|
|
312
312
|
end
|
313
313
|
|
314
314
|
it "after callbacks are ordered from local to global" do
|
315
|
-
@reporter.should_receive(:add_behaviour).with
|
316
|
-
@reporter.should_receive(:example_finished).with
|
315
|
+
@reporter.should_receive(:add_behaviour).with any_args()
|
316
|
+
@reporter.should_receive(:example_finished).with any_args()
|
317
317
|
|
318
318
|
fiddle = []
|
319
319
|
super_class = Class.new do
|
@@ -400,8 +400,8 @@ module Spec
|
|
400
400
|
end
|
401
401
|
|
402
402
|
it "should have accessible instance methods from included module" do
|
403
|
-
@reporter.should_receive(:add_behaviour).with
|
404
|
-
@reporter.should_receive(:example_finished).with
|
403
|
+
@reporter.should_receive(:add_behaviour).with any_args()
|
404
|
+
@reporter.should_receive(:example_finished).with any_args()
|
405
405
|
|
406
406
|
mod1_method_called = false
|
407
407
|
mod1 = Module.new do
|
@@ -598,6 +598,10 @@ module Spec
|
|
598
598
|
BehaviourSubclass.new(Example){}.described_type.should == Example
|
599
599
|
end
|
600
600
|
|
601
|
+
it "should figure out its behaviour_type based on its name ()" do
|
602
|
+
BehaviourSubclass.new(Object){}.behaviour_type.should == :subclass
|
603
|
+
end
|
604
|
+
|
601
605
|
# TODO - add an example about shared behaviours
|
602
606
|
end
|
603
607
|
|
@@ -148,7 +148,7 @@ module Spec
|
|
148
148
|
example = Example.new(:__generate_description) {
|
149
149
|
5.should == 5
|
150
150
|
}
|
151
|
-
@reporter.should_receive(:example_finished).with("should == 5",
|
151
|
+
@reporter.should_receive(:example_finished).with("should == 5", anything(), anything(), false)
|
152
152
|
example.run(@reporter, nil, nil, nil, Object.new)
|
153
153
|
end
|
154
154
|
|
@@ -4,12 +4,12 @@ module Spec
|
|
4
4
|
module DSL
|
5
5
|
describe Behaviour, ", with :shared => true" do
|
6
6
|
|
7
|
-
before do
|
7
|
+
before(:each) do
|
8
8
|
@formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
|
9
9
|
@behaviour = behaviour_class.new("behaviour") {}
|
10
10
|
end
|
11
11
|
|
12
|
-
after do
|
12
|
+
after(:each) do
|
13
13
|
@formatter.rspec_verify
|
14
14
|
@behaviour_class = nil
|
15
15
|
$shared_behaviours.clear unless $shared_behaviours.nil?
|
@@ -24,11 +24,15 @@ module Spec
|
|
24
24
|
@behaviour_class
|
25
25
|
end
|
26
26
|
|
27
|
-
def make_shared_behaviour(name, opts, &block)
|
28
|
-
behaviour = behaviour_class.new(name,
|
27
|
+
def make_shared_behaviour(name, opts=nil, &block)
|
28
|
+
behaviour = behaviour_class.new(name, :shared => true, &block)
|
29
29
|
behaviour_class.add_shared_behaviour(behaviour)
|
30
30
|
behaviour
|
31
31
|
end
|
32
|
+
|
33
|
+
def non_shared_behaviour()
|
34
|
+
@non_shared_behaviour ||= behaviour_class.new("behaviour") {}
|
35
|
+
end
|
32
36
|
|
33
37
|
it "should accept an optional options hash" do
|
34
38
|
lambda { behaviour_class.new("context") {} }.should_not raise_error(Exception)
|
@@ -36,49 +40,52 @@ module Spec
|
|
36
40
|
end
|
37
41
|
|
38
42
|
it "should return all shared behaviours" do
|
39
|
-
make_shared_behaviour("b1", :shared => true) {}
|
40
|
-
make_shared_behaviour("b2", :shared => true) {}
|
43
|
+
b1 = make_shared_behaviour("b1", :shared => true) {}
|
44
|
+
b2 = make_shared_behaviour("b2", :shared => true) {}
|
45
|
+
|
46
|
+
b1.should_not be(nil)
|
47
|
+
b2.should_not be(nil)
|
41
48
|
|
42
|
-
behaviour_class.find_shared_behaviour("b1").
|
43
|
-
behaviour_class.find_shared_behaviour("b2").
|
49
|
+
behaviour_class.find_shared_behaviour("b1").should equal(b1)
|
50
|
+
behaviour_class.find_shared_behaviour("b2").should equal(b2)
|
44
51
|
end
|
45
52
|
|
46
53
|
it "should be shared when configured as shared" do
|
47
|
-
behaviour = make_shared_behaviour("
|
54
|
+
behaviour = make_shared_behaviour("behaviour") {}
|
48
55
|
behaviour.should be_shared
|
49
56
|
end
|
50
57
|
|
51
58
|
it "should not be shared when not configured as shared" do
|
52
|
-
|
59
|
+
non_shared_behaviour.should_not be_shared
|
53
60
|
end
|
54
61
|
|
55
62
|
it "should raise if run when shared" do
|
56
|
-
behaviour = make_shared_behaviour("context"
|
57
|
-
$
|
58
|
-
behaviour.it("test") {$
|
63
|
+
behaviour = make_shared_behaviour("context") {}
|
64
|
+
$example_ran = false
|
65
|
+
behaviour.it("test") {$example_ran = true}
|
59
66
|
lambda { behaviour.run(@formatter) }.should raise_error
|
60
|
-
$
|
67
|
+
$example_ran.should be_false
|
61
68
|
end
|
62
69
|
|
63
70
|
it "should contain examples when shared" do
|
64
|
-
shared_behaviour = make_shared_behaviour("shared behaviour"
|
71
|
+
shared_behaviour = make_shared_behaviour("shared behaviour") {}
|
65
72
|
shared_behaviour.it("shared example") {}
|
66
73
|
shared_behaviour.number_of_examples.should == 1
|
67
74
|
end
|
68
75
|
|
69
76
|
it "should complain when adding a second shared behaviour with the same description" do
|
70
|
-
make_shared_behaviour("shared behaviour"
|
71
|
-
lambda { make_shared_behaviour("shared behaviour"
|
77
|
+
make_shared_behaviour("shared behaviour") {}
|
78
|
+
lambda { make_shared_behaviour("shared behaviour") {} }.should raise_error(ArgumentError)
|
72
79
|
end
|
73
80
|
|
74
81
|
it "should NOT complain when adding a the same shared behaviour again (i.e. file gets reloaded)" do
|
75
|
-
behaviour = behaviour_class.new("shared behaviour"
|
82
|
+
behaviour = behaviour_class.new("shared behaviour") {}
|
76
83
|
behaviour_class.add_shared_behaviour(behaviour)
|
77
84
|
behaviour_class.add_shared_behaviour(behaviour)
|
78
85
|
end
|
79
86
|
|
80
87
|
it "should add examples to current behaviour when calling it_should_behave_like" do
|
81
|
-
shared_behaviour = make_shared_behaviour("shared behaviour"
|
88
|
+
shared_behaviour = make_shared_behaviour("shared behaviour") {}
|
82
89
|
shared_behaviour.it("shared example") {}
|
83
90
|
shared_behaviour.it("shared example 2") {}
|
84
91
|
|
@@ -90,7 +97,7 @@ module Spec
|
|
90
97
|
|
91
98
|
it "should run shared examples" do
|
92
99
|
shared_example_ran = false
|
93
|
-
shared_behaviour = make_shared_behaviour("shared behaviour"
|
100
|
+
shared_behaviour = make_shared_behaviour("shared behaviour") {}
|
94
101
|
shared_behaviour.it("shared example") { shared_example_ran = true }
|
95
102
|
|
96
103
|
example_ran = false
|
@@ -105,7 +112,7 @@ module Spec
|
|
105
112
|
it "should run setup and teardown from shared behaviour" do
|
106
113
|
shared_setup_ran = false
|
107
114
|
shared_teardown_ran = false
|
108
|
-
shared_behaviour = make_shared_behaviour("shared behaviour"
|
115
|
+
shared_behaviour = make_shared_behaviour("shared behaviour") {}
|
109
116
|
shared_behaviour.before { shared_setup_ran = true }
|
110
117
|
shared_behaviour.after { shared_teardown_ran = true }
|
111
118
|
shared_behaviour.it("shared example") { shared_example_ran = true }
|
@@ -123,7 +130,7 @@ module Spec
|
|
123
130
|
it "should run before(:all) and after(:all) only once from shared behaviour" do
|
124
131
|
shared_before_all_run_count = 0
|
125
132
|
shared_after_all_run_count = 0
|
126
|
-
shared_behaviour = make_shared_behaviour("shared behaviour"
|
133
|
+
shared_behaviour = make_shared_behaviour("shared behaviour") {}
|
127
134
|
shared_behaviour.before(:all) { shared_before_all_run_count += 1}
|
128
135
|
shared_behaviour.after(:all) { shared_after_all_run_count += 1}
|
129
136
|
shared_behaviour.it("shared example") { shared_example_ran = true }
|
@@ -139,10 +146,10 @@ module Spec
|
|
139
146
|
end
|
140
147
|
|
141
148
|
it "should include modules, included into shared behaviour, into current behaviour" do
|
142
|
-
@formatter.should_receive(:add_behaviour).with
|
143
|
-
@formatter.should_receive(:example_finished).twice.with
|
149
|
+
@formatter.should_receive(:add_behaviour).with(any_args)
|
150
|
+
@formatter.should_receive(:example_finished).twice.with(any_args)
|
144
151
|
|
145
|
-
shared_behaviour = make_shared_behaviour("shared behaviour"
|
152
|
+
shared_behaviour = make_shared_behaviour("shared behaviour") {}
|
146
153
|
shared_behaviour.it("shared example") { shared_example_ran = true }
|
147
154
|
|
148
155
|
mod1_method_called = false
|
@@ -174,7 +181,7 @@ module Spec
|
|
174
181
|
end
|
175
182
|
|
176
183
|
it "should make methods defined in the shared behaviour available in consuming behaviour" do
|
177
|
-
shared_behaviour = make_shared_behaviour("shared behaviour xyz"
|
184
|
+
shared_behaviour = make_shared_behaviour("shared behaviour xyz") do
|
178
185
|
def a_shared_helper_method
|
179
186
|
"this got defined in a shared behaviour"
|
180
187
|
end
|
@@ -190,7 +197,7 @@ module Spec
|
|
190
197
|
end
|
191
198
|
|
192
199
|
it "should error if told to inherit from a class" do
|
193
|
-
shared_behaviour = make_shared_behaviour("shared behaviour"
|
200
|
+
shared_behaviour = make_shared_behaviour("shared behaviour") {}
|
194
201
|
shared_behaviour.it("shared example") { shared_example_ran = true }
|
195
202
|
lambda { shared_behaviour.inherit Object }.should raise_error(ArgumentError)
|
196
203
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
describe "The anything() mock argument constraint matcher" do
|
4
|
+
specify { anything.should == Object.new }
|
5
|
+
specify { anything.should == Class }
|
6
|
+
specify { anything.should == 1 }
|
7
|
+
specify { anything.should == "a string" }
|
8
|
+
specify { anything.should == :a_symbol }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "The boolean() mock argument constraint matcher" do
|
12
|
+
specify { boolean.should == true }
|
13
|
+
specify { boolean.should == false }
|
14
|
+
specify { boolean.should_not == Object.new }
|
15
|
+
specify { boolean.should_not == Class }
|
16
|
+
specify { boolean.should_not == 1 }
|
17
|
+
specify { boolean.should_not == "a string" }
|
18
|
+
specify { boolean.should_not == :a_symbol }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "The an_instance_of() mock argument constraint matcher" do
|
22
|
+
# NOTE - this is implemented as a predicate_matcher - see behaviour.rb
|
23
|
+
specify { an_instance_of(String).should == "string" }
|
24
|
+
end
|
@@ -2,42 +2,42 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
2
|
|
3
3
|
module Spec
|
4
4
|
module Mocks
|
5
|
-
describe "
|
6
|
-
before do
|
5
|
+
describe "failing MockArgumentConstraints" do
|
6
|
+
before(:each) do
|
7
7
|
@mock = mock("test mock")
|
8
8
|
@reporter = Mock.new("reporter", :null_object => true)
|
9
9
|
end
|
10
10
|
|
11
|
-
after do
|
11
|
+
after(:each) do
|
12
12
|
@mock.rspec_reset
|
13
13
|
end
|
14
|
-
|
15
|
-
it "should reject goose when expecting a duck" do
|
16
|
-
@mock.should_receive(:random_call).with(DuckTypeArgConstraint.new(:abs, :div))
|
17
|
-
lambda { @mock.random_call("I don't respond to :abs or :div") }.should raise_error(MockExpectationError)
|
18
|
-
end
|
19
|
-
|
14
|
+
|
20
15
|
it "should reject non boolean" do
|
21
|
-
@mock.should_receive(:random_call).with(
|
16
|
+
@mock.should_receive(:random_call).with(boolean())
|
22
17
|
lambda do
|
23
18
|
@mock.random_call("false")
|
24
19
|
end.should raise_error(MockExpectationError)
|
25
20
|
end
|
26
|
-
|
21
|
+
|
27
22
|
it "should reject non numeric" do
|
28
|
-
@mock.should_receive(:random_call).with(
|
23
|
+
@mock.should_receive(:random_call).with(an_instance_of(Numeric))
|
29
24
|
lambda do
|
30
25
|
@mock.random_call("1")
|
31
26
|
end.should raise_error(MockExpectationError)
|
32
27
|
end
|
33
28
|
|
34
29
|
it "should reject non string" do
|
35
|
-
@mock.should_receive(:random_call).with(
|
30
|
+
@mock.should_receive(:random_call).with(an_instance_of(String))
|
36
31
|
lambda do
|
37
32
|
@mock.random_call(123)
|
38
33
|
end.should raise_error(MockExpectationError)
|
39
34
|
end
|
40
35
|
|
36
|
+
it "should reject goose when expecting a duck" do
|
37
|
+
@mock.should_receive(:random_call).with(duck_type(:abs, :div))
|
38
|
+
lambda { @mock.random_call("I don't respond to :abs or :div") }.should raise_error(MockExpectationError)
|
39
|
+
end
|
40
|
+
|
41
41
|
it "should fail if regexp does not match submitted string" do
|
42
42
|
@mock.should_receive(:random_call).with(/bcd/)
|
43
43
|
lambda { @mock.random_call("abc") }.should raise_error(MockExpectationError)
|
@@ -68,6 +68,47 @@ module Spec
|
|
68
68
|
@mock.msg(37)
|
69
69
|
end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (equal 3) but received it with (37)")
|
70
70
|
end
|
71
|
+
|
72
|
+
it "should fail no_args with one arg" do
|
73
|
+
lambda do
|
74
|
+
@mock.should_receive(:msg).with(no_args)
|
75
|
+
@mock.msg(37)
|
76
|
+
end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (no args) but received it with (37)")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "failing deprecated MockArgumentConstraints" do
|
81
|
+
before(:each) do
|
82
|
+
@mock = mock("test mock")
|
83
|
+
@reporter = Mock.new("reporter", :null_object => true)
|
84
|
+
end
|
85
|
+
|
86
|
+
after(:each) do
|
87
|
+
@mock.rspec_reset
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should reject non boolean" do
|
91
|
+
@mock.should_receive(:random_call).with(:boolean)
|
92
|
+
lambda do
|
93
|
+
@mock.random_call("false")
|
94
|
+
end.should raise_error(MockExpectationError)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should reject non numeric" do
|
98
|
+
@mock.should_receive(:random_call).with(:numeric)
|
99
|
+
lambda do
|
100
|
+
@mock.random_call("1")
|
101
|
+
end.should raise_error(MockExpectationError)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should reject non string" do
|
105
|
+
@mock.should_receive(:random_call).with(:string)
|
106
|
+
lambda do
|
107
|
+
@mock.random_call(123)
|
108
|
+
end.should raise_error(MockExpectationError)
|
109
|
+
end
|
110
|
+
|
111
|
+
|
71
112
|
end
|
72
113
|
end
|
73
114
|
end
|
@@ -180,7 +180,7 @@ module Spec
|
|
180
180
|
end
|
181
181
|
|
182
182
|
it "should ignore args on any args" do
|
183
|
-
@mock.should_receive(:something).at_least(:once).with(
|
183
|
+
@mock.should_receive(:something).at_least(:once).with(any_args)
|
184
184
|
@mock.something
|
185
185
|
@mock.something 1
|
186
186
|
@mock.something "a", 2
|
@@ -189,7 +189,7 @@ module Spec
|
|
189
189
|
end
|
190
190
|
|
191
191
|
it "should fail on no args if any args received" do
|
192
|
-
@mock.should_receive(:something).with(
|
192
|
+
@mock.should_receive(:something).with(no_args())
|
193
193
|
begin
|
194
194
|
@mock.something 1
|
195
195
|
rescue MockExpectationError => e
|
@@ -207,7 +207,7 @@ module Spec
|
|
207
207
|
end
|
208
208
|
|
209
209
|
it "should yield 0 args to blocks that take a variable number of arguments" do
|
210
|
-
@mock.should_receive(:yield_back).with(
|
210
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield
|
211
211
|
a = nil
|
212
212
|
@mock.yield_back {|*a|}
|
213
213
|
a.should == []
|
@@ -215,7 +215,7 @@ module Spec
|
|
215
215
|
end
|
216
216
|
|
217
217
|
it "should yield one arg to blocks that take a variable number of arguments" do
|
218
|
-
@mock.should_receive(:yield_back).with(
|
218
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
|
219
219
|
a = nil
|
220
220
|
@mock.yield_back {|*a|}
|
221
221
|
a.should == [99]
|
@@ -223,7 +223,7 @@ module Spec
|
|
223
223
|
end
|
224
224
|
|
225
225
|
it "should yield many args to blocks that take a variable number of arguments" do
|
226
|
-
@mock.should_receive(:yield_back).with(
|
226
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go")
|
227
227
|
a = nil
|
228
228
|
@mock.yield_back {|*a|}
|
229
229
|
a.should == [99, 27, "go"]
|
@@ -231,7 +231,7 @@ module Spec
|
|
231
231
|
end
|
232
232
|
|
233
233
|
it "should yield single value" do
|
234
|
-
@mock.should_receive(:yield_back).with(
|
234
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
|
235
235
|
a = nil
|
236
236
|
@mock.yield_back {|a|}
|
237
237
|
a.should == 99
|
@@ -239,7 +239,7 @@ module Spec
|
|
239
239
|
end
|
240
240
|
|
241
241
|
it "should yield two values" do
|
242
|
-
@mock.should_receive(:yield_back).with(
|
242
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
|
243
243
|
a, b = nil
|
244
244
|
@mock.yield_back {|a,b|}
|
245
245
|
a.should == 'wha'
|
@@ -248,7 +248,7 @@ module Spec
|
|
248
248
|
end
|
249
249
|
|
250
250
|
it "should fail when calling yielding method with wrong arity" do
|
251
|
-
@mock.should_receive(:yield_back).with(
|
251
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
|
252
252
|
begin
|
253
253
|
@mock.yield_back {|a|}
|
254
254
|
rescue MockExpectationError => e
|
@@ -257,7 +257,7 @@ module Spec
|
|
257
257
|
end
|
258
258
|
|
259
259
|
it "should fail when calling yielding method without block" do
|
260
|
-
@mock.should_receive(:yield_back).with(
|
260
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
|
261
261
|
begin
|
262
262
|
@mock.yield_back
|
263
263
|
rescue MockExpectationError => e
|
@@ -266,7 +266,7 @@ module Spec
|
|
266
266
|
end
|
267
267
|
|
268
268
|
it "should be able to mock send" do
|
269
|
-
@mock.should_receive(:send).with(
|
269
|
+
@mock.should_receive(:send).with(any_args)
|
270
270
|
@mock.send 'hi'
|
271
271
|
@mock.rspec_verify
|
272
272
|
end
|
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
2
|
|
3
3
|
module Spec
|
4
4
|
module Mocks
|
5
|
-
describe "
|
5
|
+
describe "mock argument constraints", :shared => true do
|
6
6
|
before(:each) do
|
7
7
|
@mock = Mock.new("test mock")
|
8
8
|
end
|
@@ -10,6 +10,10 @@ module Spec
|
|
10
10
|
after(:each) do
|
11
11
|
@mock.rspec_verify
|
12
12
|
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe Methods, "handling argument constraints with DEPRECATED symbols" do
|
16
|
+
it_should_behave_like "mock argument constraints"
|
13
17
|
|
14
18
|
it "should accept true as boolean" do
|
15
19
|
@mock.should_receive(:random_call).with(:boolean)
|
@@ -36,26 +40,78 @@ module Spec
|
|
36
40
|
@mock.random_call("a", "whatever", "c")
|
37
41
|
end
|
38
42
|
|
43
|
+
it "should match string" do
|
44
|
+
@mock.should_receive(:random_call).with(:string)
|
45
|
+
@mock.random_call("a string")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should match no args against any_args" do
|
49
|
+
@mock.should_receive(:random_call).with(:any_args)
|
50
|
+
@mock.random_call("a string")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe Methods, "handling argument constraints" do
|
55
|
+
it_should_behave_like "mock argument constraints"
|
56
|
+
|
57
|
+
it "should accept true as boolean()" do
|
58
|
+
@mock.should_receive(:random_call).with(boolean())
|
59
|
+
@mock.random_call(true)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should accept false as boolean()" do
|
63
|
+
@mock.should_receive(:random_call).with(boolean())
|
64
|
+
@mock.random_call(false)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should accept fixnum as an_instance_of(Numeric)" do
|
68
|
+
@mock.should_receive(:random_call).with(an_instance_of(Numeric))
|
69
|
+
@mock.random_call(1)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should accept float as an_instance_of(Numeric)" do
|
73
|
+
@mock.should_receive(:random_call).with(an_instance_of(Numeric))
|
74
|
+
@mock.random_call(1.5)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should accept string as anything()" do
|
78
|
+
@mock.should_receive(:random_call).with("a", anything(), "c")
|
79
|
+
@mock.random_call("a", "whatever", "c")
|
80
|
+
end
|
81
|
+
|
39
82
|
it "should match duck type with one method" do
|
40
|
-
@mock.should_receive(:random_call).with(
|
83
|
+
@mock.should_receive(:random_call).with(duck_type(:length))
|
41
84
|
@mock.random_call([])
|
42
85
|
end
|
43
86
|
|
44
87
|
it "should match duck type with two methods" do
|
45
|
-
@mock.should_receive(:random_call).with(
|
88
|
+
@mock.should_receive(:random_call).with(duck_type(:abs, :div))
|
46
89
|
@mock.random_call(1)
|
47
90
|
end
|
91
|
+
|
92
|
+
it "should match no args against any_args()" do
|
93
|
+
@mock.should_receive(:random_call).with(any_args)
|
94
|
+
@mock.random_call()
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should match one arg against any_args()" do
|
98
|
+
@mock.should_receive(:random_call).with(any_args)
|
99
|
+
@mock.random_call("a string")
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should match no args against no_args()" do
|
103
|
+
@mock.should_receive(:random_call).with(no_args)
|
104
|
+
@mock.random_call()
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe Methods, "handling non-constraint arguments" do
|
48
109
|
|
49
|
-
it "should match non special symbol" do
|
110
|
+
it "should match non special symbol (can be removed when deprecated symbols are removed)" do
|
50
111
|
@mock.should_receive(:random_call).with(:some_symbol)
|
51
112
|
@mock.random_call(:some_symbol)
|
52
113
|
end
|
53
114
|
|
54
|
-
it "should match string" do
|
55
|
-
@mock.should_receive(:random_call).with(:string)
|
56
|
-
@mock.random_call("a string")
|
57
|
-
end
|
58
|
-
|
59
115
|
it "should match string against regexp" do
|
60
116
|
@mock.should_receive(:random_call).with(/bcd/)
|
61
117
|
@mock.random_call("abcde")
|
@@ -113,7 +113,7 @@ module Spec
|
|
113
113
|
|
114
114
|
it "sets Expectations differ when differ_class is set" do
|
115
115
|
@options.differ_class = Spec::Expectations::Differs::Default
|
116
|
-
Spec::Expectations.should_receive(:differ=).with(
|
116
|
+
Spec::Expectations.should_receive(:differ=).with(anything()).and_return do |arg|
|
117
117
|
arg.class.should == Spec::Expectations::Differs::Default
|
118
118
|
end
|
119
119
|
@options.create_behaviour_runner
|
@@ -30,7 +30,7 @@ module Spec
|
|
30
30
|
@formatter.should_receive(:example_started).exactly(3).times
|
31
31
|
@formatter.should_receive(:example_passed).exactly(3).times
|
32
32
|
@formatter.should_receive(:start_dump)
|
33
|
-
@formatter.should_receive(:dump_summary).with(
|
33
|
+
@formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0)
|
34
34
|
@reporter.add_behaviour("behaviour")
|
35
35
|
@reporter.example_started("spec 1")
|
36
36
|
@reporter.example_finished("spec 1")
|
@@ -51,7 +51,7 @@ module Spec
|
|
51
51
|
@formatter.should_receive(:example_failed).with("example", 2, failure)
|
52
52
|
@formatter.should_receive(:dump_failure).exactly(2).times
|
53
53
|
@formatter.should_receive(:start_dump)
|
54
|
-
@formatter.should_receive(:dump_summary).with(
|
54
|
+
@formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0)
|
55
55
|
@backtrace_tweaker.should_receive(:tweak_backtrace).twice
|
56
56
|
@reporter.add_behaviour("behaviour")
|
57
57
|
@reporter.example_finished("example")
|
@@ -64,7 +64,7 @@ module Spec
|
|
64
64
|
|
65
65
|
it "should push stats to formatter even with no data" do
|
66
66
|
@formatter.should_receive(:start_dump)
|
67
|
-
@formatter.should_receive(:dump_summary).with(
|
67
|
+
@formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0)
|
68
68
|
@reporter.dump
|
69
69
|
end
|
70
70
|
|
@@ -98,7 +98,7 @@ module Spec
|
|
98
98
|
it "should account for passing example in stats" do
|
99
99
|
@formatter.should_receive(:example_passed)
|
100
100
|
@formatter.should_receive(:start_dump)
|
101
|
-
@formatter.should_receive(:dump_summary).with(
|
101
|
+
@formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0)
|
102
102
|
@reporter.example_finished("example")
|
103
103
|
@reporter.dump
|
104
104
|
end
|
@@ -123,8 +123,8 @@ module Spec
|
|
123
123
|
@formatter.should_receive(:add_behaviour)
|
124
124
|
@formatter.should_receive(:example_failed).with("example", 1, failure)
|
125
125
|
@formatter.should_receive(:start_dump)
|
126
|
-
@formatter.should_receive(:dump_failure).with(1,
|
127
|
-
@formatter.should_receive(:dump_summary).with(
|
126
|
+
@formatter.should_receive(:dump_failure).with(1, anything())
|
127
|
+
@formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0)
|
128
128
|
@reporter.add_behaviour("behaviour")
|
129
129
|
@reporter.example_finished("example", RuntimeError.new)
|
130
130
|
@reporter.dump
|
@@ -144,7 +144,7 @@ module Spec
|
|
144
144
|
it "should account for not implemented example in stats" do
|
145
145
|
@formatter.should_receive(:example_not_implemented)
|
146
146
|
@formatter.should_receive(:start_dump)
|
147
|
-
@formatter.should_receive(:dump_summary).with(
|
147
|
+
@formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
|
148
148
|
@reporter.example_finished("example", nil, nil, true)
|
149
149
|
@reporter.dump
|
150
150
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,6 +6,7 @@ lib_path = File.expand_path("#{dir}/../lib")
|
|
6
6
|
$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
|
7
7
|
|
8
8
|
require 'spec'
|
9
|
+
require 'spec/mocks'
|
9
10
|
require 'hpricot'
|
10
11
|
spec_classes_path = File.expand_path("#{dir}/../spec/spec/spec_classes")
|
11
12
|
require spec_classes_path unless $LOAD_PATH.include?(spec_classes_path)
|
metadata
CHANGED
@@ -3,9 +3,9 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rspec
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.0.
|
7
|
-
date: 2007-05-
|
8
|
-
summary: RSpec-1.0.
|
6
|
+
version: 1.0.4
|
7
|
+
date: 2007-05-29 00:00:00 -04:00
|
8
|
+
summary: RSpec-1.0.4 (r2054) - BDD for Ruby http://rspec.rubyforge.org/
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: rspec-devel@rubyforge.org
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- spec/spec/matchers/include_spec.rb
|
143
143
|
- spec/spec/matchers/match_spec.rb
|
144
144
|
- spec/spec/matchers/matcher_methods_spec.rb
|
145
|
+
- spec/spec/matchers/mock_constraint_matchers_spec.rb
|
145
146
|
- spec/spec/matchers/operator_matcher_spec.rb
|
146
147
|
- spec/spec/matchers/raise_error_spec.rb
|
147
148
|
- spec/spec/matchers/respond_to_spec.rb
|