#674: Shoulda fails because of oddity with block_given? ---------------------------------+------------------------------------------ Reporter: marick@… | Owner: lsansonetti@… 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/>