module EventMachine::TestHelper

Public Class Methods

included(cls) click to toggle source
# File lib/em-spec/test.rb, line 9
    def self.included(cls)
      cls.class_eval(<<-HERE_DOC, __FILE__, __LINE__)
        DefaultTimeout = nil unless const_defined?(:DefaultTimeout)

        def self.default_timeout(timeout)

          if self.const_defined? :DefaultTimeout
            self.ancestors.each do |cls|
              begin
                cls.send(:remove_const, :DefaultTimeout)
                cls.send(:const_set, :DefaultTimeout, timeout)
                break
              rescue
              end
            end
          else
            self.send(:const_set, :DefaultTimeout, timeout)
          end
        end

        def current_default_timeout
          DefaultTimeout
        end
      HERE_DOC
    end

Public Instance Methods

done(flunk_reason = nil) click to toggle source
# File lib/em-spec/test.rb, line 61
def done(flunk_reason = nil)
  EM.next_tick {
    @flunk_test = flunk_reason
    finish_em_spec_fiber
  }
end
em(time_to_run = current_default_timeout, &block) click to toggle source
# File lib/em-spec/test.rb, line 40
def em(time_to_run = current_default_timeout, &block)
  @flunk_test = nil
  EM.run do
    timeout(time_to_run) if time_to_run
    em_spec_exception = nil
    @_em_spec_fiber = Fiber.new do
      @_output = begin
        block.call
      rescue Exception => em_spec_exception
        done
      end
      Fiber.yield
    end
    @_em_spec_fiber.resume

    raise em_spec_exception if em_spec_exception
 end
 raise(@flunk_test) if @flunk_test
 @_output
end
timeout(time_to_run) click to toggle source
# File lib/em-spec/test.rb, line 35
def timeout(time_to_run)
  EM.cancel_timer(@_em_timer) if defined? @_em_timer
  @_em_timer = EM.add_timer(time_to_run) { done('timeout exceeded') }
end

Private Instance Methods

finish_em_spec_fiber() click to toggle source
# File lib/em-spec/test.rb, line 70
def finish_em_spec_fiber
  EM.stop_event_loop if EM.reactor_running?
  @_em_spec_fiber.resume if @_em_spec_fiber.alive?
end