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  }