internal/gitutil/numstat_test.go
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}