require 'bacon' # Bacon.summary_at_exit $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) require 'lib/ver' module VER class Spec def initialize(&block) @contexts = [] instance_eval(&block) end def run if context = @contexts.shift Tk::After.idle do context.run run end else Tk::After.idle{ bacon_summary } end end def describe(*args, &block) @contexts << Bacon::Context.new(args.join(' '), &block) end def bacon_summary Bacon.handle_summary if $! Kernel.raise $! elsif Bacon::Counter[:errors] + Bacon::Counter[:failed] > 0 Kernel.exit 1 else Kernel.exit 0 end ensure $stdout.flush Tk.exit end end # Schedule all describe blocks in a 'after idle' block that is scheduled by tcl. # The last 'after idle' will output the bacon summary and call [Tk.exit]. # Not sure how well this handles nested describe blocks, but it might just work? # # @example usgage # VER.spec do # describe 'number of open buffers' do # it 'should open one buffer by default' do # VER.buffers.size.should == 1 # end # end # end def self.spec(&block) specs = Spec.new(&block) VER.run fork: false do specs.run end end end