rspec 1.1.5 → 1.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +12 -1
- data/Manifest.txt +3 -3
- data/Rakefile +0 -1
- data/TODO.txt +8 -0
- data/bin/autospec +0 -1
- data/examples/pure/autogenerated_docstrings_example.rb +4 -4
- data/lib/autotest/discover.rb +1 -1
- data/lib/spec/example/errors.rb +19 -4
- data/lib/spec/example/example_group.rb +8 -1
- data/lib/spec/example/example_group_methods.rb +26 -20
- data/lib/spec/example/example_methods.rb +2 -7
- data/lib/spec/matchers/be.rb +18 -18
- data/lib/spec/matchers/be_close.rb +5 -5
- data/lib/spec/matchers/eql.rb +6 -6
- data/lib/spec/matchers/equal.rb +6 -6
- data/lib/spec/matchers/exist.rb +10 -5
- data/lib/spec/matchers/has.rb +2 -2
- data/lib/spec/matchers/have.rb +8 -8
- data/lib/spec/matchers/include.rb +5 -5
- data/lib/spec/matchers/match.rb +9 -9
- data/lib/spec/matchers/operator_matcher.rb +17 -17
- data/lib/spec/matchers/raise_error.rb +17 -17
- data/lib/spec/matchers/respond_to.rb +5 -4
- data/lib/spec/matchers/satisfy.rb +5 -5
- data/lib/spec/matchers/simple_matcher.rb +8 -8
- data/lib/spec/matchers/throw_symbol.rb +3 -3
- data/lib/spec/mocks.rb +0 -11
- data/lib/spec/mocks/argument_constraints.rb +5 -25
- data/lib/spec/mocks/argument_expectation.rb +19 -41
- data/lib/spec/mocks/message_expectation.rb +1 -1
- data/lib/spec/story/runner.rb +1 -1
- data/lib/spec/version.rb +2 -2
- data/rspec.gemspec +6 -6
- data/spec/{autotest_helper.rb → autotest/autotest_helper.rb} +2 -2
- data/spec/{autotest_matchers.rb → autotest/autotest_matchers.rb} +0 -0
- data/spec/autotest/discover_spec.rb +1 -1
- data/spec/autotest/rspec_spec.rb +1 -1
- data/spec/rspec_suite.rb +0 -1
- data/spec/spec/example/example_methods_spec.rb +36 -3
- data/spec/spec/example/pending_module_spec.rb +76 -0
- data/spec/spec/matchers/respond_to_spec.rb +6 -6
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +0 -34
- data/spec/spec/mocks/mock_spec.rb +6 -0
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +0 -44
- data/spec/spec/runner/drb_command_line_spec.rb +1 -1
- data/spec/spec/{example → runner/formatter}/base_formatter_spec.rb +1 -1
- data/spec/spec/runner/option_parser_spec.rb +1 -1
- data/spec/spec/runner/reporter_spec.rb +1 -1
- data/spec/spec/story/runner/story_runner_spec.rb +3 -3
- data/spec/spec/story/world_spec.rb +7 -7
- metadata +7 -7
data/History.txt
CHANGED
@@ -1,4 +1,15 @@
|
|
1
|
-
=== Version 1.1.
|
1
|
+
=== Version 1.1.6 / 2008-10-02
|
2
|
+
|
3
|
+
* 2 bug fixes
|
4
|
+
|
5
|
+
* fixed bug where negative message expectations following stubs resulted in false (negative) positives (Pat Maddox). Closes #548.
|
6
|
+
* fixed bug where Not Yet Implemented examples report incorrect caller (Scott Taylor). Closes #547.
|
7
|
+
|
8
|
+
* 1 minor enhancement
|
9
|
+
|
10
|
+
* removed deprecated mock argument constraint symbols
|
11
|
+
|
12
|
+
=== Version 1.1.5 / 2008-09-28
|
2
13
|
|
3
14
|
IMPORTANT: use the new 'autospec' command instead of 'autotest'. We changed
|
4
15
|
the way autotest discovers rspec so the autotest executable won't
|
data/Manifest.txt
CHANGED
@@ -204,15 +204,14 @@ rake_tasks/failing_examples_with_html.rake
|
|
204
204
|
rake_tasks/verify_rcov.rake
|
205
205
|
rspec.gemspec
|
206
206
|
spec/README.jruby
|
207
|
+
spec/autotest/autotest_helper.rb
|
208
|
+
spec/autotest/autotest_matchers.rb
|
207
209
|
spec/autotest/discover_spec.rb
|
208
210
|
spec/autotest/rspec_spec.rb
|
209
|
-
spec/autotest_helper.rb
|
210
|
-
spec/autotest_matchers.rb
|
211
211
|
spec/rspec_suite.rb
|
212
212
|
spec/ruby_forker.rb
|
213
213
|
spec/spec.opts
|
214
214
|
spec/spec/adapters/ruby_engine_spec.rb
|
215
|
-
spec/spec/example/base_formatter_spec.rb
|
216
215
|
spec/spec/example/configuration_spec.rb
|
217
216
|
spec/spec/example/example_group/described_module_spec.rb
|
218
217
|
spec/spec/example/example_group/warning_messages_spec.rb
|
@@ -300,6 +299,7 @@ spec/spec/runner/drb_command_line_spec.rb
|
|
300
299
|
spec/spec/runner/empty_file.txt
|
301
300
|
spec/spec/runner/examples.txt
|
302
301
|
spec/spec/runner/failed.txt
|
302
|
+
spec/spec/runner/formatter/base_formatter_spec.rb
|
303
303
|
spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
|
304
304
|
spec/spec/runner/formatter/failing_examples_formatter_spec.rb
|
305
305
|
spec/spec/runner/formatter/html_formatted-1.8.4.html
|
data/Rakefile
CHANGED
@@ -19,7 +19,6 @@ Hoe.new('rspec', Spec::VERSION::STRING) do |p|
|
|
19
19
|
p.description = "Behaviour Driven Development for Ruby."
|
20
20
|
p.rubyforge_name = 'rspec'
|
21
21
|
p.developer('RSpec Development Team', 'rspec-devel@rubyforge.org')
|
22
|
-
p.spec_extras = { :to_ruby => lambda { |str| File.open("rspec.gemspec", "w+"){ |f| f.puts str } } }
|
23
22
|
end
|
24
23
|
|
25
24
|
['audit','test','test_deps','default','publish_docs','post_blog'].each do |task|
|
data/TODO.txt
CHANGED
data/bin/autospec
CHANGED
@@ -5,15 +5,15 @@ require File.dirname(__FILE__) + '/spec_helper'
|
|
5
5
|
describe "Examples with no descriptions" do
|
6
6
|
|
7
7
|
# description is auto-generated as "should equal(5)" based on the last #should
|
8
|
-
|
8
|
+
specify do
|
9
9
|
3.should equal(3)
|
10
10
|
5.should equal(5)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
specify { 3.should be < 5 }
|
14
14
|
|
15
|
-
|
15
|
+
specify { ["a"].should include("a") }
|
16
16
|
|
17
|
-
|
17
|
+
specify { [1,2,3].should respond_to(:size) }
|
18
18
|
|
19
19
|
end
|
data/lib/autotest/discover.rb
CHANGED
data/lib/spec/example/errors.rb
CHANGED
@@ -1,15 +1,30 @@
|
|
1
1
|
module Spec
|
2
2
|
module Example
|
3
3
|
class ExamplePendingError < StandardError
|
4
|
-
|
4
|
+
attr_reader :pending_caller
|
5
|
+
|
6
|
+
def initialize(message=nil)
|
5
7
|
super
|
6
8
|
@pending_caller = caller[2]
|
7
9
|
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class NotYetImplementedError < ExamplePendingError
|
13
|
+
MESSAGE = "Not Yet Implemented"
|
14
|
+
RSPEC_ROOT_LIB = File.expand_path(File.dirname(__FILE__) + "/../..")
|
8
15
|
|
9
|
-
|
16
|
+
def initialize(backtrace)
|
17
|
+
super(MESSAGE)
|
18
|
+
@pending_caller = pending_caller_from(backtrace)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def pending_caller_from(backtrace)
|
24
|
+
backtrace.detect {|line| !line.include?(RSPEC_ROOT_LIB) }
|
25
|
+
end
|
10
26
|
end
|
11
27
|
|
12
|
-
class PendingExampleFixedError < StandardError
|
13
|
-
end
|
28
|
+
class PendingExampleFixedError < StandardError; end
|
14
29
|
end
|
15
30
|
end
|
@@ -8,7 +8,14 @@ module Spec
|
|
8
8
|
|
9
9
|
def initialize(defined_description, &implementation)
|
10
10
|
@_defined_description = defined_description
|
11
|
-
@_implementation = implementation
|
11
|
+
@_implementation = implementation || pending_implementation
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def pending_implementation
|
17
|
+
error = NotYetImplementedError.new(caller)
|
18
|
+
lambda { raise(error) }
|
12
19
|
end
|
13
20
|
end
|
14
21
|
end
|
@@ -38,24 +38,30 @@ module Spec
|
|
38
38
|
def describe(*args, &example_group_block)
|
39
39
|
args << {} unless Hash === args.last
|
40
40
|
if example_group_block
|
41
|
-
|
42
|
-
|
43
|
-
if
|
44
|
-
|
41
|
+
options = args.last
|
42
|
+
options[:spec_path] = eval("caller(0)[1]", example_group_block) unless options[:spec_path]
|
43
|
+
if options[:shared]
|
44
|
+
create_shared_example_group(args, example_group_block)
|
45
45
|
else
|
46
|
-
|
47
|
-
describe(*args)
|
48
|
-
module_eval(&example_group_block)
|
49
|
-
end
|
46
|
+
create_nested_example_group(args, example_group_block)
|
50
47
|
end
|
51
48
|
else
|
52
49
|
set_description(*args)
|
53
|
-
before_eval
|
54
|
-
self
|
55
50
|
end
|
56
51
|
end
|
57
52
|
alias :context :describe
|
58
|
-
|
53
|
+
|
54
|
+
def create_shared_example_group(args, example_group_block)
|
55
|
+
SharedExampleGroup.new(*args, &example_group_block)
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_nested_example_group(args, example_group_block)
|
59
|
+
self.subclass("Subclass") do
|
60
|
+
describe(*args)
|
61
|
+
module_eval(&example_group_block)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
59
65
|
# Use this to pull in examples from shared example groups.
|
60
66
|
# See Spec::Runner for information about shared example groups.
|
61
67
|
def it_should_behave_like(shared_example_group)
|
@@ -103,21 +109,24 @@ module Spec
|
|
103
109
|
@predicate_matchers ||= {:an_instance_of => :is_a?}
|
104
110
|
end
|
105
111
|
|
106
|
-
# Creates an instance of
|
107
|
-
#
|
108
|
-
def
|
112
|
+
# Creates an instance of the current example group class and adds it to
|
113
|
+
# a collection of examples of the current example group.
|
114
|
+
def example(description=nil, &implementation)
|
109
115
|
e = new(description, &implementation)
|
110
116
|
example_objects << e
|
111
117
|
e
|
112
118
|
end
|
113
119
|
|
114
|
-
alias_method :
|
120
|
+
alias_method :it, :example
|
121
|
+
alias_method :specify, :example
|
115
122
|
|
116
123
|
# Use this to temporarily disable an example.
|
117
|
-
def
|
124
|
+
def xexample(description=nil, opts={}, &block)
|
118
125
|
Kernel.warn("Example disabled: #{description}")
|
119
126
|
end
|
120
|
-
|
127
|
+
|
128
|
+
alias_method :xit, :xexample
|
129
|
+
alias_method :xspecify, :xexample
|
121
130
|
|
122
131
|
def run
|
123
132
|
examples = examples_to_run
|
@@ -410,9 +419,6 @@ module Spec
|
|
410
419
|
end
|
411
420
|
end
|
412
421
|
|
413
|
-
def before_eval
|
414
|
-
end
|
415
|
-
|
416
422
|
def add_method_examples(examples)
|
417
423
|
instance_methods.sort.each do |method_name|
|
418
424
|
if example_method?(method_name)
|
@@ -5,11 +5,6 @@ module Spec
|
|
5
5
|
extend ModuleReopeningFix
|
6
6
|
include ModuleInclusionWarnings
|
7
7
|
|
8
|
-
|
9
|
-
PENDING_EXAMPLE_BLOCK = lambda {
|
10
|
-
raise Spec::Example::ExamplePendingError.new("Not Yet Implemented")
|
11
|
-
}
|
12
|
-
|
13
8
|
def execute(options, instance_variables)
|
14
9
|
options.reporter.example_started(self)
|
15
10
|
set_instance_variables_from_hash(instance_variables)
|
@@ -80,7 +75,7 @@ module Spec
|
|
80
75
|
end
|
81
76
|
|
82
77
|
def eval_block
|
83
|
-
|
78
|
+
instance_eval(&@_implementation)
|
84
79
|
end
|
85
80
|
|
86
81
|
def implementation_backtrace
|
@@ -104,4 +99,4 @@ module Spec
|
|
104
99
|
end
|
105
100
|
end
|
106
101
|
end
|
107
|
-
end
|
102
|
+
end
|
data/lib/spec/matchers/be.rb
CHANGED
@@ -12,11 +12,11 @@ module Spec
|
|
12
12
|
@comparison = ""
|
13
13
|
end
|
14
14
|
|
15
|
-
def matches?(
|
16
|
-
@
|
15
|
+
def matches?(given)
|
16
|
+
@given = given
|
17
17
|
if handling_predicate?
|
18
18
|
begin
|
19
|
-
return @result =
|
19
|
+
return @result = given.__send__(predicate, *@args)
|
20
20
|
rescue => predicate_error
|
21
21
|
# This clause should be empty, but rcov will not report it as covered
|
22
22
|
# unless something (anything) is executed within the clause
|
@@ -24,7 +24,7 @@ module Spec
|
|
24
24
|
end
|
25
25
|
|
26
26
|
begin
|
27
|
-
return @result =
|
27
|
+
return @result = given.__send__(present_tense_predicate, *@args)
|
28
28
|
rescue
|
29
29
|
raise predicate_error
|
30
30
|
end
|
@@ -34,12 +34,12 @@ module Spec
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def failure_message
|
37
|
-
return "expected #{@comparison}#{expected}, got #{@
|
37
|
+
return "expected #{@comparison}#{expected}, got #{@given.inspect}" unless handling_predicate?
|
38
38
|
return "expected #{predicate}#{args_to_s} to return true, got #{@result.inspect}"
|
39
39
|
end
|
40
40
|
|
41
41
|
def negative_failure_message
|
42
|
-
return "expected not #{expected}, got #{@
|
42
|
+
return "expected not #{expected}, got #{@given.inspect}" unless handling_predicate?
|
43
43
|
return "expected #{predicate}#{args_to_s} to return false, got #{@result.inspect}"
|
44
44
|
end
|
45
45
|
|
@@ -52,17 +52,17 @@ module Spec
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def match_or_compare
|
55
|
-
return @
|
56
|
-
return @
|
57
|
-
return @
|
58
|
-
return @
|
59
|
-
return @
|
60
|
-
return @
|
61
|
-
return @
|
62
|
-
return @
|
63
|
-
return @
|
64
|
-
return @
|
65
|
-
return @
|
55
|
+
return @given ? true : false if @expected == :satisfy_if
|
56
|
+
return @given == true if @expected == :true
|
57
|
+
return @given == false if @expected == :false
|
58
|
+
return @given.nil? if @expected == :nil
|
59
|
+
return @given < @expected if @less_than
|
60
|
+
return @given <= @expected if @less_than_or_equal
|
61
|
+
return @given >= @expected if @greater_than_or_equal
|
62
|
+
return @given > @expected if @greater_than
|
63
|
+
return @given == @expected if @double_equal
|
64
|
+
return @given === @expected if @triple_equal
|
65
|
+
return @given.equal?(@expected)
|
66
66
|
end
|
67
67
|
|
68
68
|
def ==(expected)
|
@@ -189,7 +189,7 @@ module Spec
|
|
189
189
|
# should_not be_nil
|
190
190
|
# should_not be_arbitrary_predicate(*args)
|
191
191
|
#
|
192
|
-
# Given true, false, or nil, will pass if
|
192
|
+
# Given true, false, or nil, will pass if given value is
|
193
193
|
# true, false or nil (respectively). Given no args means
|
194
194
|
# the caller should satisfy an if condition (to be or not to be).
|
195
195
|
#
|
@@ -7,13 +7,13 @@ module Spec
|
|
7
7
|
@delta = delta
|
8
8
|
end
|
9
9
|
|
10
|
-
def matches?(
|
11
|
-
@
|
12
|
-
(@
|
10
|
+
def matches?(given)
|
11
|
+
@given = given
|
12
|
+
(@given - @expected).abs < @delta
|
13
13
|
end
|
14
14
|
|
15
15
|
def failure_message
|
16
|
-
"expected #{@expected} +/- (< #{@delta}), got #{@
|
16
|
+
"expected #{@expected} +/- (< #{@delta}), got #{@given}"
|
17
17
|
end
|
18
18
|
|
19
19
|
def description
|
@@ -25,7 +25,7 @@ module Spec
|
|
25
25
|
# should be_close(expected, delta)
|
26
26
|
# should_not be_close(expected, delta)
|
27
27
|
#
|
28
|
-
# Passes if
|
28
|
+
# Passes if given == expected +/- delta
|
29
29
|
#
|
30
30
|
# == Example
|
31
31
|
#
|
data/lib/spec/matchers/eql.rb
CHANGED
@@ -6,17 +6,17 @@ module Spec
|
|
6
6
|
@expected = expected
|
7
7
|
end
|
8
8
|
|
9
|
-
def matches?(
|
10
|
-
@
|
11
|
-
@
|
9
|
+
def matches?(given)
|
10
|
+
@given = given
|
11
|
+
@given.eql?(@expected)
|
12
12
|
end
|
13
13
|
|
14
14
|
def failure_message
|
15
|
-
return "expected #{@expected.inspect}, got #{@
|
15
|
+
return "expected #{@expected.inspect}, got #{@given.inspect} (using .eql?)", @expected, @given
|
16
16
|
end
|
17
17
|
|
18
18
|
def negative_failure_message
|
19
|
-
return "expected #{@
|
19
|
+
return "expected #{@given.inspect} not to equal #{@expected.inspect} (using .eql?)", @expected, @given
|
20
20
|
end
|
21
21
|
|
22
22
|
def description
|
@@ -28,7 +28,7 @@ module Spec
|
|
28
28
|
# should eql(expected)
|
29
29
|
# should_not eql(expected)
|
30
30
|
#
|
31
|
-
# Passes if
|
31
|
+
# Passes if given and expected are of equal value, but not necessarily the same object.
|
32
32
|
#
|
33
33
|
# See http://www.ruby-doc.org/core/classes/Object.html#M001057 for more information about equality in Ruby.
|
34
34
|
#
|
data/lib/spec/matchers/equal.rb
CHANGED
@@ -6,17 +6,17 @@ module Spec
|
|
6
6
|
@expected = expected
|
7
7
|
end
|
8
8
|
|
9
|
-
def matches?(
|
10
|
-
@
|
11
|
-
@
|
9
|
+
def matches?(given)
|
10
|
+
@given = given
|
11
|
+
@given.equal?(@expected)
|
12
12
|
end
|
13
13
|
|
14
14
|
def failure_message
|
15
|
-
return "expected #{@expected.inspect}, got #{@
|
15
|
+
return "expected #{@expected.inspect}, got #{@given.inspect} (using .equal?)", @expected, @given
|
16
16
|
end
|
17
17
|
|
18
18
|
def negative_failure_message
|
19
|
-
return "expected #{@
|
19
|
+
return "expected #{@given.inspect} not to equal #{@expected.inspect} (using .equal?)", @expected, @given
|
20
20
|
end
|
21
21
|
|
22
22
|
def description
|
@@ -28,7 +28,7 @@ module Spec
|
|
28
28
|
# should equal(expected)
|
29
29
|
# should_not equal(expected)
|
30
30
|
#
|
31
|
-
# Passes if
|
31
|
+
# Passes if given and expected are the same object (object identity).
|
32
32
|
#
|
33
33
|
# See http://www.ruby-doc.org/core/classes/Object.html#M001057 for more information about equality in Ruby.
|
34
34
|
#
|
data/lib/spec/matchers/exist.rb
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
module Spec
|
2
2
|
module Matchers
|
3
3
|
class Exist
|
4
|
-
def matches?
|
5
|
-
@
|
6
|
-
@
|
4
|
+
def matches?(given)
|
5
|
+
@given = given
|
6
|
+
@given.exist?
|
7
7
|
end
|
8
8
|
def failure_message
|
9
|
-
"expected #{@
|
9
|
+
"expected #{@given.inspect} to exist, but it doesn't."
|
10
10
|
end
|
11
11
|
def negative_failure_message
|
12
|
-
"expected #{@
|
12
|
+
"expected #{@given.inspect} to not exist, but it does."
|
13
13
|
end
|
14
14
|
end
|
15
|
+
# :call-seq:
|
16
|
+
# should exist
|
17
|
+
# should_not exist
|
18
|
+
#
|
19
|
+
# Passes if given.exist?
|
15
20
|
def exist; Exist.new; end
|
16
21
|
end
|
17
22
|
end
|