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: FLOAT, v: "a", ok: false, }, { t: FLOAT, v: float32(1.0), ok: true, }, { t: TIME, v: "2019", ok: false, }, { t: TIME, v: time.Date(2019, 03, 22, 0, 0, 0, 0, time.UTC), ok: true, }, { 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()) } case TIME: if (a.GetTime() == c.v) != c.ok { t.Errorf("failed to get time: want %v, got %v", c.v, a.GetTime()) } case FLOAT: if (a.GetFloat() == c.v) != c.ok { t.Errorf("failed to get float: want %v, got %v", c.v, a.GetFloat()) } } } } func TestSets(t *testing.T) { cases := []struct { t Type v interface{} ok bool }{ { t: FLOAT, v: "a", ok: false, }, { t: FLOAT, v: "1.0", ok: true, }, { t: FLOAT, v: 1.0, ok: true, }, { t: FLOAT, v: 1, ok: true, }, { t: FLOAT, v: "1", ok: true, }, { t: TIME, v: "2019", ok: false, }, { t: TIME, v: "2019-03-22", ok: true, }, { 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) } } }