internal/gitutil/numstat_test.go

v1.43.1
gitbay/internal/gitutil/numstat_test.go history · blame · raw

43 lines · 1180 bytes

 1package gitutil
 2
 3import (
 4	"os"
 5	"path/filepath"
 6	"slices"
 7	"strings"
 8	"testing"
 9)
10
11func TestDiffNumstat(t *testing.T) {
12	dir := t.TempDir()
13	git(t, dir, "init", "-q", "-b", "main")
14	write(t, dir, "a.txt", "one\ntwo\nthree\n")
15	write(t, dir, "old.txt", strings.Repeat("line\n", 20))
16	git(t, dir, "add", ".")
17	git(t, dir, "commit", "-qm", "base")
18	git(t, dir, "tag", "base")
19
20	write(t, dir, "a.txt", "one\n2\n3\nthree\n")
21	write(t, dir, "new.txt", "hello\n")
22	if err := os.WriteFile(filepath.Join(dir, "bin.dat"), []byte{0, 1, 2, 0, 3}, 0o644); err != nil {
23		t.Fatal(err)
24	}
25	git(t, dir, "mv", "old.txt", "moved.txt")
26	git(t, dir, "add", ".")
27	git(t, dir, "commit", "-qm", "head")
28
29	got, err := DiffNumstat(dir, "base", "HEAD")
30	if err != nil {
31		t.Fatal(err)
32	}
33	want := []NumStat{
34		{Path: "a.txt", Added: 2, Deleted: 1, Status: "M"},
35		{Path: "bin.dat", Added: -1, Deleted: -1, Status: "A"},
36		{Path: "moved.txt", Added: 0, Deleted: 0, Status: "R"},
37		{Path: "new.txt", Added: 1, Deleted: 0, Status: "A"},
38	}
39	slices.SortFunc(got, func(a, b NumStat) int { return strings.Compare(a.Path, b.Path) })
40	if !slices.Equal(got, want) {
41		t.Errorf("got %+v\nwant %+v", got, want)
42	}
43}