Sha256: e8dc83eebdc5027a6160203126cff17335d6f25218f3d63263e0e375a8e4a3dd

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

require_relative '../../spec_helper'
require 'message_bus/timer_thread'

describe MessageBus::TimerThread do
  before do
    @timer = MessageBus::TimerThread.new
  end

  after do
    @timer.stop
  end

  it "allows you to queue every jobs" do
    i = 0
    m = Mutex.new
    every = @timer.every(0.001) { m.synchronize { i += 1 if i < 3 } }
    # allow lots of time, cause in test mode stuff can be slow
    wait_for(1000) do
      m.synchronize do
        every.cancel if i == 3
        i == 3
      end
    end
    sleep 0.002
    i.must_equal 3
  end

  it "allows you to cancel timers" do
    success = true
    @timer.queue(0.005) { success = false }.cancel
    sleep(0.006)
    success.must_equal true
  end

  it "queues jobs in the correct order" do

    results = []
    (0..3).to_a.reverse.each do |i|
      @timer.queue(0.005 * i) do
        results << i
      end
    end

    wait_for(3000) {
      4 == results.length
    }

    results.must_equal [0, 1, 2, 3]
  end

  it "should call the error callback if something goes wrong" do
    error = nil

    @timer.queue do
      boom
    end

    @timer.on_error do |e|
      error = e
    end

    @timer.queue do
      boom
    end

    wait_for(10) do
      error
    end

    error.class.must_equal NameError
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
message_bus-2.1.6 spec/lib/message_bus/timer_thread_spec.rb