Sha256: de020680726712745cfec94c6e06c00bcd3d9b378083b5f6be5bf641c45614c4

Contents?: true

Size: 1.78 KB

Versions: 1

Compression:

Stored size: 1.78 KB

Contents

module EventMachine
  module Ventually
    class Eventually

      autoload :MiniTest, 'em-ventually/eventually/minitest'
      autoload :RSpec,    'em-ventually/eventually/rspec'
      autoload :TestUnit, 'em-ventually/eventually/testunit'

      attr_reader :expectation

      def initialize(pool, runner, caller, expectation, opts, block)
        @pool, @runner, @caller, @expectation, @opts, @block = pool, runner, caller, expectation, opts, block
        @count = 0
        @pool.push self
        @total_time = opts && opts[:total] || 1
        @every_time = opts && opts[:every] || 0.1
        run
      end

      def assert_equal(got)
        got == expectation
      end

      def formatted_message(msg)
        "#{msg} (#{@caller.filename}:#{@caller.line})"
      end

      def kill_timer
        @kill_timer ||= EM.add_timer(@total_time) { stop(formatted_message("Exceeded time, expected #{expectation.inspect}, last value was #{@last_val.inspect}")) }
      end

      def run
        if @pool.should_run?(self)
          kill_timer
          if @block.arity != 1
            process_equality(@last_val = @block.call)
          else
            @block[proc { |val|
              @last_val = val
              process_equality(val)
            }]
          end
        else
          EM.add_timer(@every_time) { run }
        end
      end

      def process_equality(val)
        if assert_equal(val)
          stop
        else
          @count += 1
          EM.add_timer(@every_time) { run }
        end
      end

      def stop(msg = nil)
        EM.cancel_timer @kill_timer
        @pool.complete(self)
        report(msg) if msg
        if @pool.empty? && EM.reactor_running?
          EM.stop
        end
      end

      def report(msg)
        STDERR << "Msg: #{msg}\n"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
em-ventually-0.0.1 lib/em-ventually/eventually.rb