wafer/test/chip_test.exs

90 lines
2.1 KiB
Elixir
Raw Normal View History

2019-12-31 18:54:46 +13:00
defmodule WaferChipTest do
use ExUnit.Case, async: true
alias Wafer.Chip
alias Wafer.Chip.Wafer.Driver.Circuits.I2C, as: Impl
alias Wafer.Driver.Circuits.I2C, as: Driver
2020-01-01 20:25:50 +13:00
import Mimic
Code.require_file("test/support/test_utils.exs")
@moduledoc false
setup do
Mimic.copy(Impl)
{:ok, []}
end
2019-12-31 18:54:46 +13:00
describe "__deriving__/3" do
test "deriving with default key name" do
mod = test_mod()
assert Chip.impl_for!(struct(mod, conn: :noop))
end
test "deriving with a specified key name" do
mod = test_mod(:marty)
assert Chip.impl_for!(struct(mod, fruit: :noop))
end
2020-01-01 20:25:50 +13:00
test "reading a derived register" do
outer_mod = test_mod()
outer_struct = struct(outer_mod, conn: %Driver{})
Impl
|> expect(:read_register, 1, fn conn, reg_addr, bytes ->
assert conn == %Driver{}
assert reg_addr == 2
assert bytes == 1
{:ok, <<0>>}
end)
Chip.read_register(outer_struct, 2, 1)
end
test "writing a derived register" do
outer_mod = test_mod()
outer_struct = struct(outer_mod, conn: %Driver{})
Impl
|> expect(:write_register, 1, fn conn, reg_addr, data ->
assert conn == %Driver{}
assert reg_addr == 2
assert data == <<0>>
{:ok, conn}
end)
assert {:ok, ^outer_struct} = Chip.write_register(outer_struct, 2, <<0>>)
end
test "swapping a derived register" do
outer_mod = test_mod()
outer_struct = struct(outer_mod, conn: %Driver{})
Impl
|> expect(:swap_register, 1, fn conn, reg_addr, data ->
assert conn == %Driver{}
assert reg_addr == 2
assert data == <<0>>
{:ok, <<1>>, conn}
end)
assert {:ok, <<1>>, ^outer_struct} = Chip.swap_register(outer_struct, 2, <<0>>)
end
2019-12-31 18:54:46 +13:00
end
defp test_mod(key \\ :conn) do
2020-01-01 20:25:50 +13:00
mod = TestUtils.random_module_name()
2019-12-31 18:54:46 +13:00
if key == :conn do
defmodule mod do
@derive Chip
defstruct [:conn]
end
else
defmodule mod do
@derive {Chip, key: key}
defstruct [key]
end
end
mod
end
end