1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-11-20 17:22:23 +03:00
Files
lazygit/pkg/gui/controllers/helpers/fixup_helper_test.go
Anton Bobov 4c4929acad Fix fixup's false filename detection in hunks containing dashed lines
The existing diff parser incorrectly treated subsequent lines beginning
with "---" as filename headers while processing hunks.  This caused
corruption when dashed lines appeared within diffs themselves.

Restrict filename detection to only occur between hunks.
2025-11-01 09:40:04 +01:00

158 lines
2.9 KiB
Go

package helpers
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestFixupHelper_parseDiff(t *testing.T) {
scenarios := []struct {
name string
diff string
expectedDeletedLineHunks []*hunk
expectedAddedLineHunks []*hunk
}{
{
name: "no diff",
diff: "",
expectedDeletedLineHunks: []*hunk{},
expectedAddedLineHunks: []*hunk{},
},
{
name: "hunk with only deleted lines",
diff: `
diff --git a/file1.txt b/file1.txt
index 9ce8efb33..aaf2a4666 100644
--- a/file1.txt
+++ b/file1.txt
@@ -3 +2,0 @@ bbb
-xxx
`,
expectedDeletedLineHunks: []*hunk{
{
filename: "file1.txt",
startLineIdx: 3,
numLines: 1,
},
},
expectedAddedLineHunks: []*hunk{},
},
{
name: "hunk with deleted and added lines",
diff: `
diff --git a/file1.txt b/file1.txt
index 9ce8efb33..eb246cf98 100644
--- a/file1.txt
+++ b/file1.txt
@@ -3 +3 @@ bbb
-xxx
+yyy
`,
expectedDeletedLineHunks: []*hunk{
{
filename: "file1.txt",
startLineIdx: 3,
numLines: 1,
},
},
expectedAddedLineHunks: []*hunk{},
},
{
name: "hunk with only added lines",
diff: `
diff --git a/file1.txt b/file1.txt
index 9ce8efb33..fb5e469e7 100644
--- a/file1.txt
+++ b/file1.txt
@@ -4,0 +5,2 @@ ddd
+xxx
+yyy
`,
expectedDeletedLineHunks: []*hunk{},
expectedAddedLineHunks: []*hunk{
{
filename: "file1.txt",
startLineIdx: 4,
numLines: 2,
},
},
},
{
name: "hunk with dashed lines",
diff: `
diff --git a/file1.txt b/file1.txt
index 9ce8efb33..fb5e469e7 100644
--- a/file1.txt
+++ b/file1.txt
@@ -3,1 +3,1 @@
--- xxx
+-- yyy
`,
expectedDeletedLineHunks: []*hunk{
{
filename: "file1.txt",
startLineIdx: 3,
numLines: 1,
},
},
expectedAddedLineHunks: []*hunk{},
},
{
name: "several hunks in different files",
diff: `
diff --git a/file1.txt b/file1.txt
index 9ce8efb33..0632e41b0 100644
--- a/file1.txt
+++ b/file1.txt
@@ -2 +1,0 @@ aaa
-bbb
@@ -4 +3 @@ ccc
-ddd
+xxx
@@ -6,0 +6 @@ fff
+zzz
diff --git a/file2.txt b/file2.txt
index 9ce8efb33..0632e41b0 100644
--- a/file2.txt
+++ b/file2.txt
@@ -0,3 +1,0 @@ aaa
-aaa
-bbb
-ccc
`,
expectedDeletedLineHunks: []*hunk{
{
filename: "file1.txt",
startLineIdx: 2,
numLines: 1,
},
{
filename: "file1.txt",
startLineIdx: 4,
numLines: 1,
},
{
filename: "file2.txt",
startLineIdx: 0,
numLines: 3,
},
},
expectedAddedLineHunks: []*hunk{
{
filename: "file1.txt",
startLineIdx: 6,
numLines: 1,
},
},
},
}
for _, s := range scenarios {
t.Run(s.name, func(t *testing.T) {
deletedLineHunks, addedLineHunks := parseDiff(s.diff)
assert.Equal(t, s.expectedDeletedLineHunks, deletedLineHunks)
assert.Equal(t, s.expectedAddedLineHunks, addedLineHunks)
})
}
}