github.com/xiaoxu5271/can-go@v1.0.1/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  }