package enum import ( "fmt" "testing" "github.com/alta/protopatch/tests" ) func TestKind(t *testing.T) { tests.ValidateEnum(t, Kind(0), Kind_name, Kind_value) enums := []Kind{ Kind_INVALID, Kind_CHEAP, Kind_FAST, Kind_GOOD, } for index, enum := range enums { if got, want := enum, Kind(index); got != want { t.Errorf("%T(%d) != %v", got, got, want) } } } func TestNestedEnums(t *testing.T) { tests.ValidateEnum(t, Outer_Route(0), Outer_Route_name, Outer_Route_value) tests.ValidateEnum(t, Outer_Middle_Flavor(0), Outer_Middle_Flavor_name, Outer_Middle_Flavor_value) tests.ValidateEnum(t, Outer_Middle_Inner_Arch(0), Outer_Middle_Inner_Arch_name, Outer_Middle_Inner_Arch_value) } func TestRenamedEnum(t *testing.T) { tests.ValidateEnum(t, Flavour(0), Flavour_name, Flavour_value) enums := []Flavour{ Flavour_INVALID, Flavour_SWEET, Flavour_SALTY, Flavour_SOUR, Flavour_BITTER, } for index, enum := range enums { if got, want := enum, Flavour(index); got != want { t.Errorf("%T(%d) != %v", got, got, want) } } } func TestRenamedEnumValue(t *testing.T) { tests.ValidateEnum(t, Level(0), Level_name, Level_value) enums := []Level{ LevelSimple, Level_COMPLEX, } for index, enum := range enums { if got, want := enum, Level(index); got != want { t.Errorf("%T(%d) != %v", got, got, want) } } } func TestRenamedNestedEnumValue(t *testing.T) { tests.ValidateEnum(t, RenamedNested(0), RenamedNested_name, RenamedNested_value) enums := []RenamedNested{ RenamedValueInvalid, RenamedValueA, RenamedValueB, RenamedValueC, } for index, enum := range enums { if got, want := enum, RenamedNested(index); got != want { t.Errorf("%T(%d) != %v", got, got, want) } } } func TestRenamedOuterMessage(t *testing.T) { m := &Wrapper{} tests.ValidateMessage(t, m) tests.ValidateEnum(t, Holiday_Route(0), Holiday_Route_name, Holiday_Route_value) enums := []Holiday_Route{ Holiday_INVALID, Holiday_FAST, Holiday_SLOW, Holiday_SCENIC, } for index, enum := range enums { if got, want := enum, Holiday_Route(index); got != want { t.Errorf("%T(%d) != %v", got, got, want) } } } func TestCustomStringerEnum(t *testing.T) { tests := []struct { enum CustomStringerEnum original string patched string }{ {0, "CUSTOM_STRINGER_INVALID", "custom_stringer_invalid"}, {1, "CUSTOM_STRINGER_A", "custom_stringer_a"}, {2, "CUSTOM_STRINGER_B", "custom_stringer_b"}, {3, "CUSTOM_STRINGER_C", "custom_stringer_c"}, } for _, tt := range tests { name := fmt.Sprintf("enum(%d)/%s/%s", int32(tt.enum), tt.original, tt.patched) t.Run(name, func(t *testing.T) { if s := tt.enum.OrigString(); s != tt.original { t.Errorf("%T(%d) incorrect original string %q != %q", tt.enum, tt.enum, s, tt.original) } if s := tt.enum.String(); s != tt.patched { t.Errorf("%T(%d) incorrect patched string %q != %q", tt.enum, tt.enum, s, tt.patched) } }) } } func TestDeprecatedStringerEnum(t *testing.T) { tests := []struct { enum DeprecatedStringerEnum original string patched string }{ {0, "DEPRECATED_STRINGER_INVALID", "deprecated_stringer_invalid"}, {1, "DEPRECATED_STRINGER_A", "deprecated_stringer_a"}, {2, "DEPRECATED_STRINGER_B", "deprecated_stringer_b"}, {3, "DEPRECATED_STRINGER_C", "deprecated_stringer_c"}, } for _, tt := range tests { name := fmt.Sprintf("enum(%d)/%s/%s", int32(tt.enum), tt.original, tt.patched) t.Run(name, func(t *testing.T) { if s := tt.enum.OrigString(); s != tt.original { t.Errorf("%T(%d) incorrect original string %q != %q", tt.enum, tt.enum, s, tt.original) } if s := tt.enum.String(); s != tt.patched { t.Errorf("%T(%d) incorrect patched string %q != %q", tt.enum, tt.enum, s, tt.patched) } }) } } func TestDefaultStringerEnum(t *testing.T) { e := DefaultStringerEnum(0) if got, want := e.String(), "DEFAULT_STRINGER_UNSET"; got != want { t.Errorf("%T(%d) incorrect original string %q != %q", e, e, got, want) } }