mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-10 15:46:26 -04:00
Git only writes the space after a marker when there is a label to write after it, and the label can be empty: `git checkout -m` with the diff3 conflict style, for instance, has no name for the common ancestor, so it writes a bare "|||||||" line.
185 lines
3.4 KiB
Go
185 lines
3.4 KiB
Go
package mergeconflicts
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDetermineLineType(t *testing.T) {
|
|
// A markerSize of 0 means the file has no conflict-marker-size gitattribute,
|
|
// so git's default size applies.
|
|
type scenario struct {
|
|
line string
|
|
markerSize int
|
|
expected LineType
|
|
}
|
|
|
|
scenarios := []scenario{
|
|
{
|
|
line: "",
|
|
expected: NOT_A_MARKER,
|
|
},
|
|
{
|
|
line: "blah",
|
|
expected: NOT_A_MARKER,
|
|
},
|
|
{
|
|
line: "<<<<<<< HEAD",
|
|
expected: START,
|
|
},
|
|
{
|
|
line: "<<<<<<< HEAD:my_branch",
|
|
expected: START,
|
|
},
|
|
{
|
|
line: "<<<<<<< MERGE_HEAD:my_branch",
|
|
expected: START,
|
|
},
|
|
{
|
|
line: "<<<<<<< Updated upstream:my_branch",
|
|
expected: START,
|
|
},
|
|
{
|
|
line: "<<<<<<< ours:my_branch",
|
|
expected: START,
|
|
},
|
|
{
|
|
line: "=======",
|
|
expected: TARGET,
|
|
},
|
|
{
|
|
line: ">>>>>>> blah",
|
|
expected: END,
|
|
},
|
|
{
|
|
line: "||||||| adf33b9",
|
|
expected: ANCESTOR,
|
|
},
|
|
{
|
|
line: "<<<<<<<<",
|
|
expected: NOT_A_MARKER,
|
|
},
|
|
// Markers without a label
|
|
{
|
|
line: "<<<<<<<",
|
|
expected: START,
|
|
},
|
|
{
|
|
line: "|||||||",
|
|
expected: ANCESTOR,
|
|
},
|
|
{
|
|
line: ">>>>>>>",
|
|
expected: END,
|
|
},
|
|
{
|
|
line: strings.Repeat("<", 32) + " HEAD",
|
|
markerSize: 32,
|
|
expected: START,
|
|
},
|
|
{
|
|
line: strings.Repeat("|", 32) + " adf33b9",
|
|
markerSize: 32,
|
|
expected: ANCESTOR,
|
|
},
|
|
{
|
|
line: strings.Repeat("=", 32),
|
|
markerSize: 32,
|
|
expected: TARGET,
|
|
},
|
|
{
|
|
line: strings.Repeat(">", 32) + " blah",
|
|
markerSize: 32,
|
|
expected: END,
|
|
},
|
|
// A file gets a bigger marker size precisely because its regular content
|
|
// tends to contain marker-looking lines, so lines with the default size
|
|
// must not be mistaken for markers
|
|
{
|
|
line: "<<<<<<< HEAD",
|
|
markerSize: 32,
|
|
expected: NOT_A_MARKER,
|
|
},
|
|
{
|
|
line: "=======",
|
|
markerSize: 32,
|
|
expected: NOT_A_MARKER,
|
|
},
|
|
{
|
|
line: strings.Repeat("=", 33),
|
|
markerSize: 32,
|
|
expected: NOT_A_MARKER,
|
|
},
|
|
}
|
|
|
|
for _, s := range scenarios {
|
|
assert.EqualValues(t, s.expected, determineLineType(s.line, s.markerSize), s.line)
|
|
}
|
|
}
|
|
|
|
func TestFindConflictsAux(t *testing.T) {
|
|
// A markerSize of 0 means the file has no conflict-marker-size gitattribute,
|
|
// so git's default size applies.
|
|
type scenario struct {
|
|
content string
|
|
markerSize int
|
|
expected bool
|
|
}
|
|
|
|
scenarios := []scenario{
|
|
{
|
|
content: "",
|
|
expected: false,
|
|
},
|
|
{
|
|
content: "blah",
|
|
expected: false,
|
|
},
|
|
{
|
|
content: ">>>>>>> ",
|
|
expected: true,
|
|
},
|
|
{
|
|
content: "<<<<<<< ",
|
|
expected: true,
|
|
},
|
|
{
|
|
content: " <<<<<<< ",
|
|
expected: false,
|
|
},
|
|
{
|
|
content: ">>>>>>>",
|
|
expected: true,
|
|
},
|
|
{
|
|
content: "a\nb\nc\n<<<<<<< ",
|
|
expected: true,
|
|
},
|
|
{
|
|
content: "a\nb\nc\n" + strings.Repeat("<", 32) + " HEAD",
|
|
markerSize: 32,
|
|
expected: true,
|
|
},
|
|
{
|
|
content: "a\nb\nc\n" + strings.Repeat(">", 32) + " blah",
|
|
markerSize: 32,
|
|
expected: true,
|
|
},
|
|
// Marker-looking lines of the default size are the file's regular content
|
|
{
|
|
content: "a\nb\nc\n<<<<<<< HEAD\n=======\n>>>>>>> blah",
|
|
markerSize: 32,
|
|
expected: false,
|
|
},
|
|
}
|
|
|
|
for _, s := range scenarios {
|
|
reader := strings.NewReader(s.content)
|
|
result, err := fileHasConflictMarkersAux(reader, s.markerSize)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, s.expected, result, s.content)
|
|
}
|
|
}
|