blob: 4986635bd566bb7d31eb87b05118b87175aeaf25 [file] [log] [blame]
package format_test
import (
"testing"
"gotest.tools/v3/assert"
"gotest.tools/v3/golden"
"gotest.tools/v3/internal/format"
)
func TestUnifiedDiff(t *testing.T) {
var testcases = []struct {
name string
a string
b string
expected string
from string
to string
}{
{
name: "empty diff",
a: "a\nb\nc",
b: "a\nb\nc",
from: "from",
to: "to",
},
{
name: "one diff with header",
a: "a\nxyz\nc",
b: "a\nb\nc",
from: "from",
to: "to",
expected: "one-diff-with-header.golden",
},
{
name: "many diffs",
a: "a123\nxyz\nc\nbaba\nz\nt\nj2j2\nok\nok\ndone\n",
b: "a123\nxyz\nc\nabab\nz\nt\nj2j2\nok\nok\n",
expected: "many-diff.golden",
},
{
name: "no trailing newline",
a: "a123\nxyz\nc\nbaba\nz\nt\nj2j2\nok\nok\ndone\n",
b: "a123\nxyz\nc\nabab\nz\nt\nj2j2\nok\nok",
expected: "many-diff-no-trailing-newline.golden",
},
{
name: "whitespace diff",
a: " something\n something\n \v\r\n",
b: " something\n\tsomething\n \n",
expected: "whitespace-diff.golden",
},
}
for _, testcase := range testcases {
t.Run(testcase.name, func(t *testing.T) {
diff := format.UnifiedDiff(format.DiffConfig{
A: testcase.a,
B: testcase.b,
From: testcase.from,
To: testcase.to,
})
if testcase.expected != "" {
assert.Assert(t, golden.String(diff, testcase.expected))
return
}
assert.Equal(t, diff, "")
})
}
}