98 lines
2.5 KiB
Elixir
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
|