Skip to content

Commit

Permalink
Use ErrorToast instead of error panel when invoking a disabled command
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanhaller committed Jan 14, 2024
1 parent 99a3ccd commit 09a24ee
Show file tree
Hide file tree
Showing 13 changed files with 54 additions and 73 deletions.
3 changes: 2 additions & 1 deletion pkg/gui/context/menu_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ func (self *MenuContext) GetKeybindings(opts types.KeybindingsOpts) []*types.Bin

func (self *MenuContext) OnMenuPress(selectedItem *types.MenuItem) error {
if selectedItem != nil && selectedItem.DisabledReason != "" {
return self.c.ErrorMsg(selectedItem.DisabledReason)
self.c.ErrorToast(self.c.Tr.DisabledMenuItemPrefix + selectedItem.DisabledReason)
return nil
}

if err := self.c.PopContext(); err != nil {
Expand Down
3 changes: 2 additions & 1 deletion pkg/gui/keybindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,8 @@ func (gui *Gui) callKeybindingHandler(binding *types.Binding) error {
disabledReason = binding.GetDisabledReason()
}
if disabledReason != "" {
return gui.c.ErrorMsg(disabledReason)
gui.c.ErrorToast(gui.Tr.DisabledMenuItemPrefix + disabledReason)
return nil
}
return binding.Handler()
}
9 changes: 8 additions & 1 deletion pkg/integration/components/menu_driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@ func (self *MenuDriver) Title(expected *TextMatcher) *MenuDriver {
return self
}

func (self *MenuDriver) Confirm() {
func (self *MenuDriver) Confirm() *MenuDriver {
self.checkNecessaryChecksCompleted()

self.getViewDriver().PressEnter()

return self
}

func (self *MenuDriver) Cancel() {
Expand Down Expand Up @@ -72,6 +74,11 @@ func (self *MenuDriver) Tooltip(option *TextMatcher) *MenuDriver {
return self
}

func (self *MenuDriver) Tap(f func()) *MenuDriver {
self.getViewDriver().Tap(f)
return self
}

func (self *MenuDriver) checkNecessaryChecksCompleted() {
if !self.hasCheckedTitle {
self.t.Fail("You must check the title of a menu popup by calling Title() before calling Confirm()/Cancel().")
Expand Down
11 changes: 5 additions & 6 deletions pkg/integration/tests/branch/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,11 @@ var Delete = NewIntegrationTest(NewIntegrationTestArgs{
Tooltip(Contains("You cannot delete the checked out branch!")).
Title(Equals("Delete branch 'branch-three'?")).
Select(Contains("Delete local branch")).
Confirm()
t.ExpectPopup().
Alert().
Title(Equals("Error")).
Content(Contains("You cannot delete the checked out branch!")).
Confirm()
Confirm().
Tap(func() {
t.ExpectToast(Contains("You cannot delete the checked out branch!"))
}).
Cancel()
}).
SelectNextItem().
Press(keys.Universal.Remove).
Expand Down
10 changes: 5 additions & 5 deletions pkg/integration/tests/branch/rebase_to_upstream.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ var RebaseToUpstream = NewIntegrationTest(NewIntegrationTestArgs{
Title(Equals("Upstream options")).
Select(Contains("Rebase checked-out branch onto upstream of selected branch")).
Tooltip(Contains("Disabled: The selected branch has no upstream (or the upstream is not stored locally)")).
Confirm()
t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Equals("The selected branch has no upstream (or the upstream is not stored locally)")).
Confirm()
Confirm().
Tap(func() {
t.ExpectToast(Equals("Disabled: The selected branch has no upstream (or the upstream is not stored locally)"))
}).
Cancel()
}).
SelectNextItem().
Lines(
Expand Down
10 changes: 5 additions & 5 deletions pkg/integration/tests/branch/reset_to_upstream.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ var ResetToUpstream = NewIntegrationTest(NewIntegrationTestArgs{
Title(Equals("Upstream options")).
Select(Contains("Reset checked-out branch onto upstream of selected branch")).
Tooltip(Contains("Disabled: The selected branch has no upstream (or the upstream is not stored locally)")).
Confirm()
t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Equals("The selected branch has no upstream (or the upstream is not stored locally)")).
Confirm()
Confirm().
Tap(func() {
t.ExpectToast(Equals("Disabled: The selected branch has no upstream (or the upstream is not stored locally)"))
}).
Cancel()
}).
SelectNextItem().
Lines(
Expand Down
33 changes: 15 additions & 18 deletions pkg/integration/tests/file/copy_menu.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,11 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
Title(Equals("Copy to clipboard")).
Select(Contains("File name")).
Tooltip(Equals("Disabled: Nothing to copy")).
Confirm()

t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Equals("Nothing to copy")).
Confirm()
Confirm().
Tap(func() {
t.ExpectToast(Equals("Disabled: Nothing to copy"))
}).
Cancel()
})

t.Shell().
Expand All @@ -56,25 +55,23 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
Title(Equals("Copy to clipboard")).
Select(Contains("Diff of selected file")).
Tooltip(Contains("Disabled: Nothing to copy")).
Confirm()

t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Equals("Nothing to copy")).
Confirm()
Confirm().
Tap(func() {
t.ExpectToast(Equals("Disabled: Nothing to copy"))
}).
Cancel()
}).
Press(keys.Files.CopyFileInfoToClipboard).
Tap(func() {
t.ExpectPopup().Menu().
Title(Equals("Copy to clipboard")).
Select(Contains("Diff of all files")).
Tooltip(Contains("Disabled: Nothing to copy")).
Confirm()

t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Equals("Nothing to copy")).
Confirm()
Confirm().
Tap(func() {
t.ExpectToast(Equals("Disabled: Nothing to copy"))
}).
Cancel()
})

t.Shell().
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,7 @@ var AmendNonHeadCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains(commit)).
Press(keys.Commits.AmendToCommit)

t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Contains("Can't perform this action during a rebase")).
Confirm()
t.ExpectToast(Contains("Can't perform this action during a rebase"))
}
},
})
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,6 @@ var EditNonTodoCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")).
Press(keys.Universal.Edit)

t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Contains("Can't perform this action during a rebase")).
Confirm()
t.ExpectToast(Contains("Can't perform this action during a rebase"))
},
})
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,6 @@ var EditTheConflCommit = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("<-- YOU ARE HERE --- commit three")).
Press(keys.Commits.RenameCommit)

t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Contains("Changing this kind of rebase todo entry is not allowed")).
Confirm()
t.ExpectToast(Contains("Changing this kind of rebase todo entry is not allowed"))
},
})
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,7 @@ var FixupFirstCommit = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")).
Press(keys.Commits.MarkCommitAsFixup).
Tap(func() {
t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Equals("There's no commit below to squash into")).
Confirm()
t.ExpectToast(Equals("Disabled: There's no commit below to squash into"))
}).
Lines(
Contains("commit 02"),
Expand Down
23 changes: 7 additions & 16 deletions pkg/integration/tests/interactive_rebase/quick_start.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,9 @@ var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
Contains("initial commit"),
).
// Verify we can't quick start from main
Press(keys.Commits.StartInteractiveRebase).
Tap(func() {
t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Contains("Cannot start interactive rebase: the HEAD commit is a merge commit or is present on the main branch, so there is no appropriate base commit to start the rebase from. You can start an interactive rebase from a specific commit by selecting the commit and pressing `e`.")).
Confirm()
})
Press(keys.Commits.StartInteractiveRebase)

t.ExpectToast(Equals("Disabled: Cannot start interactive rebase: the HEAD commit is a merge commit or is present on the main branch, so there is no appropriate base commit to start the rebase from. You can start an interactive rebase from a specific commit by selecting the commit and pressing `e`."))

t.Views().Branches().
Focus().
Expand All @@ -80,15 +76,10 @@ var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
Contains("initial commit"),
).
// Try again, verify we fail because we're already rebasing
Press(keys.Commits.StartInteractiveRebase).
Tap(func() {
t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Contains("Can't perform this action during a rebase")).
Confirm()

t.Common().AbortRebase()
})
Press(keys.Commits.StartInteractiveRebase)

t.ExpectToast(Equals("Disabled: Can't perform this action during a rebase"))
t.Common().AbortRebase()

// Verify if a merge commit is present on the branch we start from there
t.Views().Branches().
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,7 @@ var SquashDownFirstCommit = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")).
Press(keys.Commits.SquashDown).
Tap(func() {
t.ExpectPopup().Alert().
Title(Equals("Error")).
Content(Equals("There's no commit below to squash into")).
Confirm()
t.ExpectToast(Equals("Disabled: There's no commit below to squash into"))
}).
Lines(
Contains("commit 02"),
Expand Down

0 comments on commit 09a24ee

Please sign in to comment.