package command import ( "flag" "io/ioutil" "reflect" "testing" ) func TestFlagVar_impl(t *testing.T) { var _ flag.Value = new(FlagVar) } func TestFlagVar(t *testing.T) { cases := []struct { Input string Output map[string]string Error bool }{ { "key=value", map[string]string{"key": "value"}, false, }, { "key=", map[string]string{"key": ""}, false, }, { "key=foo=bar", map[string]string{"key": "foo=bar"}, false, }, { "key", nil, true, }, } for _, tc := range cases { f := new(FlagVar) err := f.Set(tc.Input) if (err != nil) != tc.Error { t.Fatalf("bad error. Input: %#v", tc.Input) } actual := map[string]string(*f) if !reflect.DeepEqual(actual, tc.Output) { t.Fatalf("bad: %#v", actual) } } } func TestFlagVarFile_impl(t *testing.T) { var _ flag.Value = new(FlagVarFile) } func TestFlagVarFile(t *testing.T) { inputLibucl := ` foo = "bar" ` inputJson := `{ "foo": "bar"}` cases := []struct { Input string Output map[string]string Error bool }{ { inputLibucl, map[string]string{"foo": "bar"}, false, }, { inputJson, map[string]string{"foo": "bar"}, false, }, } path := testTempFile(t) for _, tc := range cases { if err := ioutil.WriteFile(path, []byte(tc.Input), 0644); err != nil { t.Fatalf("err: %s", err) } f := new(FlagVarFile) err := f.Set(path) if (err != nil) != tc.Error { t.Fatalf("bad error. Input: %#v", tc.Input) } actual := map[string]string(*f) if !reflect.DeepEqual(actual, tc.Output) { t.Fatalf("bad: %#v", actual) } } }