File: test_onoff_adapter.rb

Project: Ruby Mark IV Coffee Maker

#!/usr/bin/env ruby

require 'test/unit'
require 'markiv/adapter'
require 'flexmock'

class TestAdapter < Test::Unit::TestCase
  def test_messages
    @valve = MockOpenCloseDevice.new
    @adapter = Adapter.new(@valve, :on => :close, :off => :open)
    @adapter.on
    assert @valve.closed?
    @adapter.off
    assert @valve.open?
  end

  def test_inverse
    @valve = MockOpenCloseDevice.new
    @adapter = Adapter.new(@valve, :on => :open, :off => :close)
    @adapter.on
    assert @valve.open?
    @adapter.off
    assert @valve.closed?
  end

  def test_strings
    @valve = MockOpenCloseDevice.new
    @adapter = Adapter.new(@valve,
      :on => "close", :off => "open")
    @adapter.on
    assert @valve.closed?
    @adapter.off
    assert @valve.open?
  end

  def test_blocks
    @valve = MockOpenCloseDevice.new
    @adapter = Adapter.new(
      @valve,
      :on => lambda { |d| d.close },
      :off => lambda { |d| d.open }
      )
    @adapter.on
    assert @valve.closed?
    @adapter.off
    assert @valve.open?  
  end

  def test_mixed
    @valve = MockOpenCloseDevice.new
    @adapter = Adapter.new(
      @valve,
      :off => lambda { |d| d.open },
      :on => "close"
      )
    @adapter.on
    assert @valve.closed?
    @adapter.off
    assert @valve.open?  
  end
  
  def test_exception
    @valve = MockOpenCloseDevice.new
    assert_raise(RuntimeError) {
      @adapter = Adapter.new(
	@valve,
	:on => 1,
	:off => lambda { |d| d.open }
	)
    }
  end

  def test_unmapped_method_passes_through
    FlexMock.use do |m|
      called = false
      m.mock_handle(:hi) { called = true }
      adapter = Adapter.new(m)
      adapter.hi
      assert called, "called"
    end
  end
  
  def test_arguments
    FlexMock.use do |m|
      m.mock_handle(:message) do |hello, world|
	assert_equal "hello", hello
	assert_equal "world", world
      end
      adapter = Adapter.new(m, :puts => :message)
      adapter.puts("hello", "world")
    end
  end

end


[ Index ][ Presentation ]
Generated by [ source2html ]