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  }