#674: Shoulda fails because of oddity with block_given?
---------------------------------+------------------------------------------
Reporter: mar...@… | Owner: lsansone...@…
Type: defect | Status: new
Priority: minor | Milestone:
Component: MacRuby | Keywords:
---------------------------------+------------------------------------------
The attached file shows that shoulda (on 0.5 and a recent version of 0.7)
behaves incorrectly. The important part is this:
{{{
should "test something" do
puts "I should be printed"
end
}}}
The correct output shows that a test has been run:
{{{
1274 $ ruby shoulda-problem.rb
...
I should be printed
}}}
With Macruby, you get this:
{{{
1275 $ macruby shoulda-problem.rb
* DEFERRED: Samples should test something.
}}}
The problem is in this code:
{{{
def should(name, options = {}, &blk)
if Shoulda.current_context
block_given? ? Shoulda.current_context.should(name, options, &blk)
: Shoulda.current_context.should_eventually(name)
else
context_name = self.name.gsub(/Test/, "")
context = Shoulda::Context.new(context_name, self) do
==> block_given? ? should(name, options, &blk) :
should_eventually(name)
end
context.build
end
end
}}}
In Ruby 1.8.6 (and 1.9, I suppose, because Shoulda is said to work on
1.9), the block_given? inside a block given to an initializer is supposed
to evaluate to true. (!!!) In Macruby, it evaluates to False.
This problem is easy to patch (and I'd be inclined to think the Shoulda
people should, given that the code is tricksy). Still, it is a deviation
from reference Ruby behavior.
--
Ticket URL: <http://www.macruby.org/trac/ticket/674>
MacRuby <http://macruby.org/>
_______________________________________________
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel