You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
smug/options_test.go

252 lines
4.2 KiB
Go

package main
import (
"errors"
"os"
"reflect"
"testing"
)
var usageTestTable = []struct {
argv []string
opts Options
err error
env map[string]string
}{
{
[]string{"start", "smug"},
Options{
Command: "start",
Project: "smug",
Config: "",
Windows: []string{},
Attach: false,
Detach: false,
Debug: false,
Settings: map[string]string{},
},
nil,
nil,
},
{
[]string{"start", "smug", "-w", "foo"},
Options{
Command: "start",
Project: "smug",
Config: "",
Windows: []string{"foo"},
Attach: false,
Detach: false,
Debug: false,
Settings: map[string]string{},
},
nil,
nil,
},
{
[]string{"start", "smug:foo,bar"},
Options{
Command: "start",
Project: "smug",
Config: "",
Windows: []string{"foo", "bar"},
Attach: false,
Detach: false,
Debug: false,
Settings: map[string]string{},
},
nil,
nil,
},
{
[]string{"start", "smug", "--attach", "--debug", "--detach"},
Options{
Command: "start",
Project: "smug",
Config: "",
Windows: []string{},
Attach: true,
Detach: true,
Debug: true,
Settings: map[string]string{},
},
nil,
nil,
},
{
[]string{"start", "smug", "-ad"},
Options{
Command: "start",
Project: "smug",
Config: "",
Windows: []string{},
Attach: true,
Detach: false,
Debug: true,
Settings: map[string]string{},
},
nil,
nil,
},
{
[]string{"start", "-f", "test.yml"},
Options{
Command: "start",
Project: "",
Config: "test.yml",
Windows: []string{},
Attach: false,
Detach: false,
Debug: false,
Settings: map[string]string{},
},
nil,
nil,
},
{
[]string{"start", "-f", "test.yml", "-w", "win1", "-w", "win2"},
Options{
Command: "start",
Project: "",
Config: "test.yml",
Windows: []string{"win1", "win2"},
Attach: false,
Detach: false,
Debug: false,
Settings: map[string]string{},
},
nil,
nil,
},
{
[]string{"start", "project", "a=b", "x=y"},
Options{
Command: "start",
Project: "project",
Config: "",
Windows: []string{},
Attach: false,
Detach: false,
Debug: false,
Settings: map[string]string{
"a": "b",
"x": "y",
},
},
nil,
nil,
},
{
[]string{"start", "-f", "test.yml", "a=b", "x=y"},
Options{
Command: "start",
Project: "",
Config: "test.yml",
Windows: []string{},
Attach: false,
Detach: false,
Debug: false,
Settings: map[string]string{
"a": "b",
"x": "y",
},
},
nil,
nil,
},
{
[]string{"start", "-f", "test.yml", "-w", "win1", "-w", "win2", "a=b", "x=y"},
Options{
Command: "start",
Project: "",
Config: "test.yml",
Windows: []string{"win1", "win2"},
Attach: false,
Detach: false,
Debug: false,
Settings: map[string]string{
"a": "b",
"x": "y",
},
},
nil,
nil,
},
{
[]string{"start", "--help"},
Options{},
ErrHelp,
nil,
},
{
[]string{"test"},
Options{
Command: "start",
Project: "test",
Windows: []string{},
Settings: map[string]string{},
},
nil,
nil,
},
{
[]string{"test", "-w", "win1", "-w", "win2", "a=b", "x=y"},
Options{
Command: "start",
Project: "test",
Windows: []string{"win1", "win2"},
Settings: map[string]string{"a": "b", "x": "y"},
},
nil,
nil,
},
{
[]string{"test"},
Options{
Command: "start",
Project: "test",
Config: "",
Windows: []string{},
Settings: map[string]string{},
},
nil,
map[string]string{
"SMUG_SESSION_CONFIG_PATH": "test",
},
},
{
[]string{},
Options{},
ErrHelp,
nil,
},
{
[]string{"--help"},
Options{},
ErrHelp,
nil,
},
{
[]string{"start", "--test"},
Options{},
errors.New("unknown flag: --test"),
nil,
},
}
func TestParseOptions(t *testing.T) {
for _, v := range usageTestTable {
for k, v := range v.env {
os.Setenv(k, v)
}
opts, err := ParseOptions(v.argv)
if v.err != nil && err != nil && err.Error() != v.err.Error() {
t.Errorf("expected error %v, got %v", v.err, err)
}
if opts != nil && !reflect.DeepEqual(v.opts, *opts) {
t.Errorf("expected struct %v, got %v", v.opts, opts)
}
}
}