package render import ( "os" "os/exec" "path/filepath" "strings" "testing" "github.com/go-git/go-git/v5" ) func TestDiffRendersChangeClasses(t *testing.T) { if _, err := exec.LookPath("git"); err != nil { t.Skip("git not available") } work := t.TempDir() run := func(args ...string) { t.Helper() cmd := exec.Command("git", args...) cmd.Dir = work cmd.Env = append(os.Environ(), "GIT_AUTHOR_NAME=T", "GIT_AUTHOR_EMAIL=t@e.com", "GIT_COMMITTER_NAME=T", "GIT_COMMITTER_EMAIL=t@e.com") if out, err := cmd.CombinedOutput(); err != nil { t.Fatalf("git %v: %v\n%s", args, err, out) } } run("init", "-b", "main") os.WriteFile(filepath.Join(work, "f.txt"), []byte("one\ntwo\n"), 0o644) run("add", ".") run("commit", "-m", "first") os.WriteFile(filepath.Join(work, "f.txt"), []byte("one\nthree\n"), 0o644) run("commit", "-am", "second") repo, err := git.PlainOpen(work) if err != nil { t.Fatal(err) } head, _ := repo.Head() child, _ := repo.CommitObject(head.Hash()) parent, _ := child.Parent(0) patch, err := parent.Patch(child) if err != nil { t.Fatal(err) } html := string(Diff(patch)) for _, want := range []string{"diff-add", "diff-del", "file-head", "f.txt"} { if !strings.Contains(html, want) { t.Fatalf("diff html missing %q:\n%s", want, html) } } if strings.Contains(html, "style=") { t.Fatal("unexpected inline style in diff output") } }