mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-08-06 22:33:07 +02:00
feat: introduce a copy menu into the file view
This commit is contained in:
185
pkg/integration/tests/file/copy_menu.go
Normal file
185
pkg/integration/tests/file/copy_menu.go
Normal file
@ -0,0 +1,185 @@
|
||||
package file
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
// note: this is required to simulate the clipboard during CI
|
||||
func expectClipboard(t *TestDriver, matcher *TextMatcher) {
|
||||
defer t.Shell().DeleteFile("clipboard")
|
||||
|
||||
t.FileSystem().FileContent("clipboard", matcher)
|
||||
}
|
||||
|
||||
var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "The copy menu allows to copy name and diff of selected/all files",
|
||||
ExtraCmdArgs: []string{},
|
||||
Skip: false,
|
||||
SetupConfig: func(config *config.AppConfig) {
|
||||
config.UserConfig.OS.CopyToClipboardCmd = "echo {{text}} > clipboard"
|
||||
},
|
||||
SetupRepo: func(shell *Shell) {},
|
||||
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
||||
// Disabled item
|
||||
t.Views().Files().
|
||||
IsEmpty().
|
||||
Press(keys.Files.CopyFileInfoToClipboard).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
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()
|
||||
})
|
||||
|
||||
t.Shell().
|
||||
CreateDir("dir").
|
||||
CreateFile("dir/1-unstaged_file", "unstaged content")
|
||||
|
||||
// Empty content (new file)
|
||||
t.Views().Files().
|
||||
Press(keys.Universal.Refresh).
|
||||
Lines(
|
||||
Contains("dir").IsSelected(),
|
||||
Contains("unstaged_file"),
|
||||
).
|
||||
SelectNextItem().
|
||||
Press(keys.Files.CopyFileInfoToClipboard).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
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()
|
||||
}).
|
||||
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()
|
||||
})
|
||||
|
||||
t.Shell().
|
||||
GitAdd("dir/1-unstaged_file").
|
||||
Commit("commit-unstaged").
|
||||
UpdateFile("dir/1-unstaged_file", "unstaged content (new)").
|
||||
CreateFileAndAdd("dir/2-staged_file", "staged content").
|
||||
Commit("commit-staged").
|
||||
UpdateFile("dir/2-staged_file", "staged content (new)").
|
||||
GitAdd("dir/2-staged_file")
|
||||
|
||||
// Copy file name
|
||||
t.Views().Files().
|
||||
Press(keys.Universal.Refresh).
|
||||
Lines(
|
||||
Contains("dir"),
|
||||
Contains("unstaged_file").IsSelected(),
|
||||
Contains("staged_file"),
|
||||
).
|
||||
Press(keys.Files.CopyFileInfoToClipboard).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
Title(Equals("Copy to clipboard")).
|
||||
Select(Contains("File name")).
|
||||
Confirm()
|
||||
|
||||
expectClipboard(t, Contains("unstaged_file"))
|
||||
})
|
||||
|
||||
// Copy file path
|
||||
t.Views().Files().
|
||||
Press(keys.Files.CopyFileInfoToClipboard).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
Title(Equals("Copy to clipboard")).
|
||||
Select(Contains("Path")).
|
||||
Confirm()
|
||||
|
||||
expectClipboard(t, Contains("dir/1-unstaged_file"))
|
||||
})
|
||||
|
||||
// Selected path diff on a single (unstaged) file
|
||||
t.Views().Files().
|
||||
Press(keys.Files.CopyFileInfoToClipboard).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
Title(Equals("Copy to clipboard")).
|
||||
Select(Contains("Diff of selected file")).
|
||||
Tooltip(Equals("If there are staged items, this command considers only them. Otherwise, it considers all the unstaged ones.")).
|
||||
Confirm()
|
||||
|
||||
expectClipboard(t, Contains("+unstaged content (new)"))
|
||||
})
|
||||
|
||||
// Selected path diff with staged and unstaged files
|
||||
t.Views().Files().
|
||||
SelectPreviousItem().
|
||||
Lines(
|
||||
Contains("dir").IsSelected(),
|
||||
Contains("unstaged_file"),
|
||||
Contains("staged_file"),
|
||||
).
|
||||
Press(keys.Files.CopyFileInfoToClipboard).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
Title(Equals("Copy to clipboard")).
|
||||
Select(Contains("Diff of selected file")).
|
||||
Tooltip(Equals("If there are staged items, this command considers only them. Otherwise, it considers all the unstaged ones.")).
|
||||
Confirm()
|
||||
|
||||
expectClipboard(t, Contains("+staged content (new)"))
|
||||
})
|
||||
|
||||
// All files diff with staged files
|
||||
t.Views().Files().
|
||||
Press(keys.Files.CopyFileInfoToClipboard).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
Title(Equals("Copy to clipboard")).
|
||||
Select(Contains("Diff of all files")).
|
||||
Tooltip(Equals("If there are staged items, this command considers only them. Otherwise, it considers all the unstaged ones.")).
|
||||
Confirm()
|
||||
|
||||
expectClipboard(t, Contains("+staged content (new)"))
|
||||
})
|
||||
|
||||
// All files diff with no staged files
|
||||
t.Views().Files().
|
||||
SelectNextItem().
|
||||
SelectNextItem().
|
||||
Lines(
|
||||
Contains("dir"),
|
||||
Contains("unstaged_file"),
|
||||
Contains("staged_file").IsSelected(),
|
||||
).
|
||||
Press(keys.Universal.Select).
|
||||
Press(keys.Files.CopyFileInfoToClipboard).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
Title(Equals("Copy to clipboard")).
|
||||
Select(Contains("Diff of all files")).
|
||||
Tooltip(Equals("If there are staged items, this command considers only them. Otherwise, it considers all the unstaged ones.")).
|
||||
Confirm()
|
||||
|
||||
expectClipboard(t, Contains("+staged content (new)").Contains("+unstaged content (new)"))
|
||||
})
|
||||
},
|
||||
})
|
@ -117,6 +117,7 @@ var tests = []*components.IntegrationTest{
|
||||
diff.DiffAndApplyPatch,
|
||||
diff.DiffCommits,
|
||||
diff.IgnoreWhitespace,
|
||||
file.CopyMenu,
|
||||
file.DirWithUntrackedFile,
|
||||
file.DiscardAllDirChanges,
|
||||
file.DiscardChanges,
|
||||
|
Reference in New Issue
Block a user