package cpe import ( "testing" ) func TestNewPart(t *testing.T) { passTests := []struct { name string val token exp Part } {{ name: "any", val: token { Type: anyToken }, exp: AnyPart, }, { name: "na", val: token { Type: naToken }, exp: NAPart, }, { name: "a", val: token { Type: valToken, Val: "a" }, exp: ApplicationPart, }, { name: "h", val: token { Type: valToken, Val: "h" }, exp: HardwarePart, }, { name: "o", val: token { Type: valToken, Val: "o" }, exp: OperatingSystemPart, }} for _, test := range(passTests) { t.Run(test.name, func(t *testing.T) { if got, err := newPart(test.val); err != nil { t.Error(err) } else if got != test.exp { t.Errorf("got %s, exp %s", got, test.exp) } }) } failTests := []struct { name string val token exp string } {{ name: "invalid token", val: token { Type: valToken, Val: "foo" }, exp: "unknown part: \"foo\"", }, { name: "empty token", val: token { Type: valToken }, exp: "unknown part: \"\"", }, { name: "unknown token type", val: token { Type: tokenType(255) }, exp: "unknown token type: 0xff", }} for _, test := range(failTests) { t.Run(test.name, func(t *testing.T) { // tokenize, check for error got, err := newPart(test.val) if err == nil { t.Errorf("got %v, exp error", got) } else if err.Error() != test.exp { t.Errorf("got \"%s\", exp \"%s\"", err.Error(), test.exp) } }) } } func TestPartString(t *testing.T) { tests := []struct { val Part exp string } {{ val: AnyPart, exp: "*", }, { val: NAPart, exp: "-", }, { val: ApplicationPart, exp: "a", }, { val: HardwarePart, exp: "h", }, { val: OperatingSystemPart, exp: "o", }, { val: Part(255), exp: "Part(255)", }} for _, test := range(tests) { t.Run(test.exp, func(t *testing.T) { got := test.val.String() if got != test.exp { t.Errorf("got \"%s\", exp \"%s\"", got, test.exp) } }) } }