2014-04-26 18:07:04 -07:00
|
|
|
package sphero
|
2014-04-26 03:11:51 -07:00
|
|
|
|
|
|
|
import (
|
2014-12-25 09:26:29 -08:00
|
|
|
"bytes"
|
|
|
|
"encoding/binary"
|
2017-02-02 16:46:25 +01:00
|
|
|
"strings"
|
2014-06-13 14:26:18 -07:00
|
|
|
"testing"
|
2014-09-07 18:38:17 -06:00
|
|
|
|
2016-12-08 13:24:03 +01:00
|
|
|
"gobot.io/x/gobot"
|
|
|
|
"gobot.io/x/gobot/gobottest"
|
2014-04-26 03:11:51 -07:00
|
|
|
)
|
|
|
|
|
2016-08-27 11:56:01 +02:00
|
|
|
var _ gobot.Driver = (*SpheroDriver)(nil)
|
|
|
|
|
2014-06-13 16:01:39 -07:00
|
|
|
func initTestSpheroDriver() *SpheroDriver {
|
2017-04-02 23:50:07 +02:00
|
|
|
a, _ := initTestSpheroAdaptor()
|
|
|
|
a.Connect()
|
2016-10-01 18:52:58 +02:00
|
|
|
return NewSpheroDriver(a)
|
2014-06-13 14:26:18 -07:00
|
|
|
}
|
2014-04-26 03:11:51 -07:00
|
|
|
|
2017-04-06 11:16:48 +02:00
|
|
|
func TestSpheroDriverName(t *testing.T) {
|
|
|
|
d := initTestSpheroDriver()
|
|
|
|
gobottest.Assert(t, strings.HasPrefix(d.Name(), "Sphero"), true)
|
|
|
|
d.SetName("NewName")
|
|
|
|
gobottest.Assert(t, d.Name(), "NewName")
|
|
|
|
}
|
|
|
|
|
2014-12-17 14:32:12 -08:00
|
|
|
func TestSpheroDriver(t *testing.T) {
|
|
|
|
d := initTestSpheroDriver()
|
|
|
|
var ret interface{}
|
|
|
|
|
|
|
|
ret = d.Command("SetRGB")(
|
|
|
|
map[string]interface{}{"r": 100.0, "g": 100.0, "b": 100.0},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-17 14:32:12 -08:00
|
|
|
|
|
|
|
ret = d.Command("Roll")(
|
|
|
|
map[string]interface{}{"speed": 100.0, "heading": 100.0},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-17 14:32:12 -08:00
|
|
|
|
|
|
|
ret = d.Command("SetBackLED")(
|
|
|
|
map[string]interface{}{"level": 100.0},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-17 14:32:12 -08:00
|
|
|
|
2014-12-28 16:48:45 -08:00
|
|
|
ret = d.Command("ConfigureLocator")(
|
|
|
|
map[string]interface{}{"Flags": 1.0, "X": 100.0, "Y": 100.0, "YawTare": 100.0},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-28 16:48:45 -08:00
|
|
|
|
2014-12-17 14:32:12 -08:00
|
|
|
ret = d.Command("SetHeading")(
|
|
|
|
map[string]interface{}{"heading": 100.0},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-17 14:32:12 -08:00
|
|
|
|
2014-12-28 16:48:45 -08:00
|
|
|
ret = d.Command("SetRotationRate")(
|
|
|
|
map[string]interface{}{"level": 100.0},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-28 16:48:45 -08:00
|
|
|
|
2014-12-17 14:32:12 -08:00
|
|
|
ret = d.Command("SetStabilization")(
|
|
|
|
map[string]interface{}{"enable": true},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-17 14:32:12 -08:00
|
|
|
|
2014-12-28 16:48:45 -08:00
|
|
|
ret = d.Command("SetStabilization")(
|
|
|
|
map[string]interface{}{"enable": false},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-28 16:48:45 -08:00
|
|
|
|
2014-12-17 14:32:12 -08:00
|
|
|
ret = d.Command("Stop")(nil)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-17 14:32:12 -08:00
|
|
|
|
|
|
|
ret = d.Command("GetRGB")(nil)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret.([]byte), []byte{})
|
2014-12-17 14:32:12 -08:00
|
|
|
|
2014-12-28 16:48:45 -08:00
|
|
|
ret = d.Command("ReadLocator")(nil)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, []int16{})
|
2014-12-28 16:48:45 -08:00
|
|
|
|
2017-02-02 16:46:25 +01:00
|
|
|
gobottest.Assert(t, strings.HasPrefix(d.Name(), "Sphero"), true)
|
|
|
|
gobottest.Assert(t, strings.HasPrefix(d.Connection().Name(), "Sphero"), true)
|
2014-12-17 14:32:12 -08:00
|
|
|
}
|
|
|
|
|
2014-06-13 16:01:39 -07:00
|
|
|
func TestSpheroDriverStart(t *testing.T) {
|
|
|
|
d := initTestSpheroDriver()
|
2016-11-07 20:15:07 +01:00
|
|
|
gobottest.Assert(t, d.Start(), nil)
|
2014-06-13 14:26:18 -07:00
|
|
|
}
|
|
|
|
|
2014-06-13 16:01:39 -07:00
|
|
|
func TestSpheroDriverHalt(t *testing.T) {
|
|
|
|
d := initTestSpheroDriver()
|
2014-12-23 07:00:23 -08:00
|
|
|
d.adaptor().connected = true
|
2016-11-07 20:15:07 +01:00
|
|
|
gobottest.Assert(t, d.Halt(), nil)
|
2014-06-13 14:26:18 -07:00
|
|
|
}
|
2014-09-07 18:38:17 -06:00
|
|
|
|
2014-12-25 09:26:29 -08:00
|
|
|
func TestSpheroDriverSetDataStreaming(t *testing.T) {
|
|
|
|
d := initTestSpheroDriver()
|
|
|
|
d.SetDataStreaming(DefaultDataStreamingConfig())
|
|
|
|
|
|
|
|
data := <-d.packetChannel
|
|
|
|
|
|
|
|
buf := new(bytes.Buffer)
|
|
|
|
binary.Write(buf, binary.BigEndian, DefaultDataStreamingConfig())
|
|
|
|
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, data.body, buf.Bytes())
|
2014-12-25 09:26:29 -08:00
|
|
|
|
|
|
|
ret := d.Command("SetDataStreaming")(
|
|
|
|
map[string]interface{}{
|
|
|
|
"N": 100.0,
|
|
|
|
"M": 200.0,
|
|
|
|
"Mask": 300.0,
|
|
|
|
"Pcnt": 255.0,
|
|
|
|
"Mask2": 400.0,
|
|
|
|
},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-25 09:26:29 -08:00
|
|
|
data = <-d.packetChannel
|
|
|
|
|
|
|
|
dconfig := DataStreamingConfig{N: 100, M: 200, Mask: 300, Pcnt: 255, Mask2: 400}
|
|
|
|
buf = new(bytes.Buffer)
|
|
|
|
binary.Write(buf, binary.BigEndian, dconfig)
|
|
|
|
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, data.body, buf.Bytes())
|
2014-12-25 09:26:29 -08:00
|
|
|
}
|
|
|
|
|
2014-12-28 16:48:45 -08:00
|
|
|
func TestConfigureLocator(t *testing.T) {
|
|
|
|
d := initTestSpheroDriver()
|
|
|
|
d.ConfigureLocator(DefaultLocatorConfig())
|
|
|
|
data := <-d.packetChannel
|
|
|
|
|
|
|
|
buf := new(bytes.Buffer)
|
|
|
|
binary.Write(buf, binary.BigEndian, DefaultLocatorConfig())
|
|
|
|
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, data.body, buf.Bytes())
|
2014-12-28 16:48:45 -08:00
|
|
|
|
|
|
|
ret := d.Command("ConfigureLocator")(
|
|
|
|
map[string]interface{}{
|
|
|
|
"Flags": 1.0,
|
|
|
|
"X": 100.0,
|
|
|
|
"Y": 100.0,
|
|
|
|
"YawTare": 0.0,
|
|
|
|
},
|
|
|
|
)
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, ret, nil)
|
2014-12-28 16:48:45 -08:00
|
|
|
data = <-d.packetChannel
|
|
|
|
|
|
|
|
lconfig := LocatorConfig{Flags: 1, X: 100, Y: 100, YawTare: 0}
|
|
|
|
buf = new(bytes.Buffer)
|
|
|
|
binary.Write(buf, binary.BigEndian, lconfig)
|
|
|
|
|
2016-02-22 00:21:24 -05:00
|
|
|
gobottest.Assert(t, data.body, buf.Bytes())
|
2014-12-28 16:48:45 -08:00
|
|
|
}
|
|
|
|
|
2014-09-07 18:38:17 -06:00
|
|
|
func TestCalculateChecksum(t *testing.T) {
|
|
|
|
tests := []struct {
|
|
|
|
data []byte
|
|
|
|
checksum byte
|
|
|
|
}{
|
|
|
|
{[]byte{0x00}, 0xff},
|
|
|
|
{[]byte{0xf0, 0x0f}, 0x00},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tt := range tests {
|
|
|
|
actual := calculateChecksum(tt.data)
|
|
|
|
if actual != tt.checksum {
|
|
|
|
t.Errorf("Expected %x, got %x for data %x.", tt.checksum, actual, tt.data)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|