Change clipboard tests to demonstrate bug with copying absolute file path

Change the tests so that they run in a linked worktree; this uncovers the bug
that copying a file's absolute path uses the main repo path rather than the
worktree's path.
This commit is contained in:
Stefan Haller
2026-04-19 08:13:22 +02:00
parent d167063b4f
commit 94d6fce3cc
2 changed files with 26 additions and 5 deletions
@@ -2,6 +2,7 @@ package diff
import (
"os"
"path/filepath"
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
@@ -22,6 +23,12 @@ var CopyToClipboard = NewIntegrationTest(NewIntegrationTestArgs{
config.GetUserConfig().OS.CopyToClipboardCmd = "printf '%s' {{text}} > clipboard"
},
SetupRepo: func(shell *Shell) {
// Run the test in a linked worktree so that we catch bugs where we
// use the main repo's path instead of the current worktree's path.
shell.EmptyCommit("initial commit")
shell.AddWorktree("HEAD", "../linked-worktree", "mybranch")
shell.Chdir("../linked-worktree")
shell.CreateDir("dir")
shell.CreateFileAndAdd("dir/file1", "1st line\n")
shell.Commit("1")
@@ -38,6 +45,7 @@ var CopyToClipboard = NewIntegrationTest(NewIntegrationTestArgs{
Contains("3").IsSelected(),
Contains("2"),
Contains("1"),
Contains("initial commit"),
).
SelectNextItem().
PressEnter()
@@ -80,9 +88,12 @@ var CopyToClipboard = NewIntegrationTest(NewIntegrationTestArgs{
Confirm().
Tap(func() {
t.ExpectToast(Equals("File path copied to clipboard"))
repoDir, _ := os.Getwd()
worktreeDir, _ := os.Getwd()
// On windows the following path would have backslashes, but we don't run integration tests on windows yet.
expectClipboard(t, Equals(repoDir+"/dir/file1"))
/* EXPECTED:
expectClipboard(t, Equals(worktreeDir+"/dir/file1"))
ACTUAL: */
expectClipboard(t, Equals(filepath.Dir(worktreeDir)+"/repo/dir/file1"))
})
}).
Press(keys.Files.CopyFileInfoToClipboard).
+13 -3
View File
@@ -2,6 +2,7 @@ package file
import (
"os"
"path/filepath"
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
@@ -21,7 +22,13 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
SetupConfig: func(config *config.AppConfig) {
config.GetUserConfig().OS.CopyToClipboardCmd = "printf '%s' {{text}} > clipboard"
},
SetupRepo: func(shell *Shell) {},
SetupRepo: func(shell *Shell) {
// Run the test in a linked worktree so that we catch bugs where we
// use the main repo's path instead of the current worktree's path.
shell.EmptyCommit("initial commit")
shell.AddWorktree("HEAD", "../linked-worktree", "mybranch")
shell.Chdir("../linked-worktree")
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
// Disabled item
t.Views().Files().
@@ -130,9 +137,12 @@ var CopyMenu = NewIntegrationTest(NewIntegrationTestArgs{
t.ExpectToast(Equals("File path copied to clipboard"))
repoDir, _ := os.Getwd()
worktreeDir, _ := os.Getwd()
// On windows the following path would have backslashes, but we don't run integration tests on windows yet.
expectClipboard(t, Equals(repoDir+"/dir/1-unstaged_file"))
/* EXPECTED:
expectClipboard(t, Equals(worktreeDir+"/dir/1-unstaged_file"))
ACTUAL: */
expectClipboard(t, Equals(filepath.Dir(worktreeDir)+"/repo/dir/1-unstaged_file"))
})
// Selected path diff on a single (unstaged) file