1
0
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:
Thomas Kohler 2023-10-27 20:46:45 +02:00 committed by GitHub
parent 1f09353831
commit f7f482010b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 172 additions and 211 deletions

View File

@ -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

View File

@ -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())

View File

@ -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

View File

@ -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
},
}
}

View File

@ -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())

View File

@ -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:

View File

@ -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")
}

View File

@ -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")

View File

@ -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())

View File

@ -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()

View File

@ -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
},
}
}

View File

@ -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
}

View File

@ -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

View File

@ -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:

View File

@ -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))

View File

@ -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
}

View File

@ -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")
}

View File

@ -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,