Add unit tests for group

pull/92/head
George Sexton 1 year ago
parent 743985e052
commit 47bda35dff

@ -5,43 +5,35 @@
package mcp23xxx package mcp23xxx
import ( import (
"log"
"testing" "testing"
"time" "time"
"periph.io/x/conn/v3/gpio" "periph.io/x/conn/v3/gpio"
"periph.io/x/conn/v3/i2c/i2creg" "periph.io/x/conn/v3/i2c/i2ctest"
"periph.io/x/host/v3"
) )
func init() { var bt *i2ctest.BusTest
// Make sure periph is initialized.
if _, err := host.Init(); err != nil {
log.Fatal(err)
}
}
func TestGroup(t *testing.T) { const (
liveTest = false
)
// Open default I²C bus. func TestGroup(t *testing.T) {
bus, err := i2creg.Open("") bus := i2ctest.Playback{Ops: recordingData["TestGroup"]}
if err != nil { extender, err := NewI2C(&bus, MCP23008, 0x20)
log.Fatalf("failed to open I²C: %v", err)
}
defer bus.Close()
extender, err := NewI2C(bus, MCP23008, 0x20)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
for portnum, port := range extender.Pins { for portnum, port := range extender.Pins {
for _, pin := range port { for _, pin := range port {
t.Logf("Port: %d Pin: %d %s", portnum, pin.Number(), pin) t.Logf("Port: %d Pin: %d %s", portnum, pin.Number(), pin)
} }
} }
// My Test fixture has an led on pin 0, and also wires pin 0 -> pin 4. // The test fixture has an led on pin 0, and also wires pin 0 -> pin 4.
// If I don't set pin 4 for input, then it breaks the LED blinking. // If I don't set pin 4 for input, then it breaks the LED blinking.
// It's not important to the test, but it's nice to have a visual indicator.
reader, _ := interface{}(extender.Pins[0][4]).(gpio.PinIn) reader, _ := interface{}(extender.Pins[0][4]).(gpio.PinIn)
_ = reader.In(gpio.PullNoChange, gpio.NoEdge) _ = reader.In(gpio.PullNoChange, gpio.NoEdge)
var ifpin interface{} = extender.Pins[0][0] var ifpin interface{} = extender.Pins[0][0]
@ -50,21 +42,21 @@ func TestGroup(t *testing.T) {
for range 20 { for range 20 {
writer.Out(l) writer.Out(l)
l = !l l = !l
if liveTest {
time.Sleep(500 * time.Millisecond) time.Sleep(500 * time.Millisecond)
} }
}
} else { } else {
t.Error("pin[0] not converted to gpio.PinOut!") t.Error("pin[0] not converted to gpio.PinOut!")
} }
} }
// TestReadWrite exercises the group Out()/Read() functions. It's expected
// that pin 0 of MCP23xxx port 0 is connected to pin 4 of port 0, pin 1
// is connected to pin 5, etc...
func TestReadWrite(t *testing.T) { func TestReadWrite(t *testing.T) {
// Open default I²C bus. bus := i2ctest.Playback{Ops: recordingData["TestReadWrite"]}
bus, err := i2creg.Open("") extender, err := NewI2C(&bus, MCP23008, 0x20)
if err != nil {
log.Fatalf("failed to open I²C: %v", err)
}
defer bus.Close()
extender, err := NewI2C(bus, MCP23008, 0x20)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -75,7 +67,7 @@ func TestReadWrite(t *testing.T) {
} }
gRead := *extender.Group(0, []int{4, 5, 6, 7}) gRead := *extender.Group(0, []int{4, 5, 6, 7})
if gRead == nil { if gRead == nil {
t.Error("gIn is nil!") t.Error("gRead is nil!")
} }
// Turn off the GPIOs // Turn off the GPIOs
defer gOut.Out(0, 0) defer gOut.Out(0, 0)
@ -93,7 +85,9 @@ func TestReadWrite(t *testing.T) {
if err != nil { if err != nil {
t.Error(err) t.Error(err)
} }
if liveTest {
time.Sleep(time.Millisecond) time.Sleep(time.Millisecond)
}
r, err := gRead.Read(defMask) r, err := gRead.Read(defMask)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
@ -128,5 +122,4 @@ func TestReadWrite(t *testing.T) {
t.Errorf("Error writing GPIO pins and reading back result. Read 0x%x Expected 0x%x", r, i) t.Errorf("Error writing GPIO pins and reading back result. Read 0x%x Expected 0x%x", r, i)
} }
} }
} }

Loading…
Cancel
Save