2018-09-12 23:46:59 -04:00
|
|
|
package gpio
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
"time"
|
2023-05-20 14:25:21 +02:00
|
|
|
|
2023-10-20 10:27:09 +02:00
|
|
|
"github.com/stretchr/testify/assert"
|
2018-09-12 23:46:59 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
stepAngle = 0.5 // use non int step angle to check int math
|
|
|
|
stepsPerRev = 720
|
|
|
|
)
|
|
|
|
|
2018-09-20 14:02:36 -04:00
|
|
|
var adapter *gpioTestAdaptor
|
|
|
|
|
2018-09-12 23:46:59 -04:00
|
|
|
func initEasyDriver() *EasyDriver {
|
2018-09-20 14:02:36 -04:00
|
|
|
adapter = newGpioTestAdaptor()
|
|
|
|
return NewEasyDriver(adapter, stepAngle, "1", "2", "3", "4")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriver_Connection(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, adapter, d.Connection())
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverDefaultName(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, strings.HasPrefix(d.Name(), "EasyDriver"))
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverSetName(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
|
|
|
d.SetName("OtherDriver")
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, strings.HasPrefix(d.Name(), "OtherDriver"))
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
2018-09-20 14:02:36 -04:00
|
|
|
func TestEasyDriverStart(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Start()
|
2018-09-20 14:02:36 -04:00
|
|
|
// noop - no error occurred
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverHalt(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Run()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, d.IsMoving())
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Halt()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.False(t, d.IsMoving())
|
2018-09-20 14:02:36 -04:00
|
|
|
}
|
|
|
|
|
2018-09-12 23:46:59 -04:00
|
|
|
func TestEasyDriverMove(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Move(2)
|
2018-09-12 23:46:59 -04:00
|
|
|
time.Sleep(2 * time.Millisecond)
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, 4, d.GetCurrentStep())
|
|
|
|
assert.False(t, d.IsMoving())
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverRun(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Run()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, d.IsMoving())
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Run()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, d.IsMoving())
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverStop(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Run()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, d.IsMoving())
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Stop()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.False(t, d.IsMoving())
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverStep(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Step()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, 1, d.GetCurrentStep())
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Step()
|
|
|
|
_ = d.Step()
|
|
|
|
_ = d.Step()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, 4, d.GetCurrentStep())
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.SetDirection("ccw")
|
|
|
|
_ = d.Step()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, 3, d.GetCurrentStep())
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverSetDirection(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, int8(1), d.dir)
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.SetDirection("cw")
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, int8(1), d.dir)
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.SetDirection("ccw")
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, int8(-1), d.dir)
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.SetDirection("nothing")
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, int8(1), d.dir)
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
2018-09-20 14:02:36 -04:00
|
|
|
func TestEasyDriverSetDirectionNoPin(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
|
|
|
d.dirPin = ""
|
|
|
|
err := d.SetDirection("cw")
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.NotNil(t, err)
|
2018-09-20 14:02:36 -04:00
|
|
|
}
|
|
|
|
|
2018-09-12 23:46:59 -04:00
|
|
|
func TestEasyDriverSetSpeed(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, uint(stepsPerRev/4), d.rpm) // default speed of 720/4
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.SetSpeed(0)
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, uint(1), d.rpm)
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.SetSpeed(200)
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, uint(200), d.rpm)
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.SetSpeed(1000)
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, uint(stepsPerRev), d.rpm)
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverGetMaxSpeed(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.Equal(t, uint(stepsPerRev), d.GetMaxSpeed())
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverSleep(t *testing.T) {
|
|
|
|
// let's test basic functionality
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Sleep()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, d.IsSleeping())
|
2018-09-12 23:46:59 -04:00
|
|
|
|
|
|
|
// let's make sure it stops first
|
|
|
|
d = initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Run()
|
|
|
|
_ = d.Sleep()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, d.IsSleeping())
|
|
|
|
assert.False(t, d.IsMoving())
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
2018-09-20 14:02:36 -04:00
|
|
|
func TestEasyDriverSleepNoPin(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
|
|
|
d.sleepPin = ""
|
|
|
|
err := d.Sleep()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.NotNil(t, err)
|
2018-09-20 14:02:36 -04:00
|
|
|
err = d.Wake()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.NotNil(t, err)
|
2018-09-20 14:02:36 -04:00
|
|
|
}
|
|
|
|
|
2018-09-12 23:46:59 -04:00
|
|
|
func TestEasyDriverWake(t *testing.T) {
|
|
|
|
// let's test basic functionality
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Sleep()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, d.IsSleeping())
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Wake()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.False(t, d.IsSleeping())
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|
|
|
|
|
2018-09-20 14:02:36 -04:00
|
|
|
func TestEasyDriverEnable(t *testing.T) {
|
|
|
|
// let's test basic functionality
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Disable()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.False(t, d.IsEnabled())
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Enable()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.True(t, d.IsEnabled())
|
2018-09-20 14:02:36 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEasyDriverEnableNoPin(t *testing.T) {
|
|
|
|
d := initEasyDriver()
|
|
|
|
d.enPin = ""
|
|
|
|
err := d.Disable()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.NotNil(t, err)
|
2018-09-20 14:02:36 -04:00
|
|
|
err = d.Enable()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.NotNil(t, err)
|
2018-09-20 14:02:36 -04:00
|
|
|
}
|
|
|
|
|
2018-09-12 23:46:59 -04:00
|
|
|
func TestEasyDriverDisable(t *testing.T) {
|
|
|
|
// let's test basic functionality
|
|
|
|
d := initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Disable()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.False(t, d.IsEnabled())
|
2018-09-12 23:46:59 -04:00
|
|
|
|
|
|
|
// let's make sure it stops first
|
|
|
|
d = initEasyDriver()
|
2023-06-12 19:51:25 +02:00
|
|
|
_ = d.Run()
|
|
|
|
_ = d.Disable()
|
2023-10-20 10:27:09 +02:00
|
|
|
assert.False(t, d.IsEnabled())
|
|
|
|
assert.False(t, d.IsMoving())
|
2018-09-12 23:46:59 -04:00
|
|
|
}
|