github.com/blueinnovationsgroup/can-go@v0.0.0-20230518195432-d0567cda0028/frame_string_test.go (about) 1 package can 2 3 import ( 4 "fmt" 5 "testing" 6 7 "gotest.tools/v3/assert" 8 is "gotest.tools/v3/assert/cmp" 9 ) 10 11 func TestFrame_String(t *testing.T) { 12 for _, tt := range []struct { 13 frame Frame 14 str string 15 }{ 16 { 17 frame: Frame{ 18 ID: 0x62e, 19 Length: 2, 20 Data: Data{0x10, 0x44}, 21 }, 22 str: "62E#1044", 23 }, 24 { 25 frame: Frame{ 26 ID: 0x410, 27 IsRemote: true, 28 Length: 3, 29 }, 30 str: "410#R3", 31 }, 32 { 33 frame: Frame{ 34 ID: 0xd2, 35 Length: 2, 36 Data: Data{0xf0, 0x31}, 37 }, 38 str: "0D2#F031", 39 }, 40 { 41 frame: Frame{ID: 0xee}, 42 str: "0EE#", 43 }, 44 { 45 frame: Frame{ID: 0}, 46 str: "000#", 47 }, 48 { 49 frame: Frame{ID: 0, IsExtended: true}, 50 str: "00000000#", 51 }, 52 { 53 frame: Frame{ID: 0x1234abcd, IsExtended: true}, 54 str: "1234ABCD#", 55 }, 56 } { 57 tt := tt 58 t.Run(fmt.Sprintf("String|frame=%v,str=%v", tt.frame, tt.str), func(t *testing.T) { 59 assert.Check(t, is.Equal(tt.str, tt.frame.String())) 60 }) 61 t.Run(fmt.Sprintf("UnmarshalString|frame=%v,str=%v", tt.frame, tt.str), func(t *testing.T) { 62 var actual Frame 63 if err := actual.UnmarshalString(tt.str); err != nil { 64 t.Fatal(err) 65 } 66 assert.Check(t, is.DeepEqual(actual, tt.frame)) 67 }) 68 } 69 } 70 71 func TestParseFrame_Errors(t *testing.T) { 72 for _, tt := range []string{ 73 "foo", // invalid 74 "foo#", // invalid ID 75 "0D23#F031", // invalid ID length 76 "62E#104400000000000000", // invalid data length 77 } { 78 tt := tt 79 t.Run(fmt.Sprintf("str=%v", tt), func(t *testing.T) { 80 var frame Frame 81 err := frame.UnmarshalString(tt) 82 assert.ErrorContains(t, err, "invalid") 83 assert.Check(t, is.DeepEqual(Frame{}, frame)) 84 }) 85 } 86 }