wafer/test/drivers/elixir_ale_spi_test.exs
2020-01-12 16:55:54 +13:00

57 lines
1.3 KiB
Elixir

defmodule WaferElixirALE.SPITest do
use ExUnit.Case, async: true
use Mimic
alias Wafer.Driver.ElixirALE.SPI, as: Subject
alias Wafer.Driver.ElixirALE.SPI.Wrapper
alias Wafer.{Release, SPI}
@moduledoc false
describe "acquire/1" do
test "opens the bus" do
Wrapper
|> expect(:start_link, 1, fn bus, spi_opts, opts ->
assert bus == "spidev0.0"
assert spi_opts == []
assert opts == []
{:ok, self()}
end)
assert {:ok, %Subject{}} = Subject.acquire(bus_name: "spidev0.0")
end
test "when the bus name is not specified it returns an error" do
assert {:error, _} = Subject.acquire([])
end
end
describe "Release.release/1" do
test "closes the bus connection" do
conn = conn()
Wrapper
|> expect(:release, 1, fn pid ->
assert pid == conn.pid
:ok
end)
assert :ok = Release.release(conn)
end
end
describe "SPI.transfer/2" do
test "transfers data to and from the bus" do
conn = conn()
Wrapper
|> expect(:transfer, 1, fn pid, data ->
assert pid == conn.pid
assert data == <<0, 0>>
<<1, 1>>
end)
assert {:ok, <<1, 1>>, %Subject{}} = SPI.transfer(conn, <<0, 0>>)
end
end
defp conn, do: %Subject{pid: self(), bus: "spidev0.0"}
end