1
0
mirror of https://github.com/hybridgroup/gobot.git synced 2025-04-24 13:48:49 +08:00
hybridgroup.gobot/drivers/gpio/relay_driver_test.go

133 lines
3.2 KiB
Go
Raw Normal View History

package gpio
import (
"strings"
"testing"
"gobot.io/x/gobot/v2"
"gobot.io/x/gobot/v2/gobottest"
)
var _ gobot.Driver = (*RelayDriver)(nil)
// Helper to return low/high value for testing
func (l *RelayDriver) High() bool { return l.high }
2020-03-31 06:40:22 +01:00
func initTestRelayDriver() (*RelayDriver, *gpioTestAdaptor) {
a := newGpioTestAdaptor()
a.testAdaptorDigitalWrite = func(string, byte) (err error) {
return nil
}
a.testAdaptorPwmWrite = func(string, byte) (err error) {
return nil
}
2020-03-31 06:40:22 +01:00
return NewRelayDriver(a, "1"), a
}
func TestRelayDriverDefaultName(t *testing.T) {
2020-03-31 06:40:22 +01:00
g, _ := initTestRelayDriver()
gobottest.Refute(t, g.Connection(), nil)
gobottest.Assert(t, strings.HasPrefix(g.Name(), "Relay"), true)
}
func TestRelayDriverSetName(t *testing.T) {
2020-03-31 06:40:22 +01:00
g, _ := initTestRelayDriver()
g.SetName("mybot")
gobottest.Assert(t, g.Name(), "mybot")
}
func TestRelayDriverStart(t *testing.T) {
2020-03-31 06:40:22 +01:00
d, _ := initTestRelayDriver()
gobottest.Assert(t, d.Start(), nil)
}
func TestRelayDriverHalt(t *testing.T) {
2020-03-31 06:40:22 +01:00
d, _ := initTestRelayDriver()
gobottest.Assert(t, d.Halt(), nil)
}
func TestRelayDriverToggle(t *testing.T) {
2020-03-31 06:40:22 +01:00
d, a := initTestRelayDriver()
var lastVal byte
a.TestAdaptorDigitalWrite(func(pin string, val byte) error {
lastVal = val
return nil
})
d.Off()
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, d.State(), false)
gobottest.Assert(t, lastVal, byte(0))
d.Toggle()
gobottest.Assert(t, d.State(), true)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(1))
d.Toggle()
gobottest.Assert(t, d.State(), false)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(0))
}
func TestRelayDriverToggleInverted(t *testing.T) {
2020-03-31 06:40:22 +01:00
d, a := initTestRelayDriver()
var lastVal byte
a.TestAdaptorDigitalWrite(func(pin string, val byte) error {
lastVal = val
return nil
})
d.Inverted = true
d.Off()
gobottest.Assert(t, d.State(), false)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(1))
d.Toggle()
gobottest.Assert(t, d.State(), true)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(0))
d.Toggle()
gobottest.Assert(t, d.State(), false)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(1))
}
func TestRelayDriverCommands(t *testing.T) {
2020-03-31 06:40:22 +01:00
d, a := initTestRelayDriver()
var lastVal byte
a.TestAdaptorDigitalWrite(func(pin string, val byte) error {
lastVal = val
return nil
})
gobottest.Assert(t, d.Command("Off")(nil), nil)
gobottest.Assert(t, d.State(), false)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(0))
gobottest.Assert(t, d.Command("On")(nil), nil)
gobottest.Assert(t, d.State(), true)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(1))
gobottest.Assert(t, d.Command("Toggle")(nil), nil)
gobottest.Assert(t, d.State(), false)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(0))
}
func TestRelayDriverCommandsInverted(t *testing.T) {
2020-03-31 06:40:22 +01:00
d, a := initTestRelayDriver()
var lastVal byte
a.TestAdaptorDigitalWrite(func(pin string, val byte) error {
lastVal = val
return nil
})
d.Inverted = true
gobottest.Assert(t, d.Command("Off")(nil), nil)
gobottest.Assert(t, d.High(), true)
gobottest.Assert(t, d.State(), false)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(1))
gobottest.Assert(t, d.Command("On")(nil), nil)
gobottest.Assert(t, d.High(), false)
gobottest.Assert(t, d.State(), true)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(0))
gobottest.Assert(t, d.Command("Toggle")(nil), nil)
gobottest.Assert(t, d.High(), true)
gobottest.Assert(t, d.State(), false)
2020-03-31 06:40:22 +01:00
gobottest.Assert(t, lastVal, byte(1))
}