gobot.io/x/gobot/v2@v2.1.0/drivers/gpio/makey_button_driver_test.go (about) 1 package gpio 2 3 import ( 4 "errors" 5 "testing" 6 "time" 7 8 "gobot.io/x/gobot/v2" 9 "gobot.io/x/gobot/v2/gobottest" 10 ) 11 12 var _ gobot.Driver = (*MakeyButtonDriver)(nil) 13 14 const makeyTestDelay = 250 15 16 func initTestMakeyButtonDriver() *MakeyButtonDriver { 17 return NewMakeyButtonDriver(newGpioTestAdaptor(), "1") 18 } 19 20 func TestMakeyButtonDriverHalt(t *testing.T) { 21 d := initTestMakeyButtonDriver() 22 done := make(chan struct{}) 23 go func() { 24 <-d.halt 25 close(done) 26 }() 27 gobottest.Assert(t, d.Halt(), nil) 28 select { 29 case <-done: 30 case <-time.After(makeyTestDelay * time.Millisecond): 31 t.Errorf("MakeyButton was not halted") 32 } 33 } 34 35 func TestMakeyButtonDriver(t *testing.T) { 36 d := initTestMakeyButtonDriver() 37 gobottest.Assert(t, d.Pin(), "1") 38 gobottest.Refute(t, d.Connection(), nil) 39 gobottest.Assert(t, d.interval, 10*time.Millisecond) 40 41 d = NewMakeyButtonDriver(newGpioTestAdaptor(), "1", 30*time.Second) 42 gobottest.Assert(t, d.interval, 30*time.Second) 43 } 44 45 func TestMakeyButtonDriverStart(t *testing.T) { 46 sem := make(chan bool) 47 a := newGpioTestAdaptor() 48 d := NewMakeyButtonDriver(a, "1") 49 50 gobottest.Assert(t, d.Start(), nil) 51 52 d.Once(ButtonPush, func(data interface{}) { 53 gobottest.Assert(t, d.Active, true) 54 sem <- true 55 }) 56 57 a.TestAdaptorDigitalRead(func(string) (val int, err error) { 58 val = 0 59 return 60 }) 61 62 select { 63 case <-sem: 64 case <-time.After(makeyTestDelay * time.Millisecond): 65 t.Errorf("MakeyButton Event \"Push\" was not published") 66 } 67 68 d.Once(ButtonRelease, func(data interface{}) { 69 gobottest.Assert(t, d.Active, false) 70 sem <- true 71 }) 72 73 a.TestAdaptorDigitalRead(func(string) (val int, err error) { 74 val = 1 75 return 76 }) 77 78 select { 79 case <-sem: 80 case <-time.After(makeyTestDelay * time.Millisecond): 81 t.Errorf("MakeyButton Event \"Release\" was not published") 82 } 83 84 d.Once(Error, func(data interface{}) { 85 gobottest.Assert(t, data.(error).Error(), "digital read error") 86 sem <- true 87 }) 88 89 a.TestAdaptorDigitalRead(func(string) (val int, err error) { 90 err = errors.New("digital read error") 91 return 92 }) 93 94 select { 95 case <-sem: 96 case <-time.After(makeyTestDelay * time.Millisecond): 97 t.Errorf("MakeyButton Event \"Error\" was not published") 98 } 99 100 // send a halt message 101 d.Once(ButtonRelease, func(data interface{}) { 102 sem <- true 103 }) 104 105 a.TestAdaptorDigitalRead(func(string) (val int, err error) { 106 val = 1 107 return 108 }) 109 110 d.halt <- true 111 112 select { 113 case <-sem: 114 t.Errorf("MakeyButton Event should not have been published") 115 case <-time.After(makeyTestDelay * time.Millisecond): 116 } 117 }