rspec 0.5.1 → 0.5.2
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 +9 -1
- data/README +1 -0
- data/Rakefile +14 -6
- data/doc/README +1 -1
- data/doc/reference/rspec reference.page +0 -0
- data/doc/src/community.page +0 -1
- data/doc/src/default.template +1 -3
- data/doc/src/documentation/api.page +36 -35
- data/doc/src/documentation/index.page +9 -4
- data/doc/src/documentation/meta.info +22 -0
- data/doc/src/documentation/mocks.page +68 -32
- data/doc/src/download.page +0 -1
- data/doc/src/examples.page +1 -2
- data/doc/src/index.page +0 -1
- data/doc/src/meta.info +23 -0
- data/doc/src/tools/index.page +139 -4
- data/doc/src/tools/meta.info +12 -0
- data/doc/src/tools/rails.page +0 -1
- data/doc/src/tools/rake.page +0 -1
- data/doc/src/tools/test2rspec.page +10 -3
- data/doc/src/why_rspec.page +0 -1
- data/examples/airport_spec.rb +14 -4
- data/examples/empty_stack_spec.rb +21 -0
- data/examples/stack_spec.rb +4 -1
- data/lib/spec.rb +2 -1
- data/lib/spec/api/helper/should_helper.rb +5 -4
- data/lib/spec/api/helper/should_negator.rb +2 -0
- data/lib/spec/api/mock.rb +4 -7
- data/lib/spec/runner/backtrace_tweaker.rb +3 -4
- data/lib/spec/runner/execution_context.rb +4 -0
- data/lib/spec/runner/kernel_ext.rb +1 -2
- data/lib/spec/runner/option_parser.rb +12 -7
- data/lib/spec/version.rb +10 -7
- data/test/spec/api/helper/raising_test.rb +12 -0
- data/test/spec/api/helper/should_satisfy_test.rb +8 -6
- data/test/spec/api/mock_arg_constraints_test.rb +1 -10
- data/test/spec/api/mock_test.rb +71 -2
- data/test/spec/runner/context_runner_test.rb +23 -0
- data/test/spec/runner/context_test.rb +41 -0
- data/test/spec/runner/execution_context_test.rb +7 -0
- data/test/spec/runner/kernel_ext_test.rb +14 -0
- data/test/spec/runner/option_parser_test.rb +17 -10
- metadata +8 -8
- data/doc/src/documentation/specs.page +0 -20
- data/doc/src/tools/rcov.page +0 -8
- data/doc/src/tools/spec_runner.page +0 -8
- data/doc/src/tools/specdoc.page +0 -8
data/doc/src/download.page
CHANGED
data/doc/src/examples.page
CHANGED
data/doc/src/index.page
CHANGED
data/doc/src/meta.info
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
index.page:
|
2
|
+
orderInfo: 1
|
3
|
+
|
4
|
+
why_rspec.page:
|
5
|
+
orderInfo: 2
|
6
|
+
|
7
|
+
examples.page:
|
8
|
+
orderInfo: 3
|
9
|
+
|
10
|
+
documentation:
|
11
|
+
title: Documentation
|
12
|
+
orderInfo: 4
|
13
|
+
|
14
|
+
download.page:
|
15
|
+
orderInfo: 5
|
16
|
+
|
17
|
+
tools:
|
18
|
+
title: Tools
|
19
|
+
orderInfo: 6
|
20
|
+
|
21
|
+
community.page:
|
22
|
+
orderInfo: 7
|
23
|
+
|
data/doc/src/tools/index.page
CHANGED
@@ -1,8 +1,143 @@
|
|
1
1
|
---
|
2
|
-
title:
|
2
|
+
title: Spec Runner
|
3
3
|
inMenu: true
|
4
|
-
ordering: 1
|
5
4
|
---
|
6
|
-
h2.
|
5
|
+
h2. Processing Specifications
|
7
6
|
|
8
|
-
|
7
|
+
The spec command processes specification files. The general form of the command is
|
8
|
+
|
9
|
+
<pre>
|
10
|
+
<code>
|
11
|
+
spec [options] (FILE|DIRECTORY)+
|
12
|
+
</code>
|
13
|
+
</pre>
|
14
|
+
|
15
|
+
Any number of files and/or directories can be provided, all ruby source files
|
16
|
+
that are found are loaded. Running spec on the previous example results in:
|
17
|
+
|
18
|
+
<pre>
|
19
|
+
<code>
|
20
|
+
..................
|
21
|
+
|
22
|
+
Finished in 0.007523 seconds
|
23
|
+
|
24
|
+
4 contexts, 18 specifications, 0 failures
|
25
|
+
</code>
|
26
|
+
</pre>
|
27
|
+
|
28
|
+
Very simple and to the point. Passing specifications are indicated by a '.',
|
29
|
+
failing ones by a 'F'. Note that failure indicates a violated expectation as
|
30
|
+
well as an unexpected exception being raised. Here's an example with a failing specification:
|
31
|
+
|
32
|
+
<pre>
|
33
|
+
<code>
|
34
|
+
F.
|
35
|
+
|
36
|
+
1)
|
37
|
+
SpecFramework #<SpecFramework:0x3d73dc> should be adopted_quickly (Spec::Api::ExpectationNotMetError)
|
38
|
+
Context: Spec framework [./examples/spec_framework_spec.rb:13]
|
39
|
+
Specification: should be adopted quickly [./examples/spec_framework_spec.rb:19]
|
40
|
+
./examples/spec_framework_spec.rb:21:in `should be adopted quickly'
|
41
|
+
|
42
|
+
Finished in 0.001565 seconds
|
43
|
+
|
44
|
+
1 context, 2 specifications, 1 failure
|
45
|
+
</code>
|
46
|
+
</pre>
|
47
|
+
|
48
|
+
h3. -v, --verbose
|
49
|
+
|
50
|
+
Using this option provides more information:
|
51
|
+
|
52
|
+
<pre>
|
53
|
+
<code>
|
54
|
+
An empty stack
|
55
|
+
- should accept an item when sent push
|
56
|
+
- should complain when sent top
|
57
|
+
- should complain when sent pop
|
58
|
+
|
59
|
+
A stack with one item
|
60
|
+
- should accept an item when sent push
|
61
|
+
- should return top when sent top
|
62
|
+
- should not remove top when sent top
|
63
|
+
- should return top when sent pop
|
64
|
+
- should remove top when sent pop
|
65
|
+
|
66
|
+
An almost full stack (with one item less than capacity)
|
67
|
+
- should accept an item when sent push
|
68
|
+
- should return top when sent top
|
69
|
+
- should not remove top when sent top
|
70
|
+
- should return top when sent pop
|
71
|
+
- should remove top when sent pop
|
72
|
+
|
73
|
+
A full stack
|
74
|
+
- should complain on push
|
75
|
+
- should return top when sent top
|
76
|
+
- should not remove top when sent top
|
77
|
+
- should return top when sent pop
|
78
|
+
- should remove top when sent pop
|
79
|
+
|
80
|
+
Finished in 0.013635 seconds
|
81
|
+
|
82
|
+
4 contexts, 18 specifications, 0 failures
|
83
|
+
</code>
|
84
|
+
</pre>
|
85
|
+
|
86
|
+
Similar, here is a failing specification when the verbose opton is used:
|
87
|
+
|
88
|
+
<pre>
|
89
|
+
<code>
|
90
|
+
Spec framework
|
91
|
+
- should be adopted quickly (FAILED - 1)
|
92
|
+
- should be intuitive
|
93
|
+
|
94
|
+
|
95
|
+
1)
|
96
|
+
SpecFramework #<SpecFramework:0x3d7238> should be adopted_quickly (Spec::Api::ExpectationNotMetError)
|
97
|
+
Context: Spec framework [./examples/spec_framework_spec.rb:13]
|
98
|
+
Specification: should be adopted quickly [./examples/spec_framework_spec.rb:19]
|
99
|
+
./examples/spec_framework_spec.rb:21:in `should be adopted quickly'
|
100
|
+
|
101
|
+
Finished in 0.002726 seconds
|
102
|
+
|
103
|
+
1 context, 2 specifications, 1 failure
|
104
|
+
</code>
|
105
|
+
</pre>
|
106
|
+
|
107
|
+
The spec command does double duty as documentation generation from a set of
|
108
|
+
specifications as well as running them against your code.
|
109
|
+
|
110
|
+
h3.-d, --doc
|
111
|
+
|
112
|
+
Process the specifications in documentation generation mode. This will produce
|
113
|
+
an rdoc input file. For example here is the result of running spec -d on the
|
114
|
+
previous example:
|
115
|
+
|
116
|
+
<pre>
|
117
|
+
<code>
|
118
|
+
# An empty stack
|
119
|
+
# * should accept an item when sent push
|
120
|
+
# * should complain when sent top
|
121
|
+
# * should complain when sent pop
|
122
|
+
# A stack with one item
|
123
|
+
# * should accept an item when sent push
|
124
|
+
# * should return top when sent top
|
125
|
+
# * should not remove top when sent top
|
126
|
+
# * should return top when sent pop
|
127
|
+
# * should remove top when sent pop
|
128
|
+
# An almost full stack (with one item less than capacity)
|
129
|
+
# * should accept an item when sent push
|
130
|
+
# * should return top when sent top
|
131
|
+
# * should not remove top when sent top
|
132
|
+
# * should return top when sent pop
|
133
|
+
# * should remove top when sent pop
|
134
|
+
# A full stack
|
135
|
+
# * should complain on push
|
136
|
+
# * should return top when sent top
|
137
|
+
# * should not remove top when sent top
|
138
|
+
# * should return top when sent pop
|
139
|
+
# * should remove top when sent pop
|
140
|
+
</code>
|
141
|
+
</pre>
|
142
|
+
|
143
|
+
Rdoc renders this as "this":rdoc-output/index.html.
|
data/doc/src/tools/rails.page
CHANGED
data/doc/src/tools/rake.page
CHANGED
@@ -1,8 +1,15 @@
|
|
1
1
|
---
|
2
|
-
title: Test::Unit
|
2
|
+
title: Test::Unit Migration
|
3
3
|
inMenu: true
|
4
|
-
ordering: 5
|
5
4
|
---
|
6
5
|
h2. Test::Unit migration
|
7
6
|
|
8
|
-
|
7
|
+
rSpec provides a tool for converting Test::Unit files into specifications. Anything that cannot be converted is left in it's original form. The command line is:
|
8
|
+
|
9
|
+
<pre>
|
10
|
+
<code>
|
11
|
+
test2rspec SRC [DEST]
|
12
|
+
</code>
|
13
|
+
</pre>
|
14
|
+
|
15
|
+
If DEST is not supplied, output is sent to STDOUT.
|
data/doc/src/why_rspec.page
CHANGED
data/examples/airport_spec.rb
CHANGED
@@ -10,20 +10,30 @@ class Airport
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
class Spec::Runner::Context
|
14
|
+
alias should specify
|
15
|
+
alias must specify
|
16
|
+
alias fact specify
|
17
|
+
end
|
18
|
+
module Kernel
|
19
|
+
alias topic context
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
topic "Airport at home" do
|
14
24
|
setup do
|
15
25
|
@airport = Airport.new
|
16
26
|
end
|
17
27
|
|
18
|
-
|
28
|
+
fact "should always work" do
|
19
29
|
@airport.should.be.working
|
20
30
|
end
|
21
31
|
|
22
|
-
|
32
|
+
must "not need cables" do
|
23
33
|
@airport.should.not.need :cables
|
24
34
|
end
|
25
35
|
|
26
|
-
|
36
|
+
must "not need electricity" do
|
27
37
|
# This will fail...
|
28
38
|
@airport.should.not.need :electricity
|
29
39
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/stack"
|
2
|
+
|
3
|
+
context "An empty stack" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
@stack = Stack.new
|
7
|
+
end
|
8
|
+
|
9
|
+
specify "should accept an item when sent push" do
|
10
|
+
lambda { @stack.push Object.new }.should.not.raise
|
11
|
+
end
|
12
|
+
|
13
|
+
specify "should complain when sent top" do
|
14
|
+
lambda { @stack.top }.should.raise StackUnderflowError
|
15
|
+
end
|
16
|
+
|
17
|
+
specify "should complain when sent pop" do
|
18
|
+
lambda { @stack.pop }.should.raise StackUnderflowError
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/examples/stack_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/stack"
|
2
|
+
|
1
3
|
context "An empty stack" do
|
2
4
|
|
3
5
|
setup do
|
@@ -18,7 +20,7 @@ context "An empty stack" do
|
|
18
20
|
|
19
21
|
end
|
20
22
|
|
21
|
-
context "A stack with one item" do
|
23
|
+
context "A stack with one item" do
|
22
24
|
setup do
|
23
25
|
@stack = Stack.new
|
24
26
|
@stack.push 3
|
@@ -77,6 +79,7 @@ context "An almost full stack (with one item less than capacity)" do
|
|
77
79
|
end
|
78
80
|
|
79
81
|
end
|
82
|
+
|
80
83
|
context "A full stack" do
|
81
84
|
|
82
85
|
setup do
|
data/lib/spec.rb
CHANGED
@@ -14,16 +14,17 @@ module Spec
|
|
14
14
|
HaveHelper.new(@target, expected_number)
|
15
15
|
end
|
16
16
|
|
17
|
-
def satisfy
|
18
|
-
|
17
|
+
def satisfy(&block)
|
18
|
+
return if block.call(@target)
|
19
|
+
fail_with_message "Supplied expectation was not satisfied"
|
19
20
|
end
|
20
21
|
|
21
22
|
def equal(expected)
|
22
23
|
fail_with_message(default_message("should equal", expected)) unless (@target == expected)
|
23
24
|
end
|
24
25
|
|
25
|
-
def be(expected = :
|
26
|
-
return self if (expected == :
|
26
|
+
def be(expected = :___no_arg)
|
27
|
+
return self if (expected == :___no_arg)
|
27
28
|
return if (expected == false and @target.nil?)
|
28
29
|
return if (expected == true and (!@target.nil?) and (@target != false))
|
29
30
|
fail_with_message(default_message("should be", expected)) unless (@target.equal?(expected))
|
@@ -51,6 +51,7 @@ module Spec
|
|
51
51
|
rescue exception
|
52
52
|
fail_with_message(default_message("should not raise", exception.inspect))
|
53
53
|
rescue
|
54
|
+
true
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
@@ -62,6 +63,7 @@ module Spec
|
|
62
63
|
end
|
63
64
|
fail_with_message(default_message("should not throw", symbol.inspect))
|
64
65
|
rescue NameError
|
66
|
+
true
|
65
67
|
end
|
66
68
|
end
|
67
69
|
|
data/lib/spec/api/mock.rb
CHANGED
@@ -81,8 +81,9 @@ module Spec
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def constraints_match?(args)
|
84
|
+
return true if @expected_params.length == 1 and @expected_params[0] == :any_args
|
84
85
|
return false if args.length != @expected_params.length
|
85
|
-
|
86
|
+
@expected_params.each_index do |i|
|
86
87
|
next if @expected_params[i] == :anything
|
87
88
|
next if @expected_params[i] == :numeric and args[i].is_a?Numeric
|
88
89
|
next if @expected_params[i] == :boolean and args[i].is_a?TrueClass or args[i].is_a?FalseClass
|
@@ -144,10 +145,6 @@ module Spec
|
|
144
145
|
return result
|
145
146
|
end
|
146
147
|
|
147
|
-
unless @expected_params.nil? or @expected_params == args or constraints_match?(args)
|
148
|
-
Kernel::raise Spec::Api::MockExpectationError,
|
149
|
-
"#{@sym}: Parameter mismatch: Expected <#{@expected_params}>, got <#{args}>"
|
150
|
-
end
|
151
148
|
args << block unless block.nil?
|
152
149
|
@received_count += 1
|
153
150
|
|
@@ -162,8 +159,8 @@ module Spec
|
|
162
159
|
end
|
163
160
|
|
164
161
|
def with(*args)
|
165
|
-
if args == [:
|
166
|
-
elsif args == [:
|
162
|
+
if args == [:any_args] then @expected_params = nil
|
163
|
+
elsif args == [:no_args] then @expected_params = []
|
167
164
|
else @expected_params = args
|
168
165
|
end
|
169
166
|
|
@@ -3,14 +3,13 @@ module Spec
|
|
3
3
|
class BacktraceTweaker
|
4
4
|
def tweak_backtrace error, spec_name
|
5
5
|
return if error.backtrace.nil?
|
6
|
-
|
7
|
-
error.backtrace.each do |line|
|
6
|
+
error.backtrace.collect! do |line|
|
8
7
|
line = line.split(':in')[0] + ":in `#{spec_name}'" if line.include?('__instance_exec')
|
9
8
|
line = nil if line.include? '/lib/spec/api/helper/should_base.rb'
|
10
9
|
line = nil if line.include? '/lib/spec/api/helper/should_negator.rb' unless line.nil?
|
11
|
-
|
10
|
+
line
|
12
11
|
end
|
13
|
-
error.
|
12
|
+
error.backtrace.compact!
|
14
13
|
end
|
15
14
|
end
|
16
15
|
end
|