summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorElwardi <elwardifadeli@gmail.com>2021-07-22 15:44:16 +0100
committerElwardi <elwardifadeli@gmail.com>2021-07-22 15:44:16 +0100
commit148bf2c070ab6f9a7e559851ed4d05496e651552 (patch)
tree1d269751810ac71bdcc7820f6269fd72b9064022 /pkg
parentedfb0a26b2bebb67520061df843aa95f78a981c0 (diff)
Add test for GenerateMenuCandidates from Custom Commands
Diffstat (limited to 'pkg')
-rw-r--r--pkg/gui/custom_commands.go10
-rw-r--r--pkg/gui/dummies.go21
-rw-r--r--pkg/gui/gui_test.go49
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))
+ })
+ }
+}