mirror of
https://github.com/hybridgroup/gobot.git
synced 2025-04-24 13:48:49 +08:00
tests(gpio,aio): cleanup helper_test (#1018)
This commit is contained in:
parent
1f09353831
commit
f7f482010b
@ -27,10 +27,11 @@ func TestAnalogSensorDriver(t *testing.T) {
|
||||
assert.Equal(t, "42", d.Pin())
|
||||
assert.Equal(t, 30*time.Second, d.interval)
|
||||
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
val = 100
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
ret := d.Command("ReadRaw")(nil).(map[string]interface{})
|
||||
assert.Equal(t, 100, ret["val"].(int))
|
||||
assert.Nil(t, ret["err"])
|
||||
@ -42,10 +43,10 @@ func TestAnalogSensorDriver(t *testing.T) {
|
||||
// refresh value on read
|
||||
a = newAioTestAdaptor()
|
||||
d = NewAnalogSensorDriver(a, "3")
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
val = 150
|
||||
return
|
||||
})
|
||||
}
|
||||
assert.Equal(t, 0.0, d.Value())
|
||||
val, err := d.Read()
|
||||
assert.NoError(t, err)
|
||||
@ -78,9 +79,9 @@ func TestAnalogSensorDriverWithLinearScaler(t *testing.T) {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
// arrange
|
||||
d.SetScaler(AnalogSensorLinearScaler(0, 255, tt.toMin, tt.toMax))
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
return tt.input, nil
|
||||
})
|
||||
}
|
||||
// act
|
||||
got, err := d.Read()
|
||||
// assert
|
||||
@ -108,10 +109,10 @@ func TestAnalogSensorDriverStart(t *testing.T) {
|
||||
})
|
||||
|
||||
// send data
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
val = 100
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
assert.NoError(t, d.Start())
|
||||
|
||||
@ -128,10 +129,10 @@ func TestAnalogSensorDriverStart(t *testing.T) {
|
||||
})
|
||||
|
||||
// send error
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
err = errors.New("read error")
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
@ -148,10 +149,10 @@ func TestAnalogSensorDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
val = 200
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
d.halt <- true
|
||||
|
||||
|
@ -51,10 +51,10 @@ func TestAnalogDriverHalt(t *testing.T) {
|
||||
|
||||
for _, driver := range drivers {
|
||||
var callCount int32
|
||||
testAdaptor.TestAdaptorAnalogRead(func() (int, error) {
|
||||
testAdaptor.analogReadFunc = func() (int, error) {
|
||||
atomic.AddInt32(&callCount, 1)
|
||||
return 42, nil
|
||||
})
|
||||
}
|
||||
|
||||
// Start the driver and allow for multiple digital reads
|
||||
_ = driver.Start()
|
||||
@ -84,11 +84,10 @@ func TestDriverPublishesError(t *testing.T) {
|
||||
for _, driver := range drivers {
|
||||
sem := make(chan struct{}, 1)
|
||||
// send error
|
||||
returnErr := func() (val int, err error) {
|
||||
testAdaptor.analogReadFunc = func() (val int, err error) {
|
||||
err = errors.New("read error")
|
||||
return
|
||||
}
|
||||
testAdaptor.TestAdaptorAnalogRead(returnErr)
|
||||
|
||||
assert.NoError(t, driver.Start())
|
||||
|
||||
|
@ -40,10 +40,10 @@ func TestGroveTemperatureSensorDriverScaling(t *testing.T) {
|
||||
for name, tt := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
// arrange
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
val = tt.input
|
||||
return
|
||||
})
|
||||
}
|
||||
// act
|
||||
got, err := d.Read()
|
||||
// assert
|
||||
@ -58,10 +58,10 @@ func TestGroveTempSensorPublishesTemperatureInCelsius(t *testing.T) {
|
||||
a := newAioTestAdaptor()
|
||||
d := NewGroveTemperatureSensorDriver(a, "1")
|
||||
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
val = 585
|
||||
return
|
||||
})
|
||||
}
|
||||
_ = d.Once(d.Event(Value), func(data interface{}) {
|
||||
assert.Equal(t, "31.62", fmt.Sprintf("%.2f", data.(float64)))
|
||||
sem <- true
|
||||
|
@ -3,37 +3,42 @@ package aio
|
||||
import "sync"
|
||||
|
||||
type aioTestAdaptor struct {
|
||||
name string
|
||||
port string
|
||||
mtx sync.Mutex
|
||||
testAdaptorAnalogRead func() (val int, err error)
|
||||
testAdaptorAnalogWrite func(val int) (err error)
|
||||
written []int
|
||||
name string
|
||||
port string
|
||||
mtx sync.Mutex
|
||||
analogReadFunc func() (val int, err error)
|
||||
analogWriteFunc func(val int) (err error)
|
||||
written []int
|
||||
}
|
||||
|
||||
func (t *aioTestAdaptor) TestAdaptorAnalogRead(f func() (val int, err error)) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
t.testAdaptorAnalogRead = f
|
||||
}
|
||||
|
||||
func (t *aioTestAdaptor) TestAdaptorAnalogWrite(f func(val int) (err error)) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
t.testAdaptorAnalogWrite = f
|
||||
func newAioTestAdaptor() *aioTestAdaptor {
|
||||
t := aioTestAdaptor{
|
||||
name: "aio_test_adaptor",
|
||||
port: "/dev/null",
|
||||
analogReadFunc: func() (val int, err error) {
|
||||
return 99, nil
|
||||
},
|
||||
analogWriteFunc: func(val int) (err error) {
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
return &t
|
||||
}
|
||||
|
||||
// AnalogRead capabilities (interface AnalogReader)
|
||||
func (t *aioTestAdaptor) AnalogRead(pin string) (val int, err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorAnalogRead()
|
||||
return t.analogReadFunc()
|
||||
}
|
||||
|
||||
// AnalogWrite capabilities (interface AnalogWriter)
|
||||
func (t *aioTestAdaptor) AnalogWrite(pin string, val int) (err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
t.written = append(t.written, val)
|
||||
return t.testAdaptorAnalogWrite(val)
|
||||
return t.analogWriteFunc(val)
|
||||
}
|
||||
|
||||
func (t *aioTestAdaptor) Connect() (err error) { return }
|
||||
@ -41,15 +46,3 @@ func (t *aioTestAdaptor) Finalize() (err error) { return }
|
||||
func (t *aioTestAdaptor) Name() string { return t.name }
|
||||
func (t *aioTestAdaptor) SetName(n string) { t.name = n }
|
||||
func (t *aioTestAdaptor) Port() string { return t.port }
|
||||
|
||||
func newAioTestAdaptor() *aioTestAdaptor {
|
||||
return &aioTestAdaptor{
|
||||
port: "/dev/null",
|
||||
testAdaptorAnalogRead: func() (val int, err error) {
|
||||
return 99, nil
|
||||
},
|
||||
testAdaptorAnalogWrite: func(val int) (err error) {
|
||||
return nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -41,10 +41,10 @@ func TestTemperatureSensorDriverNtcScaling(t *testing.T) {
|
||||
for name, tt := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
// arrange
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
val = tt.input
|
||||
return
|
||||
})
|
||||
}
|
||||
// act
|
||||
got, err := d.Read()
|
||||
// assert
|
||||
@ -76,10 +76,10 @@ func TestTemperatureSensorDriverLinearScaling(t *testing.T) {
|
||||
for name, tt := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
// arrange
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
val = tt.input
|
||||
return
|
||||
})
|
||||
}
|
||||
// act
|
||||
got, err := d.Read()
|
||||
// assert
|
||||
@ -96,10 +96,10 @@ func TestTempSensorPublishesTemperatureInCelsius(t *testing.T) {
|
||||
ntc := TemperatureSensorNtcConf{TC0: 25, R0: 10000.0, B: 3975} // Ohm, R25=10k
|
||||
d.SetNtcScaler(1023, 10000, false, ntc) // Ohm, reference value: 1023, series R: 10k
|
||||
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
val = 585
|
||||
return
|
||||
})
|
||||
}
|
||||
_ = d.Once(d.Event(Value), func(data interface{}) {
|
||||
assert.Equal(t, "31.62", fmt.Sprintf("%.2f", data.(float64)))
|
||||
sem <- true
|
||||
@ -121,10 +121,10 @@ func TestTempSensorPublishesError(t *testing.T) {
|
||||
d := NewTemperatureSensorDriver(a, "1")
|
||||
|
||||
// send error
|
||||
a.TestAdaptorAnalogRead(func() (val int, err error) {
|
||||
a.analogReadFunc = func() (val int, err error) {
|
||||
err = errors.New("read error")
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
assert.NoError(t, d.Start())
|
||||
|
||||
|
@ -44,10 +44,10 @@ func TestButtonDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 1
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
assert.NoError(t, d.Start())
|
||||
|
||||
@ -62,10 +62,10 @@ func TestButtonDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 0
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
@ -77,10 +77,10 @@ func TestButtonDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
err = errors.New("digital read error")
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
@ -94,10 +94,10 @@ func TestButtonDriverStart(t *testing.T) {
|
||||
|
||||
d.halt <- true
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 1
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
@ -117,10 +117,10 @@ func TestButtonDriverDefaultState(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 0
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
assert.NoError(t, d.Start())
|
||||
|
||||
@ -135,10 +135,10 @@ func TestButtonDriverDefaultState(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 1
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
|
@ -53,9 +53,9 @@ func TestBuzzerDriverTone(t *testing.T) {
|
||||
func TestBuzzerDriverOnError(t *testing.T) {
|
||||
a := newGpioTestAdaptor()
|
||||
d := initTestBuzzerDriver(a)
|
||||
a.TestAdaptorDigitalWrite(func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
})
|
||||
}
|
||||
|
||||
assert.ErrorContains(t, d.On(), "write error")
|
||||
}
|
||||
@ -63,9 +63,9 @@ func TestBuzzerDriverOnError(t *testing.T) {
|
||||
func TestBuzzerDriverOffError(t *testing.T) {
|
||||
a := newGpioTestAdaptor()
|
||||
d := initTestBuzzerDriver(a)
|
||||
a.TestAdaptorDigitalWrite(func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
})
|
||||
}
|
||||
|
||||
assert.ErrorContains(t, d.Off(), "write error")
|
||||
}
|
||||
@ -73,9 +73,9 @@ func TestBuzzerDriverOffError(t *testing.T) {
|
||||
func TestBuzzerDriverToneError(t *testing.T) {
|
||||
a := newGpioTestAdaptor()
|
||||
d := initTestBuzzerDriver(a)
|
||||
a.TestAdaptorDigitalWrite(func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
})
|
||||
}
|
||||
|
||||
assert.ErrorContains(t, d.Tone(100, 0.01), "write error")
|
||||
}
|
||||
|
@ -13,17 +13,17 @@ var _ gobot.Driver = (*DirectPinDriver)(nil)
|
||||
|
||||
func initTestDirectPinDriver() *DirectPinDriver {
|
||||
a := newGpioTestAdaptor()
|
||||
a.testAdaptorDigitalRead = func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 1
|
||||
return
|
||||
}
|
||||
a.testAdaptorDigitalWrite = func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
}
|
||||
a.testAdaptorPwmWrite = func(string, byte) (err error) {
|
||||
a.pwmWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
}
|
||||
a.testAdaptorServoWrite = func(string, byte) (err error) {
|
||||
a.servoWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
}
|
||||
return NewDirectPinDriver(a, "1")
|
||||
|
@ -53,7 +53,7 @@ func TestDigitalDriverHalt(t *testing.T) {
|
||||
for _, driver := range drivers {
|
||||
|
||||
var callCount int32
|
||||
testAdaptor.testAdaptorDigitalRead = func(string) (int, error) {
|
||||
testAdaptor.digitalReadFunc = func(string) (int, error) {
|
||||
atomic.AddInt32(&callCount, 1)
|
||||
return 42, nil
|
||||
}
|
||||
@ -89,7 +89,7 @@ func TestDriverPublishesError(t *testing.T) {
|
||||
err = errors.New("read error")
|
||||
return
|
||||
}
|
||||
testAdaptor.testAdaptorDigitalRead = returnErr
|
||||
testAdaptor.digitalReadFunc = returnErr
|
||||
|
||||
assert.NoError(t, driver.Start())
|
||||
|
||||
|
@ -126,14 +126,14 @@ func TestHD44780DriverWriteError(t *testing.T) {
|
||||
var a *gpioTestAdaptor
|
||||
|
||||
d, a = initTestHD44780Driver4BitModeWithStubbedAdaptor()
|
||||
a.testAdaptorDigitalWrite = func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
}
|
||||
_ = d.Start()
|
||||
assert.ErrorContains(t, d.Write("hello gobot"), "write error")
|
||||
|
||||
d, a = initTestHD44780Driver8BitModeWithStubbedAdaptor()
|
||||
a.testAdaptorDigitalWrite = func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
}
|
||||
_ = d.Start()
|
||||
|
@ -10,98 +10,66 @@ func (t *gpioTestBareAdaptor) Name() string { return "" }
|
||||
func (t *gpioTestBareAdaptor) SetName(n string) {}
|
||||
|
||||
type gpioTestAdaptor struct {
|
||||
name string
|
||||
port string
|
||||
mtx sync.Mutex
|
||||
testAdaptorDigitalWrite func(pin string, val byte) (err error)
|
||||
testAdaptorServoWrite func(pin string, val byte) (err error)
|
||||
testAdaptorPwmWrite func(pin string, val byte) (err error)
|
||||
testAdaptorAnalogRead func(ping string) (val int, err error)
|
||||
testAdaptorDigitalRead func(ping string) (val int, err error)
|
||||
name string
|
||||
port string
|
||||
mtx sync.Mutex
|
||||
digitalReadFunc func(ping string) (val int, err error)
|
||||
digitalWriteFunc func(pin string, val byte) (err error)
|
||||
pwmWriteFunc func(pin string, val byte) (err error)
|
||||
servoWriteFunc func(pin string, val byte) (err error)
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) TestAdaptorDigitalWrite(f func(pin string, val byte) (err error)) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
t.testAdaptorDigitalWrite = f
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) TestAdaptorServoWrite(f func(pin string, val byte) (err error)) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
t.testAdaptorServoWrite = f
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) TestAdaptorPwmWrite(f func(pin string, val byte) (err error)) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
t.testAdaptorPwmWrite = f
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) TestAdaptorAnalogRead(f func(pin string) (val int, err error)) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
t.testAdaptorAnalogRead = f
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) TestAdaptorDigitalRead(f func(pin string) (val int, err error)) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
t.testAdaptorDigitalRead = f
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) ServoWrite(pin string, val byte) (err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorServoWrite(pin, val)
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) PwmWrite(pin string, val byte) (err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorPwmWrite(pin, val)
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) AnalogRead(pin string) (val int, err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorAnalogRead(pin)
|
||||
func newGpioTestAdaptor() *gpioTestAdaptor {
|
||||
t := gpioTestAdaptor{
|
||||
name: "gpio_test_adaptor",
|
||||
port: "/dev/null",
|
||||
digitalWriteFunc: func(pin string, val byte) (err error) {
|
||||
return nil
|
||||
},
|
||||
servoWriteFunc: func(pin string, val byte) (err error) {
|
||||
return nil
|
||||
},
|
||||
pwmWriteFunc: func(pin string, val byte) (err error) {
|
||||
return nil
|
||||
},
|
||||
digitalReadFunc: func(pin string) (val int, err error) {
|
||||
return 1, nil
|
||||
},
|
||||
}
|
||||
|
||||
return &t
|
||||
}
|
||||
|
||||
// DigitalRead capabilities (interface DigitalReader)
|
||||
func (t *gpioTestAdaptor) DigitalRead(pin string) (val int, err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorDigitalRead(pin)
|
||||
return t.digitalReadFunc(pin)
|
||||
}
|
||||
|
||||
// DigitalWrite capabilities (interface DigitalWriter)
|
||||
func (t *gpioTestAdaptor) DigitalWrite(pin string, val byte) (err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorDigitalWrite(pin, val)
|
||||
return t.digitalWriteFunc(pin, val)
|
||||
}
|
||||
|
||||
// PwmWrite capabilities (interface PwmWriter)
|
||||
func (t *gpioTestAdaptor) PwmWrite(pin string, val byte) (err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.pwmWriteFunc(pin, val)
|
||||
}
|
||||
|
||||
// ServoWrite capabilities (interface ServoWriter)
|
||||
func (t *gpioTestAdaptor) ServoWrite(pin string, val byte) (err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.servoWriteFunc(pin, val)
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) Connect() (err error) { return }
|
||||
func (t *gpioTestAdaptor) Finalize() (err error) { return }
|
||||
func (t *gpioTestAdaptor) Name() string { return t.name }
|
||||
func (t *gpioTestAdaptor) SetName(n string) { t.name = n }
|
||||
func (t *gpioTestAdaptor) Port() string { return t.port }
|
||||
|
||||
func newGpioTestAdaptor() *gpioTestAdaptor {
|
||||
return &gpioTestAdaptor{
|
||||
port: "/dev/null",
|
||||
testAdaptorDigitalWrite: func(pin string, val byte) (err error) {
|
||||
return nil
|
||||
},
|
||||
testAdaptorServoWrite: func(pin string, val byte) (err error) {
|
||||
return nil
|
||||
},
|
||||
testAdaptorPwmWrite: func(pin string, val byte) (err error) {
|
||||
return nil
|
||||
},
|
||||
testAdaptorAnalogRead: func(pin string) (val int, err error) {
|
||||
return 99, nil
|
||||
},
|
||||
testAdaptorDigitalRead: func(pin string) (val int, err error) {
|
||||
return 1, nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -13,10 +13,10 @@ var _ gobot.Driver = (*LedDriver)(nil)
|
||||
|
||||
func initTestLedDriver() *LedDriver {
|
||||
a := newGpioTestAdaptor()
|
||||
a.testAdaptorDigitalWrite = func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return nil
|
||||
}
|
||||
a.testAdaptorPwmWrite = func(string, byte) (err error) {
|
||||
a.pwmWriteFunc = func(string, byte) (err error) {
|
||||
return nil
|
||||
}
|
||||
return NewLedDriver(a, "1")
|
||||
@ -30,10 +30,10 @@ func TestLedDriver(t *testing.T) {
|
||||
assert.Equal(t, "1", d.Pin())
|
||||
assert.NotNil(t, d.Connection())
|
||||
|
||||
a.testAdaptorDigitalWrite = func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
}
|
||||
a.testAdaptorPwmWrite = func(string, byte) (err error) {
|
||||
a.pwmWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("pwm error")
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ func TestLedDriverToggle(t *testing.T) {
|
||||
func TestLedDriverBrightness(t *testing.T) {
|
||||
a := newGpioTestAdaptor()
|
||||
d := NewLedDriver(a, "1")
|
||||
a.testAdaptorPwmWrite = func(string, byte) (err error) {
|
||||
a.pwmWriteFunc = func(string, byte) (err error) {
|
||||
err = errors.New("pwm error")
|
||||
return
|
||||
}
|
||||
|
@ -54,10 +54,10 @@ func TestMakeyButtonDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 0
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
@ -70,10 +70,10 @@ func TestMakeyButtonDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 1
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
@ -86,10 +86,10 @@ func TestMakeyButtonDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
err = errors.New("digital read error")
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
@ -102,10 +102,10 @@ func TestMakeyButtonDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 1
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
d.halt <- true
|
||||
|
||||
|
@ -46,10 +46,10 @@ func TestPIRMotionDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 1
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
@ -62,10 +62,10 @@ func TestPIRMotionDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
val = 0
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
@ -77,10 +77,10 @@ func TestPIRMotionDriverStart(t *testing.T) {
|
||||
sem <- true
|
||||
})
|
||||
|
||||
a.TestAdaptorDigitalRead(func(string) (val int, err error) {
|
||||
a.digitalReadFunc = func(string) (val int, err error) {
|
||||
err = errors.New("digital read error")
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
select {
|
||||
case <-sem:
|
||||
|
@ -15,10 +15,10 @@ func (l *RelayDriver) High() bool { return l.high }
|
||||
|
||||
func initTestRelayDriver() (*RelayDriver, *gpioTestAdaptor) {
|
||||
a := newGpioTestAdaptor()
|
||||
a.testAdaptorDigitalWrite = func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return nil
|
||||
}
|
||||
a.testAdaptorPwmWrite = func(string, byte) (err error) {
|
||||
a.pwmWriteFunc = func(string, byte) (err error) {
|
||||
return nil
|
||||
}
|
||||
return NewRelayDriver(a, "1"), a
|
||||
@ -49,10 +49,10 @@ func TestRelayDriverHalt(t *testing.T) {
|
||||
func TestRelayDriverToggle(t *testing.T) {
|
||||
d, a := initTestRelayDriver()
|
||||
var lastVal byte
|
||||
a.TestAdaptorDigitalWrite(func(pin string, val byte) error {
|
||||
a.digitalWriteFunc = func(pin string, val byte) error {
|
||||
lastVal = val
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
_ = d.Off()
|
||||
assert.False(t, d.State())
|
||||
@ -68,10 +68,10 @@ func TestRelayDriverToggle(t *testing.T) {
|
||||
func TestRelayDriverToggleInverted(t *testing.T) {
|
||||
d, a := initTestRelayDriver()
|
||||
var lastVal byte
|
||||
a.TestAdaptorDigitalWrite(func(pin string, val byte) error {
|
||||
a.digitalWriteFunc = func(pin string, val byte) error {
|
||||
lastVal = val
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
d.Inverted = true
|
||||
_ = d.Off()
|
||||
@ -88,10 +88,10 @@ func TestRelayDriverToggleInverted(t *testing.T) {
|
||||
func TestRelayDriverCommands(t *testing.T) {
|
||||
d, a := initTestRelayDriver()
|
||||
var lastVal byte
|
||||
a.TestAdaptorDigitalWrite(func(pin string, val byte) error {
|
||||
a.digitalWriteFunc = func(pin string, val byte) error {
|
||||
lastVal = val
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
assert.Nil(t, d.Command("Off")(nil))
|
||||
assert.False(t, d.State())
|
||||
@ -109,10 +109,10 @@ func TestRelayDriverCommands(t *testing.T) {
|
||||
func TestRelayDriverCommandsInverted(t *testing.T) {
|
||||
d, a := initTestRelayDriver()
|
||||
var lastVal byte
|
||||
a.TestAdaptorDigitalWrite(func(pin string, val byte) error {
|
||||
a.digitalWriteFunc = func(pin string, val byte) error {
|
||||
lastVal = val
|
||||
return nil
|
||||
})
|
||||
}
|
||||
d.Inverted = true
|
||||
|
||||
assert.Nil(t, d.Command("Off")(nil))
|
||||
|
@ -13,10 +13,10 @@ var _ gobot.Driver = (*RgbLedDriver)(nil)
|
||||
|
||||
func initTestRgbLedDriver() *RgbLedDriver {
|
||||
a := newGpioTestAdaptor()
|
||||
a.testAdaptorDigitalWrite = func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return nil
|
||||
}
|
||||
a.testAdaptorPwmWrite = func(string, byte) (err error) {
|
||||
a.pwmWriteFunc = func(string, byte) (err error) {
|
||||
return nil
|
||||
}
|
||||
return NewRgbLedDriver(a, "1", "2", "3")
|
||||
@ -34,10 +34,10 @@ func TestRgbLedDriver(t *testing.T) {
|
||||
assert.Equal(t, "3", d.BluePin())
|
||||
assert.NotNil(t, d.Connection())
|
||||
|
||||
a.testAdaptorDigitalWrite = func(string, byte) (err error) {
|
||||
a.digitalWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("write error")
|
||||
}
|
||||
a.testAdaptorPwmWrite = func(string, byte) (err error) {
|
||||
a.pwmWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("pwm error")
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ func TestRgbLedDriverSetLevel(t *testing.T) {
|
||||
assert.NoError(t, d.SetLevel("1", 150))
|
||||
|
||||
d = NewRgbLedDriver(a, "1", "2", "3")
|
||||
a.testAdaptorPwmWrite = func(string, byte) (err error) {
|
||||
a.pwmWriteFunc = func(string, byte) (err error) {
|
||||
err = errors.New("pwm error")
|
||||
return
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ func TestServoDriver(t *testing.T) {
|
||||
assert.Equal(t, "1", d.Pin())
|
||||
assert.NotNil(t, d.Connection())
|
||||
|
||||
a.testAdaptorServoWrite = func(string, byte) (err error) {
|
||||
a.servoWriteFunc = func(string, byte) (err error) {
|
||||
return errors.New("pwm error")
|
||||
}
|
||||
|
||||
|
@ -49,41 +49,41 @@ type gpioTestAdaptor struct {
|
||||
port string
|
||||
mtx sync.Mutex
|
||||
Connector
|
||||
testAdaptorDigitalWrite func() (err error)
|
||||
testAdaptorServoWrite func() (err error)
|
||||
testAdaptorPwmWrite func() (err error)
|
||||
testAdaptorAnalogRead func() (val int, err error)
|
||||
testAdaptorDigitalRead func() (val int, err error)
|
||||
digitalWriteFunc func() (err error)
|
||||
servoWriteFunc func() (err error)
|
||||
pwmWriteFunc func() (err error)
|
||||
analogReadFunc func() (val int, err error)
|
||||
digitalReadFunc func() (val int, err error)
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) ServoWrite(string, byte) (err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorServoWrite()
|
||||
return t.servoWriteFunc()
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) PwmWrite(string, byte) (err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorPwmWrite()
|
||||
return t.pwmWriteFunc()
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) AnalogRead(string) (val int, err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorAnalogRead()
|
||||
return t.analogReadFunc()
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) DigitalRead(string) (val int, err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorDigitalRead()
|
||||
return t.digitalReadFunc()
|
||||
}
|
||||
|
||||
func (t *gpioTestAdaptor) DigitalWrite(string, byte) (err error) {
|
||||
t.mtx.Lock()
|
||||
defer t.mtx.Unlock()
|
||||
return t.testAdaptorDigitalWrite()
|
||||
return t.digitalWriteFunc()
|
||||
}
|
||||
func (t *gpioTestAdaptor) Connect() (err error) { return }
|
||||
func (t *gpioTestAdaptor) Finalize() (err error) { return }
|
||||
@ -95,19 +95,19 @@ func newGpioTestAdaptor() *gpioTestAdaptor {
|
||||
a := newSpiTestAdaptor()
|
||||
return &gpioTestAdaptor{
|
||||
port: "/dev/null",
|
||||
testAdaptorDigitalWrite: func() (err error) {
|
||||
digitalWriteFunc: func() (err error) {
|
||||
return nil
|
||||
},
|
||||
testAdaptorServoWrite: func() (err error) {
|
||||
servoWriteFunc: func() (err error) {
|
||||
return nil
|
||||
},
|
||||
testAdaptorPwmWrite: func() (err error) {
|
||||
pwmWriteFunc: func() (err error) {
|
||||
return nil
|
||||
},
|
||||
testAdaptorAnalogRead: func() (val int, err error) {
|
||||
analogReadFunc: func() (val int, err error) {
|
||||
return 99, nil
|
||||
},
|
||||
testAdaptorDigitalRead: func() (val int, err error) {
|
||||
digitalReadFunc: func() (val int, err error) {
|
||||
return 1, nil
|
||||
},
|
||||
Connector: a,
|
||||
|
Loading…
x
Reference in New Issue
Block a user