gobot.io/x/gobot/v2@v2.1.0/platforms/leap/leap_motion_driver_test.go (about)

     1  package leap
     2  
     3  import (
     4  	"errors"
     5  	"io"
     6  	"io/ioutil"
     7  	"strings"
     8  	"sync"
     9  	"testing"
    10  
    11  	"gobot.io/x/gobot/v2"
    12  	"gobot.io/x/gobot/v2/gobottest"
    13  )
    14  
    15  var _ gobot.Driver = (*Driver)(nil)
    16  
    17  type NullReadWriteCloser struct {
    18  	mtx        sync.Mutex
    19  	writeError error
    20  }
    21  
    22  func (n *NullReadWriteCloser) WriteError(e error) {
    23  	n.mtx.Lock()
    24  	defer n.mtx.Unlock()
    25  	n.writeError = e
    26  }
    27  
    28  func (n *NullReadWriteCloser) Write(p []byte) (int, error) {
    29  	n.mtx.Lock()
    30  	defer n.mtx.Unlock()
    31  	return len(p), n.writeError
    32  }
    33  func (n *NullReadWriteCloser) Read(b []byte) (int, error) {
    34  	return len(b), nil
    35  }
    36  func (n *NullReadWriteCloser) Close() error {
    37  	return nil
    38  }
    39  
    40  func initTestLeapMotionDriver() (*Driver, *NullReadWriteCloser) {
    41  	a := NewAdaptor("")
    42  	rwc := &NullReadWriteCloser{}
    43  	a.connect = func(port string) (io.ReadWriteCloser, error) {
    44  		return rwc, nil
    45  	}
    46  	a.Connect()
    47  
    48  	d := NewDriver(a)
    49  	d.receive = func(ws io.ReadWriteCloser, buf *[]byte) {
    50  		file, _ := ioutil.ReadFile("./test/support/example_frame.json")
    51  		copy(*buf, file)
    52  	}
    53  	return d, rwc
    54  }
    55  
    56  func TestLeapMotionDriver(t *testing.T) {
    57  	d, _ := initTestLeapMotionDriver()
    58  	gobottest.Refute(t, d.Connection(), nil)
    59  }
    60  
    61  func TestLeapMotionDriverName(t *testing.T) {
    62  	d, _ := initTestLeapMotionDriver()
    63  	gobottest.Assert(t, strings.HasPrefix(d.Name(), "Leap"), true)
    64  	d.SetName("NewName")
    65  	gobottest.Assert(t, d.Name(), "NewName")
    66  }
    67  
    68  func TestLeapMotionDriverStart(t *testing.T) {
    69  	d, _ := initTestLeapMotionDriver()
    70  	gobottest.Assert(t, d.Start(), nil)
    71  
    72  	d2, rwc := initTestLeapMotionDriver()
    73  	e := errors.New("write error")
    74  	rwc.WriteError(e)
    75  	gobottest.Assert(t, d2.Start(), e)
    76  }
    77  
    78  func TestLeapMotionDriverHalt(t *testing.T) {
    79  	d, _ := initTestLeapMotionDriver()
    80  	gobottest.Assert(t, d.Halt(), nil)
    81  }
    82  
    83  func TestLeapMotionDriverParser(t *testing.T) {
    84  	d, _ := initTestLeapMotionDriver()
    85  	file, _ := ioutil.ReadFile("./test/support/example_frame.json")
    86  	parsedFrame := d.ParseFrame(file)
    87  
    88  	if parsedFrame.Hands == nil || parsedFrame.Pointables == nil || parsedFrame.Gestures == nil {
    89  		t.Errorf("ParseFrame incorrectly parsed frame")
    90  	}
    91  
    92  	gobottest.Assert(t, parsedFrame.Timestamp, uint64(134211791358))
    93  	gobottest.Assert(t, parsedFrame.Hands[0].X(), 247.410)
    94  	gobottest.Assert(t, parsedFrame.Hands[0].Y(), 275.868)
    95  	gobottest.Assert(t, parsedFrame.Hands[0].Z(), 132.843)
    96  
    97  	gobottest.Assert(t, parsedFrame.Pointables[0].BTipPosition[0], 214.293)
    98  	gobottest.Assert(t, parsedFrame.Pointables[0].BTipPosition[1], 213.865)
    99  	gobottest.Assert(t, parsedFrame.Pointables[0].BTipPosition[2], 95.0224)
   100  
   101  	gobottest.Assert(t, parsedFrame.Pointables[0].Bases[0][0][0], -0.468069)
   102  	gobottest.Assert(t, parsedFrame.Pointables[0].Bases[0][0][1], 0.807844)
   103  	gobottest.Assert(t, parsedFrame.Pointables[0].Bases[0][0][2], -0.358190)
   104  
   105  	gobottest.Assert(t, parsedFrame.Pointables[0].Width, 19.7871)
   106  }