gobot.io/x/gobot@v1.16.0/drivers/gpio/relay_driver_test.go (about) 1 package gpio 2 3 import ( 4 "strings" 5 "testing" 6 7 "gobot.io/x/gobot" 8 "gobot.io/x/gobot/gobottest" 9 ) 10 11 var _ gobot.Driver = (*RelayDriver)(nil) 12 13 // Helper to return low/high value for testing 14 func (l *RelayDriver) High() bool { return l.high } 15 16 func initTestRelayDriver() (*RelayDriver, *gpioTestAdaptor) { 17 a := newGpioTestAdaptor() 18 a.testAdaptorDigitalWrite = func(string, byte) (err error) { 19 return nil 20 } 21 a.testAdaptorPwmWrite = func(string, byte) (err error) { 22 return nil 23 } 24 return NewRelayDriver(a, "1"), a 25 } 26 27 func TestRelayDriverDefaultName(t *testing.T) { 28 g, _ := initTestRelayDriver() 29 gobottest.Refute(t, g.Connection(), nil) 30 gobottest.Assert(t, strings.HasPrefix(g.Name(), "Relay"), true) 31 } 32 33 func TestRelayDriverSetName(t *testing.T) { 34 g, _ := initTestRelayDriver() 35 g.SetName("mybot") 36 gobottest.Assert(t, g.Name(), "mybot") 37 } 38 39 func TestRelayDriverStart(t *testing.T) { 40 d, _ := initTestRelayDriver() 41 gobottest.Assert(t, d.Start(), nil) 42 } 43 44 func TestRelayDriverHalt(t *testing.T) { 45 d, _ := initTestRelayDriver() 46 gobottest.Assert(t, d.Halt(), nil) 47 } 48 49 func TestRelayDriverToggle(t *testing.T) { 50 d, a := initTestRelayDriver() 51 var lastVal byte 52 a.TestAdaptorDigitalWrite(func(pin string, val byte) error { 53 lastVal = val 54 return nil 55 }) 56 57 d.Off() 58 gobottest.Assert(t, d.State(), false) 59 gobottest.Assert(t, lastVal, byte(0)) 60 d.Toggle() 61 gobottest.Assert(t, d.State(), true) 62 gobottest.Assert(t, lastVal, byte(1)) 63 d.Toggle() 64 gobottest.Assert(t, d.State(), false) 65 gobottest.Assert(t, lastVal, byte(0)) 66 } 67 68 func TestRelayDriverToggleInverted(t *testing.T) { 69 d, a := initTestRelayDriver() 70 var lastVal byte 71 a.TestAdaptorDigitalWrite(func(pin string, val byte) error { 72 lastVal = val 73 return nil 74 }) 75 76 d.Inverted = true 77 d.Off() 78 gobottest.Assert(t, d.State(), false) 79 gobottest.Assert(t, lastVal, byte(1)) 80 d.Toggle() 81 gobottest.Assert(t, d.State(), true) 82 gobottest.Assert(t, lastVal, byte(0)) 83 d.Toggle() 84 gobottest.Assert(t, d.State(), false) 85 gobottest.Assert(t, lastVal, byte(1)) 86 } 87 88 func TestRelayDriverCommands(t *testing.T) { 89 d, a := initTestRelayDriver() 90 var lastVal byte 91 a.TestAdaptorDigitalWrite(func(pin string, val byte) error { 92 lastVal = val 93 return nil 94 }) 95 96 gobottest.Assert(t, d.Command("Off")(nil), nil) 97 gobottest.Assert(t, d.State(), false) 98 gobottest.Assert(t, lastVal, byte(0)) 99 100 gobottest.Assert(t, d.Command("On")(nil), nil) 101 gobottest.Assert(t, d.State(), true) 102 gobottest.Assert(t, lastVal, byte(1)) 103 104 gobottest.Assert(t, d.Command("Toggle")(nil), nil) 105 gobottest.Assert(t, d.State(), false) 106 gobottest.Assert(t, lastVal, byte(0)) 107 } 108 109 func TestRelayDriverCommandsInverted(t *testing.T) { 110 d, a := initTestRelayDriver() 111 var lastVal byte 112 a.TestAdaptorDigitalWrite(func(pin string, val byte) error { 113 lastVal = val 114 return nil 115 }) 116 d.Inverted = true 117 118 gobottest.Assert(t, d.Command("Off")(nil), nil) 119 gobottest.Assert(t, d.High(), true) 120 gobottest.Assert(t, d.State(), false) 121 gobottest.Assert(t, lastVal, byte(1)) 122 123 gobottest.Assert(t, d.Command("On")(nil), nil) 124 gobottest.Assert(t, d.High(), false) 125 gobottest.Assert(t, d.State(), true) 126 gobottest.Assert(t, lastVal, byte(0)) 127 128 gobottest.Assert(t, d.Command("Toggle")(nil), nil) 129 gobottest.Assert(t, d.High(), true) 130 gobottest.Assert(t, d.State(), false) 131 gobottest.Assert(t, lastVal, byte(1)) 132 }