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 }