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/smug_test.go

111 lines
2.0 KiB
Go

package main
import (
"os/exec"
"reflect"
"strings"
"testing"
)
var startSessionTestTable = []struct {
config Config
commands []string
windows []string
}{
{
Config{
Session: "ses",
Root: "root",
BeforeStart: []string{"command1", "command2"},
},
[]string{
"tmux has-session -t ses",
"/bin/sh -c command1",
"/bin/sh -c command2",
"tmux new -Pd -s ses",
"tmux kill-window -t ses:0",
"tmux move-window -r",
"tmux attach -t ses:0",
},
[]string{},
},
{
Config{
Session: "ses",
Root: "root",
Windows: []Window{
{
Name: "win1",
Manual: false,
},
{
Name: "win2",
Manual: true,
},
},
},
[]string{
"tmux has-session -t ses",
"tmux new -Pd -s ses",
"tmux neww -Pd -t ses: -n win1 -c root",
"tmux kill-window -t ses:0",
"tmux move-window -r",
"tmux attach -t ses:0",
},
[]string{},
},
{
Config{
Session: "ses",
Root: "root",
Windows: []Window{
{
Name: "win1",
Manual: false,
},
{
Name: "win2",
Manual: true,
},
},
},
[]string{
"tmux has-session -t ses",
"tmux new -Pd -s ses",
"tmux neww -Pd -t ses: -n win2 -c root",
},
[]string{
"win2",
},
},
}
type MockCommander struct {
Commands []string
}
func (c *MockCommander) Exec(cmd *exec.Cmd) (string, error) {
c.Commands = append(c.Commands, strings.Join(cmd.Args, " "))
return "ses:", nil
}
func (c *MockCommander) ExecSilently(cmd *exec.Cmd) error {
c.Commands = append(c.Commands, strings.Join(cmd.Args, " "))
return nil
}
func TestStartSession(t *testing.T) {
for _, params := range startSessionTestTable {
commander := &MockCommander{}
tmux := Tmux{commander}
smug := Smug{tmux, commander}
smug.StartSession(params.config, params.windows)
if !reflect.DeepEqual(params.commands, commander.Commands) {
t.Errorf("expected\n%s\ngot\n%s", strings.Join(params.commands, "\n"), strings.Join(commander.Commands, "\n"))
}
}
}