diff options
author | Elwardi <elwardifadeli@gmail.com> | 2021-07-22 15:44:16 +0100 |
---|---|---|
committer | Elwardi <elwardifadeli@gmail.com> | 2021-07-22 15:44:16 +0100 |
commit | 148bf2c070ab6f9a7e559851ed4d05496e651552 (patch) | |
tree | 1d269751810ac71bdcc7820f6269fd72b9064022 /pkg | |
parent | edfb0a26b2bebb67520061df843aa95f78a981c0 (diff) |
Add test for GenerateMenuCandidates from Custom Commands
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/gui/custom_commands.go | 10 | ||||
-rw-r--r-- | pkg/gui/dummies.go | 21 | ||||
-rw-r--r-- | pkg/gui/gui_test.go | 49 |
3 files changed, 77 insertions, 3 deletions
diff --git a/pkg/gui/custom_commands.go b/pkg/gui/custom_commands.go index e9aeedb4f..7ae1da8c0 100644 --- a/pkg/gui/custom_commands.go +++ b/pkg/gui/custom_commands.go @@ -117,7 +117,8 @@ func (gui *Gui) menuPrompt(prompt config.CustomCommandPrompt, promptResponses [] return gui.createMenu(title, menuItems, createMenuOptions{showCancel: true}) } -func (gui *Gui) generateMenuCandidates(commandOutput string, filter string, format string) ([]string, error) { + +func (gui *Gui) GenerateMenuCandidates(commandOutput string, filter string, format string) ([]string, error) { candidates := []string{} reg, err := regexp.Compile(filter) if err != nil { @@ -138,7 +139,7 @@ func (gui *Gui) generateMenuCandidates(commandOutput string, filter string, form for groupIdx, group := range reg.SubexpNames() { // Record matched group with group ids matchName := "group_" + strconv.Itoa(groupIdx) - tmplData[matchName] = group + tmplData[matchName] = out[0][groupIdx] // Record last named group non-empty matches as group matches if group != "" { tmplData[group] = out[0][groupIdx] @@ -176,7 +177,10 @@ func (gui *Gui) menuPromptFromCommand(prompt config.CustomCommandPrompt, promptR } // Need to make a menu out of what the cmd has displayed - candidates, err := gui.generateMenuCandidates(message, filter, prompt.Format) + candidates, err := gui.GenerateMenuCandidates(message, filter, prompt.Format) + if err != nil { + return gui.surfaceError(err) + } menuItems := make([]*menuItem, len(candidates)) for i := range candidates { diff --git a/pkg/gui/dummies.go b/pkg/gui/dummies.go new file mode 100644 index 000000000..97a03d784 --- /dev/null +++ b/pkg/gui/dummies.go @@ -0,0 +1,21 @@ +package gui + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + "github.com/jesseduffield/lazygit/pkg/utils" + "github.com/jesseduffield/lazygit/pkg/commands/oscommands" + "github.com/jesseduffield/lazygit/pkg/commands" + "github.com/jesseduffield/lazygit/pkg/i18n" + "github.com/jesseduffield/lazygit/pkg/updates" +) + +// NewDummyGui creates a new dummy GUI for testing +func NewDummyUpdater() *updates.Updater { + DummyUpdater, _ := updates.NewUpdater(utils.NewDummyLog(), config.NewDummyAppConfig(), oscommands.NewDummyOSCommand(), i18n.NewTranslationSet(utils.NewDummyLog())) + return DummyUpdater +} + +func NewDummyGui() *Gui { + DummyGui, _ := NewGui(utils.NewDummyLog(), commands.NewDummyGitCommand(), oscommands.NewDummyOSCommand(), i18n.NewTranslationSet(utils.NewDummyLog()), config.NewDummyAppConfig(), NewDummyUpdater(), "", false) + return DummyGui +} diff --git a/pkg/gui/gui_test.go b/pkg/gui/gui_test.go index 8e37cecfe..8fcf0d4de 100644 --- a/pkg/gui/gui_test.go +++ b/pkg/gui/gui_test.go @@ -80,3 +80,52 @@ func runCmdHeadless(cmd *exec.Cmd) error { return f.Close() } + +func TestGuiGenerateMenuCandidates(t *testing.T) { + type scenario struct { + testName string + cmdOut string + filter string + format string + test func([]string, error) + } + + scenarios := []scenario{ + { + "Extract remote branch name", + "upstream/pr-1", + "upstream/(?P<branch>.*)", + "{{ .branch }}", + func(actual []string, err error) { + assert.NoError(t, err) + assert.EqualValues(t, "pr-1", actual[0]) + }, + }, + { + "Multiple named groups", + "upstream/pr-1", + "(?P<remote>[a-z]*)/(?P<branch>.*)", + "{{ .branch }}|{{ .remote }}", + func(actual []string, err error) { + assert.NoError(t, err) + assert.EqualValues(t, "pr-1|upstream", actual[0]) + }, + }, + { + "Multiple named groups with group ids", + "upstream/pr-1", + "(?P<remote>[a-z]*)/(?P<branch>.*)", + "{{ .group_2 }}|{{ .group_1 }}", + func(actual []string, err error) { + assert.NoError(t, err) + assert.EqualValues(t, "pr-1|upstream", actual[0]) + }, + }, + } + + for _, s := range scenarios { + t.Run(s.testName, func(t *testing.T) { + s.test(NewDummyGui().GenerateMenuCandidates(s.cmdOut, s.filter, s.format)) + }) + } +} |