66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
|
|
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)
|
||
|
|
}
|
||
|
|
}
|