rspec 0.5.11 → 0.5.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/CHANGES +12 -0
  2. data/README +4 -2
  3. data/Rakefile +14 -4
  4. data/bin/spec +7 -7
  5. data/bin/test2spec +13 -8
  6. data/lib/spec/api/helper/diff.rb +53 -0
  7. data/lib/spec/api/helper/instance_helper.rb +11 -11
  8. data/lib/spec/api/helper/instance_negator.rb +11 -11
  9. data/lib/spec/api/helper/kind_helper.rb +11 -11
  10. data/lib/spec/api/helper/kind_negator.rb +11 -11
  11. data/lib/spec/api/helper/respond_helper.rb +11 -11
  12. data/lib/spec/api/helper/respond_negator.rb +11 -11
  13. data/lib/spec/api/helper/should_base.rb +6 -6
  14. data/lib/spec/api/helper/should_helper.rb +35 -35
  15. data/lib/spec/api/helper/should_negator.rb +20 -20
  16. data/lib/spec/rake/spectask.rb +15 -6
  17. data/lib/spec/runner.rb +1 -0
  18. data/lib/spec/runner/backtrace_tweaker.rb +2 -0
  19. data/lib/spec/runner/base_text_formatter.rb +3 -1
  20. data/lib/spec/runner/html_formatter.rb +153 -0
  21. data/lib/spec/runner/option_parser.rb +9 -2
  22. data/lib/spec/runner/progress_bar_formatter.rb +4 -0
  23. data/lib/spec/runner/rdoc_formatter.rb +3 -0
  24. data/lib/spec/runner/reporter.rb +5 -5
  25. data/lib/spec/runner/specdoc_formatter.rb +3 -0
  26. data/lib/spec/test_to_spec/sexp_transformer.rb +1 -0
  27. data/lib/spec/test_to_spec/translation_test_runner.rb +10 -2
  28. data/lib/spec/version.rb +1 -1
  29. data/test/spec/api/helper/arbitrary_predicate_test.rb +49 -73
  30. data/test/spec/api/helper/diff_test.rb +60 -0
  31. data/test/spec/api/helper/equality_test.rb +14 -0
  32. data/test/spec/api/helper/should_have_test.rb +0 -29
  33. data/test/spec/api/helper/typing_test.rb +87 -87
  34. data/test/spec/api/sugar_test.rb +0 -6
  35. data/test/spec/runner/backtrace_tweaker_test.rb +8 -2
  36. data/test/spec/runner/html_formatter_test.rb +47 -0
  37. data/test/spec/runner/option_parser_test.rb +0 -5
  38. data/test/test_classes.rb +73 -0
  39. data/test/test_helper.rb +3 -0
  40. metadata +8 -49
  41. data/doc/README +0 -3
  42. data/doc/config.yaml +0 -2
  43. data/doc/plugin/syntax.rb +0 -60
  44. data/doc/plugin/version.rb +0 -19
  45. data/doc/src/core_team.page +0 -31
  46. data/doc/src/default.css +0 -199
  47. data/doc/src/default.template +0 -31
  48. data/doc/src/documentation/index.page +0 -188
  49. data/doc/src/documentation/meta.info +0 -22
  50. data/doc/src/documentation/mocks.page +0 -287
  51. data/doc/src/documentation/underscores.page +0 -21
  52. data/doc/src/examples.page +0 -9
  53. data/doc/src/images/David_and_Aslak.jpg +0 -0
  54. data/doc/src/images/Whats_That_Dude.jpg +0 -0
  55. data/doc/src/images/ducks1.png +0 -0
  56. data/doc/src/images/ul.gif +0 -0
  57. data/doc/src/index.page +0 -74
  58. data/doc/src/meta.info +0 -33
  59. data/doc/src/tools/index.page +0 -49
  60. data/doc/src/tools/meta.info +0 -18
  61. data/doc/src/tools/rails.page +0 -132
  62. data/doc/src/tools/rake.page +0 -21
  63. data/doc/src/tools/rcov.page +0 -28
  64. data/doc/src/tools/spec.page +0 -129
  65. data/doc/src/tools/test2spec.page +0 -103
  66. data/doc/src/tutorials/index.page +0 -52
  67. data/doc/src/tutorials/meta.info +0 -36
  68. data/doc/src/tutorials/notes.txt +0 -263
  69. data/doc/src/tutorials/stack.rb +0 -11
  70. data/doc/src/tutorials/stack_01.page +0 -226
  71. data/doc/src/tutorials/stack_02.page +0 -182
  72. data/doc/src/tutorials/stack_03.page +0 -283
  73. data/doc/src/tutorials/stack_04.page +0 -164
  74. data/doc/src/tutorials/stack_04.page.orig +0 -123
  75. data/doc/src/tutorials/stack_05.page +0 -90
  76. data/doc/src/tutorials/stack_05.page.orig +0 -124
  77. data/doc/src/tutorials/stack_06.page +0 -359
  78. data/doc/src/tutorials/stack_06.page.orig +0 -359
  79. data/doc/src/tutorials/stack_spec.rb +0 -25
  80. data/doc/src/ul.gif +0 -0
@@ -1,31 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{lang:}">
4
- <head>
5
- <title>{title: }</title>
6
- <link href="{relocatable: default.css}" rel="stylesheet" type="text/css" media="screen"/>
7
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
- </head>
9
- <body>
10
-
11
- <div id="container">
12
- <div id="header">
13
- <h2>Behaviour Driven Development for <strong>Ruby</strong></h2>
14
- <h1>RSpec {version: }</h1>
15
- </div>
16
-
17
- <div id="navigation">
18
- {menu: {menuStyle: horizontal}}
19
- </div>
20
-
21
- <div id="content">
22
- {content: }
23
-
24
- <div id="footer">
25
- Webdesign by <a href="http://www.oswd.org/user/profile/id/9462">JM</a>
26
- </div>
27
- </div>
28
- </div>
29
-
30
- </body>
31
- </html>
@@ -1,188 +0,0 @@
1
- ---
2
- title: Core API
3
- inMenu: true
4
- ordering: 5
5
- ---
6
- h2. Core API
7
-
8
- When RSpec executes specifications, it defines a method <code>should</code> on every object in the system. This <code>should</code> method is your entry to the magic of RSpec.
9
-
10
- Almost all expectation forms have a corresponding negated form. It is listed when it is supported and, unless otherwise stated, is met when ever the non-negated form would be violated.
11
-
12
- h3. General
13
-
14
- h4. Arbitrary Block
15
-
16
- <ruby>
17
- target.should_satisfy {|arg| ...}
18
- target.should_not_satisfy {|arg| ...}
19
- </ruby>
20
-
21
- The supplied block is evaluated, passing <code>target</code> as the sole argument. If the block evaluates to <code>false</code>, <code>ExpectationNotMetError</code> is raised.
22
-
23
- <ruby>
24
- target.should_satisfy {|arg| arg > 0}
25
- </ruby>
26
-
27
- h4. Equality
28
-
29
- <ruby>
30
- target.should_equal <value>
31
- target.should_not_equal <value>
32
- </ruby>
33
-
34
- The target object is compared to <code>value</code> using ==. If the result is <code>false</code>, <code>ExpectationNotMetError</code> is raised.
35
-
36
- h4. Floating Point Comparison
37
-
38
- <ruby>
39
- target.should_be_close <value>, <tolerance>
40
- target.should_not_be_close <value>, <tolerance>
41
- </ruby>
42
-
43
- The target object is compared to <code>value</code>. If they differ by more that <code>tolerance</code>, <code>ExpectationNotMetError</code> is raised. In the negated case, <code>ExpectationNotMetError</code> is raised if they differ by less than <code>tolerance</code>.
44
-
45
- <ruby>
46
- target.should_be_close 27.35, 0.05
47
- </ruby>
48
-
49
- h4. Identity
50
-
51
- <ruby>
52
- target.should_be <value>
53
- target.should_not_be <value>
54
- </ruby>
55
-
56
- The target object is compared to <code>value</code> using <code>equal?</code>. If the result is <code>false</code>, <code>ExpectationNotMetError</code> is raised.
57
-
58
- h4. Arbitrary Predicate
59
-
60
- <ruby>
61
- target.should_predicate [optional args]
62
- target.should_be_predicate [optional args]
63
- target.should_not_predicate [optional args]
64
- target.should_not_be_predicate [optional args]
65
- </ruby>
66
-
67
- The message <code>predicate?</code> is sent to <code>target</code> with any supplied arguments. If the result is <code>false</code>, <code>ExpectationNotMetError</code> is raised.
68
-
69
- For example:
70
-
71
- <ruby>
72
- container.should_include('a') => container.include?('a')
73
- container.should_be_empty => container.empty?
74
- </ruby>
75
-
76
- h4. Pattern Matching
77
-
78
- <ruby>
79
- target.should_match <regex>
80
- target.should_not_match <regex>
81
- </ruby>
82
-
83
- The <code>target</code> is matched against <code>regex</code>. An <code>ExpectationNotMetError</code> is raised if the match fails.
84
-
85
- h3. Class/Type
86
-
87
- h4. Direct Instance
88
-
89
- <ruby>
90
- target.should_be_an_instance_of <class>
91
- target.should_not_be_an_instance_of <class>
92
- </ruby>
93
-
94
- An <code>ExpectationNotMetError</code> is raised if <code>target</code> is not or is, respectively, an direct instance of <code>class</code>. As expected this correlates to <code>target.instance_of? class</code>.
95
-
96
- h4. Ancestor Class
97
-
98
- <ruby>
99
- target.should_be_a_kind_of <class>
100
- target.should_not_be_a_kind_of <class>
101
- </ruby>
102
-
103
- As above, but uses <code>target.kind_of? class</code>: checking whether <code>class</code> is the direct class of <code>target</code>, or an ancestor of <code>target</code>'s direct class.
104
-
105
- h4. Type
106
-
107
- <ruby>
108
- target.should_respond_to <symbol>
109
- target.should_not_respond_to <symbol>
110
- </ruby>
111
-
112
- Uses <code>target.respond_to?(symbol)</code> to check whether <code>symbol</code> is the name of a message that <code>target</code> understands.
113
-
114
- h3. Procs
115
-
116
- h4. Raising
117
-
118
- <ruby>
119
- proc.should_raise <exception>
120
- proc.should_not_raise <exception>
121
- </ruby>
122
-
123
- Checks that <code>proc</code> causes the named exception to be raised or not. The latter is actually one of two cases: some other exception is raised, or no exception is raised. Typically the <code>proc</code> is created in place using <code>lambda</code>. For example:
124
-
125
- <ruby>
126
- lambda { 3 / 0 }.should_raise ZeroDivisionError
127
- </ruby>
128
-
129
- There is a more general form as well.
130
-
131
- <ruby>
132
- proc.should_raise
133
- proc.should_not_raise
134
- </ruby>
135
-
136
- These forms don't worry about what exception is raised (or not). All they are concerned with is that some except was raised, or that no exception was.
137
-
138
- h4. Throwing
139
-
140
- <ruby>
141
- proc.should_throw <symbol>
142
- proc.should_not_throw <symbol>
143
- </ruby>
144
-
145
- Similar to the above, but checks that <code>symbol</code> is thrown from within <code>proc</code>, or not. The latter is actually one of two cases: some other symbol is thrown, or no symbol is thrown.
146
-
147
- <ruby>
148
- proc.should_not_throw
149
- </ruby>
150
-
151
- This form is more specific. It checks that no symbol is thrown from within <code>proc</code>.
152
-
153
- h3. Collections
154
-
155
- h4. Containment
156
-
157
- <ruby>
158
- target.should_include <object>
159
- target.should_not_include <object>
160
- </ruby>
161
-
162
- This is simply a specific case of the arbitrary predicate form. It uses <code>target.include?(object)</code> and raises an <code>ExpectationNotMetError</code> if that returns false.
163
-
164
- The remaining collection forms are a little more involved. They rely on two things: 1) <code>target</code> responds to the message <code>things</code> by returning an object that 2) responds to either <code>length</code> or <code>size</code>, which return a number that is a measure of size. Currently <code>length</code> is used if is appropriate, otherwise <code>size</code> is attempted.
165
-
166
- h4. Exact Size
167
-
168
- <ruby>
169
- target.should_have(<number>).things
170
- </ruby>
171
-
172
- The <code>things</code> of <code>target</code> has a length/size of exactly <code>number</code>.
173
-
174
- h4. Lower Bound
175
-
176
- <ruby>
177
- target.should_have_at_least(<number>).things
178
- </ruby>
179
-
180
- The <code>things</code> of <code>target</code> has a length/size of no less than <code>number</code>.
181
-
182
- h4. Upper Bound
183
-
184
- <ruby>
185
- target.should_have_at_most(<number>).things
186
- </ruby>
187
-
188
- The <code>things</code> of <code>target</code> has a length/size of no more than <code>number</code>.
@@ -1,22 +0,0 @@
1
- index.page:
2
- inMenu: 11
3
-
4
- underscores.page:
5
- orderInfo: 13
6
-
7
- mocks.page:
8
- orderInfo: 14
9
-
10
- rdoc.html:
11
- title: RDoc
12
- dest: ../rdoc/index.html
13
- inMenu: true
14
- orderInfo: 15
15
-
16
- rcov.html:
17
- title: RCov
18
- dest: ../coverage/index.html
19
- inMenu: true
20
- orderInfo: 16
21
-
22
-
@@ -1,287 +0,0 @@
1
- ---
2
- title: Mock API
3
- inMenu: true
4
- ---
5
- h2. Mock API
6
-
7
- RSpec contains a tightly integrated, powerful Mock Object framework.
8
-
9
- h3. Creating a mock
10
-
11
- <ruby>
12
- my_mock = mock(<name>)
13
- </ruby>
14
-
15
- This creates a new mock with the given <code>name</code> (a string) and registers it.
16
- When the specification finishes, all registered mocks are verified.
17
-
18
- <ruby>
19
- my_mock = mock(<name>, <options>)
20
- </ruby>
21
-
22
- As above, but allows you to specific options to tweak the mock's behaviour. The
23
- <code>options</code> argument is a hash. Currently the only supported option is
24
- <code>:null_object</code>. Setting this to true instructs the mock to ignore
25
- (quietly consume) any messages it hasn't been told to expect - and return itself. I.e.:
26
-
27
- <ruby>
28
- my_mock = mock("blah", :null_object => true)
29
- </ruby>
30
-
31
- h3. Expecting Messages
32
-
33
- <ruby>
34
- my_mock.should_receive(<message>)
35
- </ruby>
36
-
37
- The <code>message</code> argument is a symbol that is the name of a message
38
- that you want the mock to expect.
39
-
40
- h3. Expecting Arguments
41
-
42
- <ruby>
43
- my_mock.should_receive(:msg).with(<args>)
44
- </ruby>
45
-
46
- for example:
47
-
48
- <ruby>
49
- my_mock.should_receive(:msg).with(1, 2, 3)
50
- </ruby>
51
-
52
- The <code>args</code> argument is a series of arguments (e.g. 1, 2, 3) that are
53
- expected to be passed as arguments to the associated message.
54
-
55
- <ruby>
56
- my_mock.should_receive(:msg).with(:no_args)
57
- </ruby>
58
-
59
- The message (<code>msg</code>) is expected to be passed no arguments.
60
-
61
- <ruby>
62
- my_mock.should_receive(:msg).with(:any_args)
63
- </ruby>
64
-
65
- Any arguments (and any number of arguments) are to be accepted. This includes
66
- cases where no arguments are provided. *This is the default when no <code>with()</code>
67
- clause is specified.* Even so, sometimes you want to be explicit about it.
68
-
69
- h3. Argument Constraints
70
-
71
- Constraints can be placed on individual arguments which are looser than value
72
- equivalence (as above).
73
-
74
- h4. :anything
75
-
76
- accepts any value for this argument, e.g.:
77
-
78
- <ruby>
79
- my_mock.should_receive(:msg).with(1, :anything, "A")
80
- </ruby>
81
-
82
- h4. :numeric
83
-
84
- accepts any numeric value for this argument, e.g.:
85
-
86
- <ruby>
87
- my_mock.should_receive(:msg).with(a, :numeric, "b")
88
- </ruby>
89
-
90
- h4. :boolean
91
-
92
- accepts a boolean value for this argument, e.g.:
93
-
94
- <ruby>
95
- my_mock.should_receive(:msg).with(a, :boolean, "b")
96
- </ruby>
97
-
98
- h4. :string
99
-
100
- accepts any string for this argument, e.g.:
101
-
102
- <ruby>
103
- my_mock.should_receive(:msg).with(a, :string, "b")
104
- </ruby>
105
-
106
- h4. duck_type(message(s))
107
-
108
- accepts any object that responds to the prescribed message(s), e.g.:
109
-
110
- <ruby>
111
- #accepts a Fixnum for the second arg
112
- my_mock.should_receive(:msg).with(a, duck_type(:abs, :div), "b")
113
- </ruby>
114
-
115
- h3. Receive Counts
116
-
117
- <ruby>
118
- my_mock.should_receive(:msg).never
119
- </ruby>
120
-
121
- An exception is raised if the message is ever received.
122
- This is equivalent to not specifying the reception of :msg,
123
- but it's more declarative and useful for humans.
124
-
125
- <ruby>
126
- my_mock.should_receive(:msg).any_number_of_times
127
- </ruby>
128
-
129
- The message can be received 0 or more times.
130
-
131
- <ruby>
132
- my_mock.should_receive(:msg).once
133
- </ruby>
134
-
135
- An exception is raised if the message is never received, or it is received more than once.
136
-
137
- <ruby>
138
- my_mock.should_receive(:msg).twice
139
- </ruby>
140
-
141
- An exception is raised if the message is received anything but two times.
142
-
143
- <ruby>
144
- my_mock.should_receive(:msg).exactly(n).times
145
- </ruby>
146
-
147
- An exception is raised if the message is received anything but <code>n</code> times.
148
-
149
- <ruby>
150
- my_mock.should_receive(:msg).at_least(:once)
151
- </ruby>
152
-
153
- An exception is raised if the message is never received.
154
-
155
- <ruby>
156
- my_mock.should_receive(:msg).at_least(:twice)
157
- </ruby>
158
-
159
- An exception is raised if the message is never received or is received only once.
160
-
161
- <ruby>
162
- my_mock.should_receive(:msg).at_least(n).times
163
- </ruby>
164
-
165
- An exception is raised if the message is received fewer than <code>n</code> times.
166
-
167
- h3. Return Values
168
-
169
- h4. Single return value
170
-
171
- <ruby>
172
- my_mock.should_receive(:msg).once_and_return(<value>)
173
- </ruby>
174
-
175
- Each time the expected message is received, <code>value</code> will be returned as the result.
176
-
177
- h4. Consequtive return values
178
-
179
- <ruby>
180
- and_return([<value-1>, <value-2>, ..., <value-n>])
181
- </ruby>
182
-
183
- When the expected message is received, <code>value-i</code> will be returned as the result
184
- for the ith reception of the message. After the message has been received <code>i</code> times,
185
- <code>value-n</code> is returned for all
186
- subsequent receives.
187
-
188
- *Note:* if you wish to have a single return value that is an array, you must use this form, with
189
- one item that is the array to return. Otherwise your array will be interpreted as a series of return values.
190
- For example:
191
-
192
- <ruby>
193
- and_return([[1, 2, 3]])
194
- </ruby>
195
-
196
- h4. Computed return value
197
-
198
- <ruby>
199
- my_mock.should_receive(:msg).once_and_return {...}
200
- </ruby>
201
-
202
- When the expected message is received, the result of evaluating the supplied
203
- block will be returned as the result. The block is passed any arguments passed
204
- as arguments of the message. This capability can be used to compute return
205
- values based on the arguments. For example:
206
-
207
- <ruby>
208
- my_mock.should_receive(:msg).with(:numeric, :numeric) once_and_return {|a, b| a + b}
209
- </ruby>
210
-
211
- h3. Raising and Throwing
212
-
213
- <ruby>
214
- my_mock.should_receive(:msg).once_and_raise(<exception>)
215
- my_mock.should_receive(:msg).once_and_throw(<symbol>)
216
- </ruby>
217
-
218
- These instruct the mock to raise an exception or throw a symbol, respectively,
219
- instead of returning a value.
220
-
221
- h3. Yielding
222
-
223
- <ruby>
224
- my_mock.should_receive(:msg).once_and_yield([<value-1>, <value-2>, ..., <value-n>])
225
- </ruby>
226
-
227
- When the expected message is received, the mock will yield the values to the passed block.
228
-
229
- h3. Ordering
230
-
231
- There are times when you want to specify the order of messages sent to a mock.
232
- It shouldn't be the case very often, but it can be handy at times.
233
-
234
- Labeling expectations as being ordered is done by the <code>ordered</code> call:
235
-
236
- <ruby>
237
- my_mock.should_receive(:flip).once.ordered
238
- my_mock.should_receive(:flop).once.ordered
239
- </ruby>
240
-
241
- If the send of <code>flop</code> is seen before <code>flip</code> the specification will fail.
242
-
243
- Of course, chains of ordered expectations can be set up:
244
-
245
- <ruby>
246
- my_mock.should_receive(:one).ordered
247
- my_mock.should_receive(:two).ordered
248
- my_mock.should_receive(:three).ordered
249
- </ruby>
250
-
251
- The expected order is the order in which the expectations are declared.
252
-
253
- Order-independent expectations can be set anywhere in the expectation sequence, in any order.
254
- Only the order of expectations tagged with the <code>ordered</code> call is significant.
255
- Likewise, calls to order-independent methods can be made in any order, even interspersed with
256
- calls to order-dependent methods. For example:
257
-
258
- <ruby>
259
- my_mock.should_receive(:zero)
260
- my_mock.should_receive(:one).ordered
261
- my_mock.should_receive(:two).ordered
262
- my_mock.should_receive(:one_and_a_half)
263
-
264
- # This will pass:
265
- my_mock.one
266
- my_mock.one_and_a_half
267
- my_mock.zero
268
- my_mock.two
269
- </ruby>
270
-
271
- h3. Arbitrary Handling of Received Messages
272
-
273
- You can supply a block to a message expectation. When the message is received
274
- by the mock, the block is passed any arguments and evaluated. The result is
275
- the return value of the block. For example:
276
-
277
- <ruby>
278
- my_mock.should_receive(:msg) { |a, b|
279
- a.should_be true
280
- b.should_not_contain('mice')
281
- "Chunky bacon!"
282
- }
283
- </ruby>
284
-
285
- This allows arbitrary argument validation and result computation. It's handy and kind of cool to be able to
286
- do this, but it is advised to not use this form in most situations. Mocks should not be functional.
287
- They should be completely declarative. That said, it's sometimes useful to give them some minimal behaviour.