1
0
mirror of https://github.com/hybridgroup/gobot.git synced 2025-04-24 13:48:49 +08:00
hybridgroup.gobot/drivers/i2c/i2c_driver_test.go
Thomas Kohler ad59d23e2e introduce generic i2c.Driver with example for digispark
fix missing/wrong entries in README
stabilize test
2022-10-02 14:18:08 +02:00

140 lines
2.9 KiB
Go

package i2c
import (
"errors"
"strings"
"testing"
"gobot.io/x/gobot"
"gobot.io/x/gobot/gobottest"
)
var _ gobot.Driver = (*Driver)(nil)
func initDriverWithStubbedAdaptor() (*Driver, *i2cTestAdaptor) {
a := newI2cTestAdaptor()
d := NewDriver(a, "I2C_BASIC", 0x15)
return d, a
}
func initTestDriver() *Driver {
d, _ := initDriverWithStubbedAdaptor()
return d
}
func TestNewDriver(t *testing.T) {
// arrange
a := newI2cTestAdaptor()
// act
var di interface{} = NewDriver(a, "I2C_BASIC", 0x15)
// assert
d, ok := di.(*Driver)
if !ok {
t.Errorf("NewDriver() should have returned a *Driver")
}
gobottest.Assert(t, strings.Contains(d.name, "I2C_BASIC"), true)
gobottest.Assert(t, d.defaultAddress, 0x15)
gobottest.Assert(t, d.connector, a)
gobottest.Assert(t, d.connection, nil)
gobottest.Assert(t, d.afterStart(), nil)
gobottest.Assert(t, d.beforeHalt(), nil)
gobottest.Refute(t, d.Config, nil)
gobottest.Refute(t, d.Commander, nil)
gobottest.Refute(t, d.mutex, nil)
}
func TestSetName(t *testing.T) {
// arrange
d := initTestDriver()
// act
d.SetName("TESTME")
// assert
gobottest.Assert(t, d.Name(), "TESTME")
}
func TestConnection(t *testing.T) {
// arrange
d := initTestDriver()
// act, assert
gobottest.Refute(t, d.Connection(), nil)
}
func TestStart(t *testing.T) {
// arrange
d, a := initDriverWithStubbedAdaptor()
// act, assert
gobottest.Assert(t, d.Start(), nil)
gobottest.Assert(t, 0x15, a.address)
}
func TestStartConnectError(t *testing.T) {
// arrange
d, a := initDriverWithStubbedAdaptor()
a.Testi2cConnectErr(true)
// act, assert
gobottest.Assert(t, d.Start(), errors.New("Invalid i2c connection"))
}
func TestHalt(t *testing.T) {
// arrange
d := initTestDriver()
// act, assert
gobottest.Assert(t, d.Halt(), nil)
}
func TestWrite(t *testing.T) {
// arrange
const (
address = "82"
wantAddress = uint8(0x52)
value = 0x25
)
d, a := initDriverWithStubbedAdaptor()
d.Start()
// prepare all writes
numCallsWrite := 0
a.i2cWriteImpl = func([]byte) (int, error) {
numCallsWrite++
return 0, nil
}
// act
err := d.Write(address, value)
// assert
gobottest.Assert(t, err, nil)
gobottest.Assert(t, numCallsWrite, 1)
gobottest.Assert(t, a.written[0], wantAddress)
gobottest.Assert(t, a.written[1], uint8(value))
}
func TestRead(t *testing.T) {
// arrange
const (
address = "83"
wantAddress = uint8(0x53)
want = uint8(0x44)
)
d, a := initDriverWithStubbedAdaptor()
d.Start()
// prepare all writes
numCallsWrite := 0
a.i2cWriteImpl = func(b []byte) (int, error) {
numCallsWrite++
return 0, nil
}
// prepare all reads
numCallsRead := 0
a.i2cReadImpl = func(b []byte) (int, error) {
numCallsRead++
b[0] = want
return len(b), nil
}
// act
val, err := d.Read(address)
// assert
gobottest.Assert(t, err, nil)
gobottest.Assert(t, val, int(want))
gobottest.Assert(t, numCallsWrite, 1)
gobottest.Assert(t, a.written[0], wantAddress)
gobottest.Assert(t, numCallsRead, 1)
}