diff options
Diffstat (limited to 'pkg/config/editor_presets_test.go')
-rw-r--r-- | pkg/config/editor_presets_test.go | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/pkg/config/editor_presets_test.go b/pkg/config/editor_presets_test.go new file mode 100644 index 000000000..1d73df8c6 --- /dev/null +++ b/pkg/config/editor_presets_test.go @@ -0,0 +1,126 @@ +package config + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetEditTemplate(t *testing.T) { + trueVal := true + + scenarios := []struct { + name string + osConfig *OSConfig + guessDefaultEditor func() string + expectedEditTemplate string + expectedEditAtLineTemplate string + expectedEditAtLineAndWaitTemplate string + expectedEditInTerminal bool + }{ + { + "Default template is vim", + &OSConfig{}, + func() string { return "" }, + "vim -- {{filename}}", + "vim +{{line}} -- {{filename}}", + "vim +{{line}} -- {{filename}}", + true, + }, + { + "Setting a preset", + &OSConfig{ + EditPreset: "vscode", + }, + func() string { return "" }, + "code --reuse-window -- {{filename}}", + "code --reuse-window --goto -- {{filename}}:{{line}}", + "code --reuse-window --goto --wait -- {{filename}}:{{line}}", + false, + }, + { + "Setting a preset wins over guessed editor", + &OSConfig{ + EditPreset: "vscode", + }, + func() string { return "nano" }, + "code --reuse-window -- {{filename}}", + "code --reuse-window --goto -- {{filename}}:{{line}}", + "code --reuse-window --goto --wait -- {{filename}}:{{line}}", + false, + }, + { + "Overriding a preset with explicit config (edit)", + &OSConfig{ + EditPreset: "vscode", + Edit: "myeditor {{filename}}", + EditInTerminal: &trueVal, + }, + func() string { return "" }, + "myeditor {{filename}}", + "code --reuse-window --goto -- {{filename}}:{{line}}", + "code --reuse-window --goto --wait -- {{filename}}:{{line}}", + true, + }, + { + "Overriding a preset with explicit config (edit at line)", + &OSConfig{ + EditPreset: "vscode", + EditAtLine: "myeditor --line={{line}} {{filename}}", + EditInTerminal: &trueVal, + }, + func() string { return "" }, + "code --reuse-window -- {{filename}}", + "myeditor --line={{line}} {{filename}}", + "code --reuse-window --goto --wait -- {{filename}}:{{line}}", + true, + }, + { + "Overriding a preset with explicit config (edit at line and wait)", + &OSConfig{ + EditPreset: "vscode", + EditAtLineAndWait: "myeditor --line={{line}} -w {{filename}}", + EditInTerminal: &trueVal, + }, + func() string { return "" }, + "code --reuse-window -- {{filename}}", + "code --reuse-window --goto -- {{filename}}:{{line}}", + "myeditor --line={{line}} -w {{filename}}", + true, + }, + { + "Unknown preset name", + &OSConfig{ + EditPreset: "thisPresetDoesNotExist", + }, + func() string { return "" }, + "vim -- {{filename}}", + "vim +{{line}} -- {{filename}}", + "vim +{{line}} -- {{filename}}", + true, + }, + { + "Guessing a preset from guessed editor", + &OSConfig{}, + func() string { return "emacs" }, + "emacs -- {{filename}}", + "emacs +{{line}} -- {{filename}}", + "emacs +{{line}} -- {{filename}}", + true, + }, + } + for _, s := range scenarios { + t.Run(s.name, func(t *testing.T) { + template, editInTerminal := GetEditTemplate(s.osConfig, s.guessDefaultEditor) + assert.Equal(t, s.expectedEditTemplate, template) + assert.Equal(t, s.expectedEditInTerminal, editInTerminal) + + template, editInTerminal = GetEditAtLineTemplate(s.osConfig, s.guessDefaultEditor) + assert.Equal(t, s.expectedEditAtLineTemplate, template) + assert.Equal(t, s.expectedEditInTerminal, editInTerminal) + + template = GetEditAtLineAndWaitTemplate(s.osConfig, s.guessDefaultEditor) + assert.Equal(t, s.expectedEditAtLineAndWaitTemplate, template) + }) + } +} |