require 'em_test_helper'

class TestDeferrable < Test::Unit::TestCase
  class Later
    include EM::Deferrable
  end

  def test_timeout_without_args
    assert_nothing_raised do
      EM.run {
        df = Later.new
        df.timeout(0)
        df.errback { EM.stop }
        EM.add_timer(0.01) { flunk "Deferrable was not timed out." }
      }
    end
  end

  def test_timeout_with_args
    args = nil

    EM.run {
      df = Later.new
      df.timeout(0, :timeout, :foo)
      df.errback do |type, name|
        args = [type, name]
        EM.stop
      end

      EM.add_timer(0.01) { flunk "Deferrable was not timed out." }
    }

    assert_equal [:timeout, :foo], args
  end
end