package args import ( "testing" "time" ) func TestNewArg(t *testing.T) { NewArg(INT, "key", "help", 5) } func TestGets(t *testing.T) { cases := []struct { t Type v interface{} ok bool }{ { t: STRING, v: 5, ok: false, }, { t: DURATION, v: 5, ok: false, }, { t: BOOL, v: 5, ok: false, }, { t: INT, v: "5", ok: false, }, { t: STRING, v: "5", ok: true, }, { t: DURATION, v: time.Duration(5), ok: true, }, { t: BOOL, v: true, ok: true, }, { t: INT, v: 5, ok: true, }, } for _, c := range cases { a := NewArg(c.t, "key", "help", c.v) switch c.t { case INT: if (a.GetInt() == c.v) != c.ok { t.Errorf("failed to get int: want %v, got %v", c.v, a.GetInt()) } case STRING: if (a.GetString() == c.v) != c.ok { t.Errorf("failed to get string: want %v, got %v", c.v, a.GetString()) } case BOOL: if (a.GetBool() == c.v) != c.ok { t.Errorf("failed to get bool: want %v, got %v", c.v, a.GetBool()) } case DURATION: if (a.GetDuration() == c.v) != c.ok { t.Errorf("failed to get duration: want %v, got %v", c.v, a.GetDuration()) } } } } func TestSets(t *testing.T) { cases := []struct { t Type v interface{} ok bool }{ { t: STRING, v: 5, ok: false, }, { t: DURATION, v: 5, ok: false, }, { t: BOOL, v: 5, ok: false, }, { t: INT, v: "a", ok: false, }, { t: STRING, v: "5", ok: true, }, { t: DURATION, v: time.Duration(5), ok: true, }, { t: BOOL, v: true, ok: true, }, { t: INT, v: 5, ok: true, }, } for i, c := range cases { a := NewArg(c.t, "key", "help", nil) if err := a.Set(c.v); (err == nil) != c.ok { t.Errorf("[%d] failed to set %v: want ok=%v, got %v", i, c.t, c.ok, err) } } }