shared_should 0.8.0 → 0.8.1
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/README.md +4 -4
- data/VERSION +1 -1
- data/lib/shared_should.rb +26 -9
- data/shared_should.gemspec +2 -2
- data/test/test_shared_should.rb +56 -27
- metadata +4 -4
data/README.md
CHANGED
@@ -103,7 +103,7 @@ Sharing whole contexts? Schmeasy!
|
|
103
103
|
use_context "for a book available for checkout"
|
104
104
|
end
|
105
105
|
|
106
|
-
### ...or DRY it up
|
106
|
+
### ...or DRY it up with chaining
|
107
107
|
setup("with a rentable book") { @book.rentable = true }.use_context("for a book available for checkout")
|
108
108
|
setup("with a purchasable book") { @book.purchasable = true }.use_context("for a book available for checkout")
|
109
109
|
end
|
@@ -123,7 +123,7 @@ Some rules:
|
|
123
123
|
|
124
124
|
Shared Should provides powerful chaining capabilities.
|
125
125
|
|
126
|
-
Chained
|
126
|
+
Chained setups and use\_setups are applied to their parent context.
|
127
127
|
|
128
128
|
context "Book" do
|
129
129
|
share_setup "for an in-stock book" do
|
@@ -137,7 +137,7 @@ Chained <tt>setup</tt>s and <tt>use\_setup</tt>s are applied to their parent con
|
|
137
137
|
end
|
138
138
|
end
|
139
139
|
|
140
|
-
Or chained
|
140
|
+
Or chained setups and use\_setups can be chained to a <tt>should</tt>, <tt>use\_should</tt>, <tt>context</tt>, or <tt>use\_context</tt>. These setups will not be applied to the parent context.
|
141
141
|
|
142
142
|
context "Book" do
|
143
143
|
share_setup "for an in-stock book" do
|
@@ -151,7 +151,7 @@ Or chained <tt>setup</tt>s and <tt>use\_setup</tt>s can be chained to a <tt>shou
|
|
151
151
|
|
152
152
|
### Parameterizing Shares
|
153
153
|
|
154
|
-
Shared functions can also be parameterized using block parameters. This can be done for shared setups, shared shoulds, and the
|
154
|
+
Shared functions can also be parameterized using block parameters. This can be done for shared setups, shared shoulds, and the setups and shoulds contained within a shared context. The value passed to the shared function is the return value of the <tt>given</tt> parameterization block. The below example parameterizes a shared setup.
|
155
155
|
|
156
156
|
context "Book" do
|
157
157
|
share_setup "for an in-stock book" do |rentable|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.1
|
data/lib/shared_should.rb
CHANGED
@@ -14,7 +14,7 @@ class Test::Unit::TestCase
|
|
14
14
|
# assuming 'suite' is called before executing any tests - may be a poor assumption. Find something better?
|
15
15
|
unless @@shared_proxies_executed[self]
|
16
16
|
shared_proxies.each do |shared_proxy|
|
17
|
-
shared_proxy.
|
17
|
+
shared_proxy.share_execute
|
18
18
|
end
|
19
19
|
@@shared_proxies_executed[self] = true
|
20
20
|
end
|
@@ -45,6 +45,7 @@ class Test::Unit::TestCase
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def call_block_with_shared_value(test_block)
|
48
|
+
return nil unless test_block
|
48
49
|
execute_class_shared_setups_if_not_executed
|
49
50
|
if test_block.arity == 1
|
50
51
|
# check arity of 1 before checking if value is an array. If one parameter, never treat the shared_value as variable args
|
@@ -56,8 +57,9 @@ class Test::Unit::TestCase
|
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
59
|
-
def
|
60
|
-
|
60
|
+
def call_block_config(block_config)
|
61
|
+
ret_val = call_block_with_shared_value(block_config[:block])
|
62
|
+
self.shared_value = ret_val if block_config[:action] == :given
|
61
63
|
end
|
62
64
|
end
|
63
65
|
|
@@ -107,7 +109,7 @@ module Shoulda::SharedContext
|
|
107
109
|
def use_setup(shared_name)
|
108
110
|
return add_shared_proxy.use_setup(shared_name)
|
109
111
|
end
|
110
|
-
|
112
|
+
|
111
113
|
def setup(name = nil, &block)
|
112
114
|
return add_shared_proxy.setup(name, &block)
|
113
115
|
end
|
@@ -118,7 +120,7 @@ module Shoulda::SharedContext
|
|
118
120
|
block.bind(self).call
|
119
121
|
|
120
122
|
shared_proxies.each do |shared_proxy|
|
121
|
-
shared_proxy.
|
123
|
+
shared_proxy.share_execute
|
122
124
|
end
|
123
125
|
end
|
124
126
|
shared_proxies_executing_block.bind(eval("self", block.binding))
|
@@ -263,6 +265,21 @@ class Shoulda::SharedProxy
|
|
263
265
|
add_setup_block(:use_setup, share_name, &source_context.find_shared_block(:setup, share_name))
|
264
266
|
end
|
265
267
|
|
268
|
+
# deprecated
|
269
|
+
def with_setup(share_name)
|
270
|
+
return use_setup(share_name)
|
271
|
+
end
|
272
|
+
|
273
|
+
# deprecated
|
274
|
+
def with(share_name = nil, &initialization_block)
|
275
|
+
return setup(share_name ? "with #{share_name}" : nil, &initialization_block)
|
276
|
+
end
|
277
|
+
|
278
|
+
# deprecated
|
279
|
+
def when(share_name = nil, &initialization_block)
|
280
|
+
return setup(share_name ? "when #{share_name}" : nil, &initialization_block)
|
281
|
+
end
|
282
|
+
|
266
283
|
def given(description = nil, &initialization_block)
|
267
284
|
valid_share_types = [:use_setup, :use_should, :use_context]
|
268
285
|
@failed = true and raise ArgumentError, "'given' can only appear after #{valid_share_types.join(', ')}" unless valid_share_types.include?(current_action)
|
@@ -296,7 +313,7 @@ class Shoulda::SharedProxy
|
|
296
313
|
add_test_block(:use_context, share_name, &source_context.find_shared_block(:context, share_name))
|
297
314
|
end
|
298
315
|
|
299
|
-
def
|
316
|
+
def share_execute
|
300
317
|
return if @failed
|
301
318
|
|
302
319
|
shared_proxy = self
|
@@ -305,7 +322,7 @@ class Shoulda::SharedProxy
|
|
305
322
|
source_context.context setup_block_configs_description do
|
306
323
|
setup_without_param_support do
|
307
324
|
shared_proxy.setup_block_configs.each do |config|
|
308
|
-
|
325
|
+
call_block_config(config)
|
309
326
|
end
|
310
327
|
end
|
311
328
|
|
@@ -317,7 +334,7 @@ class Shoulda::SharedProxy
|
|
317
334
|
# call setups directly in this context
|
318
335
|
source_context.setup_without_param_support do
|
319
336
|
shared_proxy.setup_block_configs.each do |config|
|
320
|
-
|
337
|
+
call_block_config(config)
|
321
338
|
end
|
322
339
|
end
|
323
340
|
end
|
@@ -345,7 +362,7 @@ private
|
|
345
362
|
|
346
363
|
def add_setup_block(action, description, &block)
|
347
364
|
if test_type
|
348
|
-
|
365
|
+
#@failed = true and raise ArgumentError, "'#{action}' may not be applied" unless action == :given
|
349
366
|
# add final given description to test description
|
350
367
|
self.test_description = "#{test_description} #{description}" if description
|
351
368
|
description = nil
|
data/shared_should.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{shared_should}
|
8
|
-
s.version = "0.8.
|
8
|
+
s.version = "0.8.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Pearce"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-05-24}
|
13
13
|
s.description = %q{Share and reuse shoulds, contexts, and setup in Shoulda.}
|
14
14
|
s.email = %q{michael.pearce@bookrenter.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/test/test_shared_should.rb
CHANGED
@@ -221,6 +221,30 @@ class TestSharedShould < Test::Unit::TestCase
|
|
221
221
|
end
|
222
222
|
end
|
223
223
|
|
224
|
+
context "deprecated features" do
|
225
|
+
share_should "be true value" do
|
226
|
+
assert @value
|
227
|
+
end
|
228
|
+
|
229
|
+
context "with_setup" do
|
230
|
+
share_setup "for a true value" do
|
231
|
+
@value = true
|
232
|
+
end
|
233
|
+
|
234
|
+
use_should("be true value").use_setup("for a true value")
|
235
|
+
end
|
236
|
+
|
237
|
+
context "with" do
|
238
|
+
use_should("be true value").with { @value = true }
|
239
|
+
use_should("be true value").with("a true value") { @value = true }
|
240
|
+
end
|
241
|
+
|
242
|
+
context "when" do
|
243
|
+
use_should("be true value").when { @value = true }
|
244
|
+
use_should("be true value").when("a true value") { @value = true }
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
224
248
|
context "context directly under test class" do
|
225
249
|
share_setup "for a true value" do
|
226
250
|
@value = true
|
@@ -306,32 +330,32 @@ class TestSharedShould < Test::Unit::TestCase
|
|
306
330
|
end
|
307
331
|
end
|
308
332
|
|
309
|
-
context "with invalid setup chain to should" do
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
end
|
317
|
-
|
318
|
-
context "with invalid chain to should" do
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
end
|
326
|
-
|
327
|
-
context "with invalid chained contexts" do
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
end
|
333
|
+
# context "with invalid setup chain to should" do
|
334
|
+
# begin
|
335
|
+
# setup {}.should("1") { assert false }.setup { assert false }
|
336
|
+
# raise "Should not allow setup chained after should"
|
337
|
+
# rescue ArgumentError
|
338
|
+
# # correct
|
339
|
+
# end
|
340
|
+
# end
|
341
|
+
#
|
342
|
+
# context "with invalid chain to should" do
|
343
|
+
# begin
|
344
|
+
# setup {}.should("1") { assert false }.should("2") { assert false }
|
345
|
+
# raise "Should not allow chained shoulds"
|
346
|
+
# rescue ArgumentError
|
347
|
+
# # correct
|
348
|
+
# end
|
349
|
+
# end
|
350
|
+
#
|
351
|
+
# context "with invalid chained contexts" do
|
352
|
+
# begin
|
353
|
+
# setup {}.context("1") { should("1") { assert false } }.should("2") { assert false }
|
354
|
+
# raise "Should not allow chain to context"
|
355
|
+
# rescue ArgumentError
|
356
|
+
# # correct
|
357
|
+
# end
|
358
|
+
# end
|
335
359
|
|
336
360
|
context "with should" do
|
337
361
|
setup("for true value") { @value = true }.should("be true value") do
|
@@ -456,7 +480,12 @@ class TestSharedShould < Test::Unit::TestCase
|
|
456
480
|
"test: .share_setup without params without initialization block should have a true value from shared setup. ",
|
457
481
|
"test: SharedShould should execute setup instance method. ",
|
458
482
|
"test: with unusual characters in name -- \\ ' \" -- should be valid. ",
|
459
|
-
"test: with unusual characters in name should -- \\ ' \" --. "
|
483
|
+
"test: with unusual characters in name should -- \\ ' \" --. ",
|
484
|
+
"test: deprecated features with_setup should be true value for a true value. ",
|
485
|
+
"test: deprecated features when should be true value. ",
|
486
|
+
"test: deprecated features with should be true value. ",
|
487
|
+
"test: deprecated features with should be true value with a true value. ",
|
488
|
+
"test: deprecated features when should be true value when a true value. "
|
460
489
|
].inject({}) do |hash, expected_method_name|
|
461
490
|
hash[expected_method_name] = true
|
462
491
|
hash
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shared_should
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 61
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 1
|
10
|
+
version: 0.8.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Pearce
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-05-24 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|