Sha256: 9e80a93981a0a30947b00b18332e02d2fdd9b8c4b77ddd34550d7889fb56e75f

Contents?: true

Size: 1.34 KB

Versions: 2

Compression:

Stored size: 1.34 KB

Contents

require_relative '../test_helper'

class ReaderComponent
  include Denko::Behaviors::Component
  include Denko::Behaviors::Reader
  def _read; end
end

class ReaderTest < Minitest::Test
  def board
    @board ||= BoardMock.new
  end

  def part
    @part ||= ReaderComponent.new(board: board, pin: 1)
  end

  def inject(data, wait_for_callbacks = true)
    Thread.new do
      if wait_for_callbacks
        while (!part.callbacks[:read]) do; sleep 0.01; end
      end
      loop do
        sleep 0.01
        part.update(data)
        break unless part.callbacks[:read]
      end
    end

    # Give the thread some to get into its loop.
    sleep 0.05
  end

  def test_include_callbacks
    assert_includes ReaderComponent.ancestors,
                    Denko::Behaviors::Callbacks
  end

  def test_read_once
    mock = MiniTest::Mock.new.expect :call, nil
    inject(1)
    
    part.stub(:_read, mock) do
      part.read
    end
    mock.verify
  end

  def test_return_value
    inject(42)
    assert_equal part.read, 42
  end
  
  def test_read_using
    inject(1)
    reader = MiniTest::Mock.new.expect :call, nil
    part.read_using -> { reader.call }
    reader.verify
  end

  def test_add_run_remove_callback
    cb = MiniTest::Mock.new.expect :call, nil
    inject(1)
    part.read { cb.call }
    assert_nil part.callbacks[:read]
    cb.verify
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
denko-0.13.1 test/behaviors/reader_test.rb
denko-0.13.0 test/behaviors/reader_test.rb