87 lines
1.7 KiB
Go
87 lines
1.7 KiB
Go
package can
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"gotest.tools/v3/assert"
|
|
is "gotest.tools/v3/assert/cmp"
|
|
)
|
|
|
|
func TestFrame_String(t *testing.T) {
|
|
for _, tt := range []struct {
|
|
frame Frame
|
|
str string
|
|
}{
|
|
{
|
|
frame: Frame{
|
|
ID: 0x62e,
|
|
Length: 2,
|
|
Data: Data{0x10, 0x44},
|
|
},
|
|
str: "62E#1044",
|
|
},
|
|
{
|
|
frame: Frame{
|
|
ID: 0x410,
|
|
IsRemote: true,
|
|
Length: 3,
|
|
},
|
|
str: "410#R3",
|
|
},
|
|
{
|
|
frame: Frame{
|
|
ID: 0xd2,
|
|
Length: 2,
|
|
Data: Data{0xf0, 0x31},
|
|
},
|
|
str: "0D2#F031",
|
|
},
|
|
{
|
|
frame: Frame{ID: 0xee},
|
|
str: "0EE#",
|
|
},
|
|
{
|
|
frame: Frame{ID: 0},
|
|
str: "000#",
|
|
},
|
|
{
|
|
frame: Frame{ID: 0, IsExtended: true},
|
|
str: "00000000#",
|
|
},
|
|
{
|
|
frame: Frame{ID: 0x1234abcd, IsExtended: true},
|
|
str: "1234ABCD#",
|
|
},
|
|
} {
|
|
tt := tt
|
|
t.Run(fmt.Sprintf("String|frame=%v,str=%v", tt.frame, tt.str), func(t *testing.T) {
|
|
assert.Check(t, is.Equal(tt.str, tt.frame.String()))
|
|
})
|
|
t.Run(fmt.Sprintf("UnmarshalString|frame=%v,str=%v", tt.frame, tt.str), func(t *testing.T) {
|
|
var actual Frame
|
|
if err := actual.UnmarshalString(tt.str); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Check(t, is.DeepEqual(actual, tt.frame))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParseFrame_Errors(t *testing.T) {
|
|
for _, tt := range []string{
|
|
"foo", // invalid
|
|
"foo#", // invalid ID
|
|
"0D23#F031", // invalid ID length
|
|
"62E#104400000000000000", // invalid data length
|
|
} {
|
|
tt := tt
|
|
t.Run(fmt.Sprintf("str=%v", tt), func(t *testing.T) {
|
|
var frame Frame
|
|
err := frame.UnmarshalString(tt)
|
|
assert.ErrorContains(t, err, "invalid")
|
|
assert.Check(t, is.DeepEqual(Frame{}, frame))
|
|
})
|
|
}
|
|
}
|