87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
|
package generator
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
func TestDecodePath(t *testing.T) {
|
||
|
scenarios := []struct {
|
||
|
path string
|
||
|
expectedPath []uint32
|
||
|
expectedStartingPoint startingPoint
|
||
|
err error
|
||
|
}{
|
||
|
{
|
||
|
path: "",
|
||
|
expectedPath: []uint32{},
|
||
|
expectedStartingPoint: startingPointCurrent,
|
||
|
},
|
||
|
{
|
||
|
path: "1",
|
||
|
expectedPath: []uint32{1},
|
||
|
expectedStartingPoint: startingPointCurrent,
|
||
|
},
|
||
|
{
|
||
|
path: "..",
|
||
|
expectedPath: []uint32{},
|
||
|
expectedStartingPoint: startingPointParent,
|
||
|
},
|
||
|
{
|
||
|
path: "m",
|
||
|
expectedPath: []uint32{},
|
||
|
expectedStartingPoint: startingPointMaster,
|
||
|
},
|
||
|
{
|
||
|
path: "m/1",
|
||
|
expectedPath: []uint32{1},
|
||
|
expectedStartingPoint: startingPointMaster,
|
||
|
},
|
||
|
{
|
||
|
path: "m/1/2",
|
||
|
expectedPath: []uint32{1, 2},
|
||
|
expectedStartingPoint: startingPointMaster,
|
||
|
},
|
||
|
{
|
||
|
path: "m/1/2'/3",
|
||
|
expectedPath: []uint32{1, 2147483650, 3},
|
||
|
expectedStartingPoint: startingPointMaster,
|
||
|
},
|
||
|
{
|
||
|
path: "m/",
|
||
|
err: fmt.Errorf("error parsing derivation path m/; at position 2, expected number, got EOF"),
|
||
|
},
|
||
|
{
|
||
|
path: "m/1//2",
|
||
|
err: fmt.Errorf("error parsing derivation path m/1//2; at position 5, expected number, got /"),
|
||
|
},
|
||
|
{
|
||
|
path: "m/1'2",
|
||
|
err: fmt.Errorf("error parsing derivation path m/1'2; at position 5, expected /, got 2"),
|
||
|
},
|
||
|
{
|
||
|
path: "m/'/2",
|
||
|
err: fmt.Errorf("error parsing derivation path m/'/2; at position 3, expected number, got '"),
|
||
|
},
|
||
|
{
|
||
|
path: "m/2147483648",
|
||
|
err: fmt.Errorf("error parsing derivation path m/2147483648; at position 3, index must be lower than 2^31, got 2147483648"),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for i, s := range scenarios {
|
||
|
t.Run(fmt.Sprintf("scenario %d", i), func(t *testing.T) {
|
||
|
startingP, path, err := decodePath(s.path)
|
||
|
if s.err == nil {
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, s.expectedStartingPoint, startingP)
|
||
|
assert.Equal(t, s.expectedPath, path)
|
||
|
} else {
|
||
|
assert.Equal(t, s.err, err)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|