require 'test-unit'
require 'uri'
require 'http/cookie'

module Test
  module Unit
    module Assertions
      def assert_warn(pattern, message = nil, &block)
        class << (output = +"")
          alias write <<
        end
        stderr, $stderr = $stderr, output
        yield
        assert_match(pattern, output, message)
      ensure
        $stderr = stderr
      end

      def assert_warning(pattern, message = nil, &block)
        verbose, $VERBOSE = $VERBOSE, true
        assert_warn(pattern, message, &block)
      ensure
        $VERBOSE = verbose
      end
    end
  end
end

module Enumerable
  def combine
    masks = inject([[], 1]){|(ar, m), e| [ar << m, m << 1 ] }[0]
    all = masks.inject(0){ |al, m| al|m }

    result = []
    for i in 1..all do
      tmp = []
      each_with_index do |e, idx|
        tmp << e unless (masks[idx] & i) == 0
      end
      result << tmp
    end
    result
  end
end

def test_file(filename)
  File.expand_path(filename, File.dirname(__FILE__))
end

def sleep_until(time)
  if (s = time - Time.now) > 0
    sleep s + 0.01
  end
end
