farmbot_os/farmbot_os/test/farmbot_os/syscalls/pin_control_test.exs

98 lines
2.5 KiB
Elixir

defmodule FarmbotOS.SysCalls.PinControlTest do
use ExUnit.Case
use Mimic
setup :verify_on_exit!
alias FarmbotOS.SysCalls.PinControl
alias FarmbotCore.Asset.Peripheral
@digital 0
@tag :capture_log
test "read_pin with %Peripheral{}, pin is 1" do
expect(FarmbotFirmware, :request, 1, fn
{:pin_read, [p: 13, m: 0]} ->
{:ok, {:qqq, {:report_pin_value, [p: 13, v: 1]}}}
end)
peripheral = %Peripheral{
pin: 13,
label: "xyz"
}
assert 1 == PinControl.read_pin(peripheral, @digital)
end
@tag :capture_log
test "read_pin with %Peripheral{}, pin is 0" do
expect(FarmbotFirmware, :request, 1, fn
{:pin_read, [p: 13, m: 0]} ->
{:ok, {:qqq, {:report_pin_value, [p: 13, v: 0]}}}
end)
peripheral = %Peripheral{pin: 13, label: "xyz"}
assert 0 == PinControl.read_pin(peripheral, @digital)
end
@tag :capture_log
test "toggle_pin, 1 => 0" do
expect(FarmbotCore.Asset, :get_peripheral_by_pin, 1, fn 12 ->
nil
end)
expect(FarmbotFirmware, :command, 2, fn
{:pin_mode_write, [p: 12, m: 1]} -> :ok
{:pin_write, [p: 12, v: _, m: _]} -> :ok
end)
expect(FarmbotFirmware, :request, 2, fn
{:pin_read, [p: 12, m: 0]} ->
{:ok, {:qqq, {:report_pin_value, [p: 12, v: 1]}}}
end)
assert :ok = PinControl.toggle_pin(12)
end
@tag :capture_log
test "toggle_pin, 0 => 1" do
expect(FarmbotCore.Asset, :get_peripheral_by_pin, 1, fn 12 ->
nil
end)
expect(FarmbotFirmware, :command, 2, fn
{:pin_mode_write, [p: 12, m: 1]} -> :ok
{:pin_write, [p: 12, v: _, m: _]} -> :ok
end)
expect(FarmbotFirmware, :request, 2, fn
{:pin_read, [p: 12, m: 0]} ->
{:ok, {:qqq, {:report_pin_value, [p: 12, v: 0]}}}
end)
assert :ok = PinControl.toggle_pin(12)
end
test "toggle_pin, unknown" do
assert {:error, "Unknown pin data: :x"} == PinControl.toggle_pin(:x)
end
test "set_servo_angle" do
expect(FarmbotFirmware, :command, 2, fn
{:servo_write, [p: 20, v: 90]} -> {:error, "opps"}
{:servo_write, [p: 40, v: 180]} -> :ok
end)
assert :ok = PinControl.set_servo_angle(40, 180)
message = "Firmware error @ \"set_servo_angle\": \"opps\""
assert {:error, ^message} = PinControl.set_servo_angle(20, 90)
end
test "read_cached_pin" do
expect(FarmbotCore.BotState, :fetch, 1, fn ->
%FarmbotCore.BotStateNG{pins: %{4 => %{value: 6}}}
end)
assert 6 == PinControl.read_cached_pin(4)
end
end