package budget import ( "bytes" "reflect" "strings" "testing" "github.com/BurntSushi/toml" ) func TestParseArgs(t *testing.T) { for _, action := range []string{"apply", "watch", "status"} { r, err := parseArgs([]string{action}) if err != nil || r.action != action { t.Fatalf("%#v, %v", r, err) } } r, err := parseArgs([]string{"run", "compute", "--", "java", "-Xmx8G", "a b"}) if err != nil || r.profile != "compute" || !reflect.DeepEqual(r.command, []string{"--", "java", "-Xmx8G", "a b"}) { t.Fatalf("%#v, %v", r, err) } r, err = parseArgs([]string{"set", "unrestricted", "editor"}) if err != nil || r.profile != "unrestricted" || r.target != "editor" { t.Fatalf("%#v, %v", r, err) } for _, args := range [][]string{nil, {"unknown"}, {"apply", "extra"}, {"run"}, {"set", "compute"}, {"set", "compute", "editor", "extra"}} { if _, err := parseArgs(args); err == nil { t.Errorf("accepted %v", args) } } } func TestHelp(t *testing.T) { for _, flag := range []string{"-h", "--help"} { var out bytes.Buffer if err := Run([]string{flag}, &out); err != nil { t.Fatal(err) } if !strings.Contains(out.String(), "run PROFILE") || !strings.Contains(out.String(), "~/.config/budget/profiles.toml") { t.Fatal(out.String()) } } } func TestStatus(t *testing.T) { home := t.TempDir() t.Setenv("HOME", home) want := testConfig() var data bytes.Buffer if err := toml.NewEncoder(&data).Encode(want); err != nil { t.Fatal(err) } put(t, homePaths(home).config, data.String()) var out bytes.Buffer if err := Run([]string{"status"}, &out); err != nil { t.Fatal(err) } var got config if _, err := toml.Decode(out.String(), &got); err != nil { t.Fatal(err) } if !reflect.DeepEqual(got, want) { t.Fatalf("got %#v, want %#v", got, want) } }