package git import ( "reflect" "testing" ) func TestBlame(t *testing.T) { t.Parallel() repo := createTestRepo(t) defer cleanupTestRepo(t, repo) commitId1, _ := seedTestRepo(t, repo) commitId2, _ := updateReadme(t, repo, "foo\nbar\nbaz\n") opts := BlameOptions{ NewestCommit: commitId2, OldestCommit: nil, MinLine: 1, MaxLine: 3, } blame, err := repo.BlameFile("README", &opts) checkFatal(t, err) defer blame.Free() if blame.HunkCount() != 2 { t.Errorf("got hunk count %d, want 2", blame.HunkCount()) } wantHunk1 := BlameHunk{ LinesInHunk: 1, FinalCommitId: commitId1, FinalStartLineNumber: 1, OrigCommitId: commitId1, OrigPath: "README", OrigStartLineNumber: 1, Boundary: true, } wantHunk2 := BlameHunk{ LinesInHunk: 2, FinalCommitId: commitId2, FinalStartLineNumber: 2, OrigCommitId: commitId2, OrigPath: "README", OrigStartLineNumber: 2, Boundary: false, } hunk1, err := blame.HunkByIndex(0) checkFatal(t, err) checkHunk(t, "index 0", hunk1, wantHunk1) hunk2, err := blame.HunkByIndex(1) checkFatal(t, err) checkHunk(t, "index 1", hunk2, wantHunk2) hunkLine1, err := blame.HunkByLine(1) checkFatal(t, err) checkHunk(t, "line 1", hunkLine1, wantHunk1) hunkLine2, err := blame.HunkByLine(3) checkFatal(t, err) checkHunk(t, "line 2", hunkLine2, wantHunk2) } func checkHunk(t *testing.T, label string, hunk, want BlameHunk) { hunk.FinalSignature = nil want.FinalSignature = nil hunk.OrigSignature = nil want.OrigSignature = nil if !reflect.DeepEqual(hunk, want) { t.Fatalf("%s: got hunk %+v, want %+v", label, hunk, want) } }