gobot.io/x/gobot/v2@v2.1.0/platforms/sphero/sphero_driver_test.go (about) 1 package sphero 2 3 import ( 4 "bytes" 5 "encoding/binary" 6 "strings" 7 "testing" 8 9 "gobot.io/x/gobot/v2" 10 "gobot.io/x/gobot/v2/gobottest" 11 ) 12 13 var _ gobot.Driver = (*SpheroDriver)(nil) 14 15 func initTestSpheroDriver() *SpheroDriver { 16 a, _ := initTestSpheroAdaptor() 17 a.Connect() 18 return NewSpheroDriver(a) 19 } 20 21 func TestSpheroDriverName(t *testing.T) { 22 d := initTestSpheroDriver() 23 gobottest.Assert(t, strings.HasPrefix(d.Name(), "Sphero"), true) 24 d.SetName("NewName") 25 gobottest.Assert(t, d.Name(), "NewName") 26 } 27 28 func TestSpheroDriver(t *testing.T) { 29 d := initTestSpheroDriver() 30 var ret interface{} 31 32 ret = d.Command("SetRGB")( 33 map[string]interface{}{"r": 100.0, "g": 100.0, "b": 100.0}, 34 ) 35 gobottest.Assert(t, ret, nil) 36 37 ret = d.Command("Roll")( 38 map[string]interface{}{"speed": 100.0, "heading": 100.0}, 39 ) 40 gobottest.Assert(t, ret, nil) 41 42 ret = d.Command("SetBackLED")( 43 map[string]interface{}{"level": 100.0}, 44 ) 45 gobottest.Assert(t, ret, nil) 46 47 ret = d.Command("ConfigureLocator")( 48 map[string]interface{}{"Flags": 1.0, "X": 100.0, "Y": 100.0, "YawTare": 100.0}, 49 ) 50 gobottest.Assert(t, ret, nil) 51 52 ret = d.Command("SetHeading")( 53 map[string]interface{}{"heading": 100.0}, 54 ) 55 gobottest.Assert(t, ret, nil) 56 57 ret = d.Command("SetRotationRate")( 58 map[string]interface{}{"level": 100.0}, 59 ) 60 gobottest.Assert(t, ret, nil) 61 62 ret = d.Command("SetStabilization")( 63 map[string]interface{}{"enable": true}, 64 ) 65 gobottest.Assert(t, ret, nil) 66 67 ret = d.Command("SetStabilization")( 68 map[string]interface{}{"enable": false}, 69 ) 70 gobottest.Assert(t, ret, nil) 71 72 ret = d.Command("Stop")(nil) 73 gobottest.Assert(t, ret, nil) 74 75 ret = d.Command("GetRGB")(nil) 76 gobottest.Assert(t, ret.([]byte), []byte{}) 77 78 ret = d.Command("ReadLocator")(nil) 79 gobottest.Assert(t, ret, []int16{}) 80 81 gobottest.Assert(t, strings.HasPrefix(d.Name(), "Sphero"), true) 82 gobottest.Assert(t, strings.HasPrefix(d.Connection().Name(), "Sphero"), true) 83 } 84 85 func TestSpheroDriverStart(t *testing.T) { 86 d := initTestSpheroDriver() 87 gobottest.Assert(t, d.Start(), nil) 88 } 89 90 func TestSpheroDriverHalt(t *testing.T) { 91 d := initTestSpheroDriver() 92 d.adaptor().connected = true 93 gobottest.Assert(t, d.Halt(), nil) 94 } 95 96 func TestSpheroDriverSetDataStreaming(t *testing.T) { 97 d := initTestSpheroDriver() 98 d.SetDataStreaming(DefaultDataStreamingConfig()) 99 100 data := <-d.packetChannel 101 102 buf := new(bytes.Buffer) 103 binary.Write(buf, binary.BigEndian, DefaultDataStreamingConfig()) 104 105 gobottest.Assert(t, data.body, buf.Bytes()) 106 107 ret := d.Command("SetDataStreaming")( 108 map[string]interface{}{ 109 "N": 100.0, 110 "M": 200.0, 111 "Mask": 300.0, 112 "Pcnt": 255.0, 113 "Mask2": 400.0, 114 }, 115 ) 116 gobottest.Assert(t, ret, nil) 117 data = <-d.packetChannel 118 119 dconfig := DataStreamingConfig{N: 100, M: 200, Mask: 300, Pcnt: 255, Mask2: 400} 120 buf = new(bytes.Buffer) 121 binary.Write(buf, binary.BigEndian, dconfig) 122 123 gobottest.Assert(t, data.body, buf.Bytes()) 124 } 125 126 func TestConfigureLocator(t *testing.T) { 127 d := initTestSpheroDriver() 128 d.ConfigureLocator(DefaultLocatorConfig()) 129 data := <-d.packetChannel 130 131 buf := new(bytes.Buffer) 132 binary.Write(buf, binary.BigEndian, DefaultLocatorConfig()) 133 134 gobottest.Assert(t, data.body, buf.Bytes()) 135 136 ret := d.Command("ConfigureLocator")( 137 map[string]interface{}{ 138 "Flags": 1.0, 139 "X": 100.0, 140 "Y": 100.0, 141 "YawTare": 0.0, 142 }, 143 ) 144 gobottest.Assert(t, ret, nil) 145 data = <-d.packetChannel 146 147 lconfig := LocatorConfig{Flags: 1, X: 100, Y: 100, YawTare: 0} 148 buf = new(bytes.Buffer) 149 binary.Write(buf, binary.BigEndian, lconfig) 150 151 gobottest.Assert(t, data.body, buf.Bytes()) 152 } 153 154 func TestCalculateChecksum(t *testing.T) { 155 tests := []struct { 156 data []byte 157 checksum byte 158 }{ 159 {[]byte{0x00}, 0xff}, 160 {[]byte{0xf0, 0x0f}, 0x00}, 161 } 162 163 for _, tt := range tests { 164 actual := calculateChecksum(tt.data) 165 if actual != tt.checksum { 166 t.Errorf("Expected %x, got %x for data %x.", tt.checksum, actual, tt.data) 167 } 168 } 169 }