2021-04-10 03:40:42 +02:00
|
|
|
package commands
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
2021-12-31 00:45:29 +02:00
|
|
|
"github.com/go-errors/errors"
|
2021-10-23 00:52:19 +02:00
|
|
|
"github.com/jesseduffield/lazygit/pkg/commands/git_config"
|
2021-12-31 00:45:29 +02:00
|
|
|
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
2021-04-10 03:40:42 +02:00
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
2021-04-10 08:01:46 +02:00
|
|
|
func TestEditFileCmdStr(t *testing.T) {
|
|
|
|
type scenario struct {
|
2021-08-04 11:43:34 +02:00
|
|
|
filename string
|
|
|
|
configEditCommand string
|
|
|
|
configEditCommandTemplate string
|
2021-12-31 00:45:29 +02:00
|
|
|
runner *oscommands.FakeCmdObjRunner
|
2021-08-04 11:43:34 +02:00
|
|
|
getenv func(string) string
|
2021-10-23 00:52:19 +02:00
|
|
|
gitConfigMockResponses map[string]string
|
2021-08-04 11:43:34 +02:00
|
|
|
test func(string, error)
|
2021-04-10 08:01:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
scenarios := []scenario{
|
|
|
|
{
|
2021-12-31 00:45:29 +02:00
|
|
|
filename: "test",
|
|
|
|
configEditCommand: "",
|
|
|
|
configEditCommandTemplate: "{{editor}} {{filename}}",
|
|
|
|
runner: oscommands.NewFakeRunner(t).
|
|
|
|
Expect(`which vi`, "", errors.New("error")),
|
|
|
|
getenv: func(env string) string {
|
2021-04-10 08:01:46 +02:00
|
|
|
return ""
|
|
|
|
},
|
2021-12-31 00:45:29 +02:00
|
|
|
gitConfigMockResponses: nil,
|
|
|
|
test: func(cmdStr string, err error) {
|
2021-06-05 02:58:36 +02:00
|
|
|
assert.EqualError(t, err, "No editor defined in config file, $GIT_EDITOR, $VISUAL, $EDITOR, or git config")
|
2021-04-10 08:01:46 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2021-12-31 00:45:29 +02:00
|
|
|
filename: "test",
|
|
|
|
configEditCommand: "nano",
|
|
|
|
configEditCommandTemplate: "{{editor}} {{filename}}",
|
|
|
|
runner: oscommands.NewFakeRunner(t),
|
|
|
|
getenv: func(env string) string {
|
2021-05-20 08:44:58 +02:00
|
|
|
return ""
|
|
|
|
},
|
2021-12-31 00:45:29 +02:00
|
|
|
gitConfigMockResponses: nil,
|
|
|
|
test: func(cmdStr string, err error) {
|
2021-05-20 08:44:58 +02:00
|
|
|
assert.NoError(t, err)
|
2021-12-31 00:45:29 +02:00
|
|
|
assert.Equal(t, `nano "test"`, cmdStr)
|
2021-05-20 08:44:58 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2021-12-31 00:45:29 +02:00
|
|
|
filename: "test",
|
|
|
|
configEditCommand: "",
|
|
|
|
configEditCommandTemplate: "{{editor}} {{filename}}",
|
|
|
|
runner: oscommands.NewFakeRunner(t),
|
|
|
|
getenv: func(env string) string {
|
2021-04-10 08:01:46 +02:00
|
|
|
return ""
|
|
|
|
},
|
2021-12-31 00:45:29 +02:00
|
|
|
gitConfigMockResponses: map[string]string{"core.editor": "nano"},
|
|
|
|
test: func(cmdStr string, err error) {
|
2021-04-10 08:01:46 +02:00
|
|
|
assert.NoError(t, err)
|
2021-12-31 00:45:29 +02:00
|
|
|
assert.Equal(t, `nano "test"`, cmdStr)
|
2021-04-10 08:01:46 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2021-12-31 00:45:29 +02:00
|
|
|
filename: "test",
|
|
|
|
configEditCommand: "",
|
|
|
|
configEditCommandTemplate: "{{editor}} {{filename}}",
|
|
|
|
runner: oscommands.NewFakeRunner(t),
|
|
|
|
getenv: func(env string) string {
|
2021-04-10 08:01:46 +02:00
|
|
|
if env == "VISUAL" {
|
|
|
|
return "nano"
|
|
|
|
}
|
|
|
|
|
|
|
|
return ""
|
|
|
|
},
|
2021-12-31 00:45:29 +02:00
|
|
|
gitConfigMockResponses: nil,
|
|
|
|
test: func(cmdStr string, err error) {
|
2021-04-10 08:01:46 +02:00
|
|
|
assert.NoError(t, err)
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2021-12-31 00:45:29 +02:00
|
|
|
filename: "test",
|
|
|
|
configEditCommand: "",
|
|
|
|
configEditCommandTemplate: "{{editor}} {{filename}}",
|
|
|
|
runner: oscommands.NewFakeRunner(t),
|
|
|
|
getenv: func(env string) string {
|
2021-04-10 08:01:46 +02:00
|
|
|
if env == "EDITOR" {
|
|
|
|
return "emacs"
|
|
|
|
}
|
|
|
|
|
|
|
|
return ""
|
|
|
|
},
|
2021-12-31 00:45:29 +02:00
|
|
|
gitConfigMockResponses: nil,
|
|
|
|
test: func(cmdStr string, err error) {
|
2021-04-10 08:01:46 +02:00
|
|
|
assert.NoError(t, err)
|
2021-12-31 00:45:29 +02:00
|
|
|
assert.Equal(t, `emacs "test"`, cmdStr)
|
2021-04-10 08:01:46 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2021-12-31 00:45:29 +02:00
|
|
|
filename: "test",
|
|
|
|
configEditCommand: "",
|
|
|
|
configEditCommandTemplate: "{{editor}} {{filename}}",
|
|
|
|
runner: oscommands.NewFakeRunner(t).
|
|
|
|
Expect(`which vi`, "/usr/bin/vi", nil),
|
|
|
|
getenv: func(env string) string {
|
2021-04-10 08:01:46 +02:00
|
|
|
return ""
|
|
|
|
},
|
2021-12-31 00:45:29 +02:00
|
|
|
gitConfigMockResponses: nil,
|
|
|
|
test: func(cmdStr string, err error) {
|
2021-04-10 08:01:46 +02:00
|
|
|
assert.NoError(t, err)
|
2021-12-31 00:45:29 +02:00
|
|
|
assert.Equal(t, `vi "test"`, cmdStr)
|
2021-04-10 08:01:46 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2021-12-31 00:45:29 +02:00
|
|
|
filename: "file/with space",
|
|
|
|
configEditCommand: "",
|
|
|
|
configEditCommandTemplate: "{{editor}} {{filename}}",
|
|
|
|
runner: oscommands.NewFakeRunner(t).
|
|
|
|
Expect(`which vi`, "/usr/bin/vi", nil),
|
|
|
|
getenv: func(env string) string {
|
2021-04-10 08:01:46 +02:00
|
|
|
return ""
|
|
|
|
},
|
2021-12-31 00:45:29 +02:00
|
|
|
gitConfigMockResponses: nil,
|
|
|
|
test: func(cmdStr string, err error) {
|
2021-04-10 08:01:46 +02:00
|
|
|
assert.NoError(t, err)
|
2021-12-31 00:45:29 +02:00
|
|
|
assert.Equal(t, `vi "file/with space"`, cmdStr)
|
2021-04-10 08:01:46 +02:00
|
|
|
},
|
|
|
|
},
|
2021-08-03 14:38:03 +02:00
|
|
|
{
|
2021-12-31 00:45:29 +02:00
|
|
|
filename: "open file/at line",
|
|
|
|
configEditCommand: "vim",
|
|
|
|
configEditCommandTemplate: "{{editor}} +{{line}} {{filename}}",
|
|
|
|
runner: oscommands.NewFakeRunner(t),
|
|
|
|
getenv: func(env string) string {
|
2021-08-03 14:38:03 +02:00
|
|
|
return ""
|
|
|
|
},
|
2021-12-31 00:45:29 +02:00
|
|
|
gitConfigMockResponses: nil,
|
|
|
|
test: func(cmdStr string, err error) {
|
2021-08-03 14:38:03 +02:00
|
|
|
assert.NoError(t, err)
|
2021-12-31 00:45:29 +02:00
|
|
|
assert.Equal(t, `vim +1 "open file/at line"`, cmdStr)
|
2021-08-03 14:38:03 +02:00
|
|
|
},
|
|
|
|
},
|
2021-04-10 08:01:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
for _, s := range scenarios {
|
2021-12-31 00:45:29 +02:00
|
|
|
gitCmd := NewDummyGitCommandWithRunner(s.runner)
|
2021-12-29 02:41:33 +02:00
|
|
|
gitCmd.UserConfig.OS.EditCommand = s.configEditCommand
|
|
|
|
gitCmd.UserConfig.OS.EditCommandTemplate = s.configEditCommandTemplate
|
2022-01-02 01:34:33 +02:00
|
|
|
gitCmd.OSCommand.GetenvFn = s.getenv
|
|
|
|
gitCmd.gitConfig = git_config.NewFakeGitConfig(s.gitConfigMockResponses)
|
|
|
|
s.test(gitCmd.File.GetEditCmdStr(s.filename, 1))
|
2021-12-31 00:45:29 +02:00
|
|
|
s.runner.CheckForMissingCalls()
|
2021-04-10 08:01:46 +02:00
|
|
|
}
|
|
|
|
}
|