shared_should 0.6.5 → 0.6.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/VERSION +1 -1
- data/lib/shared_should.rb +48 -26
- data/shared_should.gemspec +2 -2
- data/test/test_shared_should.rb +66 -2
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.6
|
data/lib/shared_should.rb
CHANGED
@@ -17,7 +17,6 @@ end
|
|
17
17
|
|
18
18
|
class Test::Unit::TestCase
|
19
19
|
attr_accessor :shared_value
|
20
|
-
attr_accessor :shared_name
|
21
20
|
@@shared_proxies_executed = {}
|
22
21
|
@@setup_blocks = {}
|
23
22
|
|
@@ -30,7 +29,7 @@ class Test::Unit::TestCase
|
|
30
29
|
# assuming 'suite' is called before executing any tests - may be a poor assumption. Find something better?
|
31
30
|
unless @@shared_proxies_executed[self]
|
32
31
|
shared_proxies.each do |shared_proxy|
|
33
|
-
shared_proxy.execute
|
32
|
+
shared_proxy.execute
|
34
33
|
end
|
35
34
|
@@shared_proxies_executed[self] = true
|
36
35
|
end
|
@@ -56,9 +55,8 @@ class Test::Unit::TestCase
|
|
56
55
|
@@setup_blocks[self] << setup_block
|
57
56
|
end
|
58
57
|
|
59
|
-
def
|
58
|
+
def setup_shared_value(initialization_block)
|
60
59
|
self.shared_value = initialization_block.nil? ? nil : initialization_block.bind(self).call
|
61
|
-
self.shared_name = name
|
62
60
|
end
|
63
61
|
|
64
62
|
def call_block_with_shared_value(test_block)
|
@@ -110,24 +108,22 @@ module Shoulda::SharedContext
|
|
110
108
|
end
|
111
109
|
|
112
110
|
def use_should(shared_name)
|
113
|
-
shared_proxy = Shoulda::SharedProxy.new(shared_name)
|
111
|
+
shared_proxy = Shoulda::SharedProxy.new(self, shared_name)
|
114
112
|
shared_proxies << shared_proxy
|
115
113
|
return shared_proxy
|
116
114
|
end
|
117
115
|
|
118
116
|
def use_context(shared_name)
|
119
|
-
shared_proxy = Shoulda::SharedProxy.new(shared_name)
|
117
|
+
shared_proxy = Shoulda::SharedProxy.new(self, shared_name)
|
120
118
|
shared_proxies << shared_proxy
|
121
119
|
return shared_proxy
|
122
120
|
end
|
123
121
|
|
124
122
|
def use_setup(shared_name)
|
125
|
-
shared_proxy = Shoulda::SharedProxy.new(shared_name)
|
123
|
+
shared_proxy = Shoulda::SharedProxy.new(self, shared_name)
|
126
124
|
shared_setup_block = find_shared_setup_block(shared_name)
|
127
125
|
setup do
|
128
|
-
|
129
|
-
setup_shared_values(shared_proxy.description, shared_proxy.initialization_block)
|
130
|
-
end
|
126
|
+
shared_proxy.execute_and_set_shared_value(self)
|
131
127
|
call_block_with_shared_value(shared_setup_block)
|
132
128
|
end
|
133
129
|
return shared_proxy
|
@@ -139,7 +135,7 @@ module Shoulda::SharedContext
|
|
139
135
|
block.bind(self).call
|
140
136
|
|
141
137
|
shared_proxies.each do |shared_proxy|
|
142
|
-
shared_proxy.execute
|
138
|
+
shared_proxy.execute
|
143
139
|
end
|
144
140
|
end
|
145
141
|
shared_proxies_executing_block.bind(eval("self", block.binding))
|
@@ -238,7 +234,7 @@ module Shoulda::SharedContext
|
|
238
234
|
|
239
235
|
caller_context.context name do
|
240
236
|
setup do
|
241
|
-
|
237
|
+
setup_shared_value(initialization_block)
|
242
238
|
end
|
243
239
|
|
244
240
|
merge_block(&shared_context_block)
|
@@ -260,13 +256,13 @@ module Shoulda::SharedContext
|
|
260
256
|
caller_context.send(:alias_method, without_method, :setup)
|
261
257
|
caller_context.send(:define_method, with_method) do
|
262
258
|
send(without_method)
|
263
|
-
|
259
|
+
setup_shared_value(setup_block)
|
264
260
|
shared_setup_block.bind(self).call
|
265
261
|
end
|
266
262
|
caller_context.send(:alias_method, :setup, with_method)
|
267
263
|
else
|
268
264
|
caller_context.setup do
|
269
|
-
|
265
|
+
setup_shared_value(setup_block)
|
270
266
|
shared_setup_block.bind(self).call
|
271
267
|
end
|
272
268
|
end
|
@@ -316,45 +312,71 @@ end
|
|
316
312
|
|
317
313
|
|
318
314
|
class Shoulda::SharedProxy
|
319
|
-
attr_accessor :shared_name, :description, :
|
315
|
+
attr_accessor :shared_name, :description, :block_configs, :context
|
320
316
|
|
321
|
-
def initialize(shared_name)
|
317
|
+
def initialize(context, shared_name)
|
318
|
+
self.context = context
|
322
319
|
self.shared_name = shared_name
|
323
|
-
self.
|
320
|
+
self.block_configs = []
|
324
321
|
end
|
325
322
|
|
326
323
|
def with(description = nil, &initialization_block)
|
327
|
-
|
324
|
+
add_proxy_block(:with, "with", description, &initialization_block)
|
328
325
|
end
|
329
326
|
|
330
327
|
def when(description = nil, &initialization_block)
|
331
|
-
|
328
|
+
add_proxy_block(:with, "when", description, &initialization_block)
|
332
329
|
end
|
333
330
|
|
334
331
|
def given(description = nil, &initialization_block)
|
335
|
-
|
332
|
+
# given needs to execute before its with_setup
|
333
|
+
add_proxy_block(:given, "given", description, :disable_and => true, :insert_block_before_end => @current_action == :with_setup, &initialization_block)
|
334
|
+
end
|
335
|
+
|
336
|
+
def with_setup(description)
|
337
|
+
initialization_block = context.send(:find_shared_setup_block, description)
|
338
|
+
add_proxy_block(:with_setup, "with setup", description, :disable_and => true, &initialization_block)
|
336
339
|
end
|
337
340
|
|
338
|
-
def execute
|
341
|
+
def execute
|
339
342
|
method_name = context.send(:shared_method_name, :should, shared_name)
|
340
343
|
context.send(method_name, description, &initialization_block)
|
341
344
|
end
|
342
345
|
|
346
|
+
def execute_and_set_shared_value(test_context)
|
347
|
+
initialization_block.bind(test_context).call
|
348
|
+
end
|
349
|
+
|
343
350
|
def initialization_block
|
344
|
-
|
351
|
+
the_block_configs = block_configs
|
345
352
|
return Proc.new do
|
346
|
-
|
353
|
+
the_block_configs.collect do |block_config|
|
354
|
+
block = block_config[:block]
|
355
|
+
if block_config[:action] == :given
|
356
|
+
setup_shared_value(block)
|
357
|
+
else
|
358
|
+
call_block_with_shared_value(block) if block
|
359
|
+
end
|
360
|
+
end.last
|
361
|
+
# # TODO: needs shared_value
|
362
|
+
# blocks.collect {|block| block.bind(self).call if block}.last
|
347
363
|
end
|
348
364
|
end
|
349
365
|
|
350
|
-
|
366
|
+
private
|
351
367
|
|
352
|
-
def
|
368
|
+
def add_proxy_block(action, conditional, description, options = {}, &block)
|
369
|
+
@current_action = action
|
353
370
|
if description
|
354
371
|
and_text = options[:disable_and] ? ' ' : ' and '
|
355
372
|
self.description = "#{self.description}#{self.description.nil? ? nil : and_text}#{conditional} #{description}"
|
356
373
|
end
|
357
|
-
|
374
|
+
block_config = {:block => block, :action => action}
|
375
|
+
if options[:insert_block_before_end]
|
376
|
+
self.block_configs.insert(-2, block_config)
|
377
|
+
else
|
378
|
+
self.block_configs << block_config
|
379
|
+
end
|
358
380
|
return self
|
359
381
|
end
|
360
382
|
end
|
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.6.
|
8
|
+
s.version = "0.6.6"
|
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-03-
|
12
|
+
s.date = %q{2011-03-19}
|
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
@@ -403,7 +403,69 @@ class TestSharedShould < Test::Unit::TestCase
|
|
403
403
|
use_context "for a valid context test"
|
404
404
|
end
|
405
405
|
|
406
|
-
|
406
|
+
context "chaining" do
|
407
|
+
context "with ordering verification" do
|
408
|
+
setup do
|
409
|
+
@count = 0
|
410
|
+
end
|
411
|
+
|
412
|
+
share_setup "shared setup 1" do
|
413
|
+
assert_equal 1, @count
|
414
|
+
@count += 1
|
415
|
+
end
|
416
|
+
|
417
|
+
share_setup "shared setup 2" do
|
418
|
+
assert_equal 3, @count
|
419
|
+
@count += 1
|
420
|
+
end
|
421
|
+
|
422
|
+
share_should "be valid shared should" do
|
423
|
+
assert_equal 7, @count
|
424
|
+
end
|
425
|
+
|
426
|
+
use_should("be valid shared should").
|
427
|
+
with_setup("shared setup 1").given("setup value") { assert_equal 0, @count; @count += 1 }.
|
428
|
+
with_setup("shared setup 2").given("setup value") { assert_equal 2, @count; @count += 1 }.
|
429
|
+
with("initialization value") { assert_equal 4, @count; @count += 1 }.
|
430
|
+
with("initialization value") { assert_equal 5, @count; @count += 1 }.
|
431
|
+
given { assert_equal 6, @count; @count += 1 }
|
432
|
+
end
|
433
|
+
|
434
|
+
context "with parameters" do
|
435
|
+
share_setup "shared setup 1" do |value|
|
436
|
+
assert_equal :one, value
|
437
|
+
end
|
438
|
+
|
439
|
+
share_setup "shared setup 2" do |value|
|
440
|
+
assert_equal :two, value
|
441
|
+
end
|
442
|
+
|
443
|
+
share_should "be valid shared should with parameter" do |value|
|
444
|
+
assert_equal :three, @value
|
445
|
+
assert_equal :four, value
|
446
|
+
end
|
447
|
+
|
448
|
+
use_should("be valid shared should with parameter").
|
449
|
+
with_setup("shared setup 1").given { :one }.
|
450
|
+
with_setup("shared setup 2").given { :two }.
|
451
|
+
with("initialization value") { @value = :three }.
|
452
|
+
given { :four }
|
453
|
+
|
454
|
+
# TODO: this assertion enforces that only a trailing 'given' block is used for parameter argument
|
455
|
+
# For legacy reasons, return value from with/when currently can also be used for parameter arguement
|
456
|
+
#
|
457
|
+
# share_should "be valid shared should without parameter" do
|
458
|
+
# assert_equal :three, @value
|
459
|
+
# assert_nil shared_value
|
460
|
+
# end
|
461
|
+
#
|
462
|
+
# use_should("be valid shared should without parameter").
|
463
|
+
# with_setup("shared setup 1").given { :one }.
|
464
|
+
# with_setup("shared setup 2").given { :two }.
|
465
|
+
# with("initialization value") { @value = :three }
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
407
469
|
# ensure should macros work
|
408
470
|
def self.should_be_a_valid_macro
|
409
471
|
should "be a valid macro" do
|
@@ -476,7 +538,9 @@ class TestSharedShould < Test::Unit::TestCase
|
|
476
538
|
"test: .share_context with params given true for a valid specified value should have specified value. ",
|
477
539
|
"test: .share_context with params with chaining when using initialization chain given true for a chained value should chain initialization block and be with params. ",
|
478
540
|
"test: .share_should with params with chaining when using initialization chain given true should be a valid specified value. ",
|
479
|
-
"test: .share_should with params given true should be a valid specified value. "
|
541
|
+
"test: .share_should with params given true should be a valid specified value. ",
|
542
|
+
"test: chaining with parameters with setup shared setup 1 with setup shared setup 2 and with initialization value should be valid shared should with parameter. ",
|
543
|
+
"test: chaining with ordering verification with setup shared setup 1 given setup value with setup shared setup 2 given setup value and with initialization value and with initialization value should be valid shared should. "
|
480
544
|
].inject({}) do |hash, expected_method_name|
|
481
545
|
hash[expected_method_name] = true
|
482
546
|
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: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 6
|
10
|
+
version: 0.6.6
|
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-03-
|
18
|
+
date: 2011-03-19 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|