summaryrefslogtreecommitdiff
path: root/flag_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'flag_test.go')
-rw-r--r--flag_test.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/flag_test.go b/flag_test.go
index 0fb83c7..5b0df0e 100644
--- a/flag_test.go
+++ b/flag_test.go
@@ -143,6 +143,42 @@ func TestInitFlagSet(s *testing.T) {
})
}
+func TestParseProtobufEnum(s *testing.T) {
+ t := &core.T{T: s}
+
+ // That type and map emulate code generated by protoc.
+ type fakeEnum int32
+ values := map[string]int32{
+ "FAKE_UNKNOWN": 0,
+ "FOO": 1,
+ "BAR": 2,
+ }
+ parse := core.ParseProtobufEnum[fakeEnum](values)
+
+ t.Run("Match", func(t *core.T) {
+ val, err := parse("FOO")
+ t.AssertErrorIs(nil, err)
+ t.AssertEqual(fakeEnum(1), val)
+ })
+
+ t.Run("MatchCase", func(t *core.T) {
+ val, err := parse("Foo")
+ t.AssertErrorIs(nil, err)
+ t.AssertEqual(fakeEnum(1), val)
+ })
+
+ t.Run("UnknownValue", func(t *core.T) {
+ val, err := parse("BAZ")
+ var exp core.UnknownEnumValueError
+ if t.AssertErrorAs(&exp, err) {
+ t.AssertEqual("BAZ", exp.Actual)
+ sort.Strings(exp.Expected)
+ t.AssertEqual([]string{"BAR", "FAKE_UNKNOWN", "FOO"}, exp.Expected)
+ }
+ t.AssertEqual(fakeEnum(0), val)
+ })
+}
+
func TestParseStringEnum(s *testing.T) {
t := &core.T{T: s}
parse := core.ParseStringEnum("foo", "bar")