rspec 1.1.5 → 1.1.6
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 +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
|