Files
diple/highlight_test.go

123 lines
3.7 KiB
Go

package main
import (
"fmt"
"strings"
"testing"
"github.com/charmbracelet/x/ansi"
)
func TestHighlightDiffAddsOldAndNewLineNumbers(t *testing.T) {
lines := highlightDiff("main.go", "@@ -10,2 +20,2 @@\n unchanged\n-old\n+new", 20, 20, "RIGHT")
rendered := make([]string, 0, len(lines))
for _, line := range lines {
rendered = append(rendered, line.gutter+line.code)
}
plain := ansi.Strip(strings.Join(rendered, "\n"))
for _, want := range []string{"20 unchanged", "11 - old", "21 + new"} {
if !strings.Contains(plain, want) {
t.Fatalf("diff did not contain %q:\n%s", want, plain)
}
}
if !lines[1].selected {
t.Fatal("reviewed line was not marked for background highlighting")
}
}
func TestHighlightDiffOnlyShowsReviewedRangeAndContext(t *testing.T) {
var hunk strings.Builder
hunk.WriteString("@@ -1,30 +1,30 @@")
for i := 1; i <= 30; i++ {
fmt.Fprintf(&hunk, "\n line %d", i)
}
lines := highlightDiff("main.go", hunk.String(), 20, 20, "RIGHT")
rendered := make([]string, 0, len(lines))
for _, line := range lines {
rendered = append(rendered, line.gutter+line.code)
}
plain := ansi.Strip(strings.Join(rendered, "\n"))
if strings.Contains(plain, "line 1\n") || strings.Contains(plain, "line 30") {
t.Fatalf("unrelated parts of the hunk were rendered:\n%s", plain)
}
for _, want := range []string{"line 17", "line 20", "line 23"} {
if !strings.Contains(plain, want) {
t.Fatalf("review window did not contain %q:\n%s", want, plain)
}
}
selected := 0
for _, line := range lines {
if line.selected {
selected++
}
}
if selected != 1 {
t.Fatalf("selected lines = %d, want 1", selected)
}
if len(lines) > 11 {
t.Fatalf("review window contains %d lines, expected a compact excerpt", len(lines))
}
}
func TestHighlightDiffTargetsDeletedLineOnLeft(t *testing.T) {
lines := highlightDiff("main.go", "@@ -8,3 +8,2 @@\n keep\n-remove\n keep", 9, 9, "LEFT")
var plain strings.Builder
selected := false
for _, line := range lines {
plain.WriteString(ansi.Strip(line.gutter + line.code))
plain.WriteByte('\n')
if line.selected && strings.Contains(ansi.Strip(line.code), "remove") {
selected = true
}
}
if !strings.Contains(plain.String(), "9 - remove") || !selected {
t.Fatalf("deleted review line was not selected:\n%s", plain.String())
}
}
func TestHighlightDiffNeverFallsBackToUnrelatedCode(t *testing.T) {
lines := highlightDiff("main.go", "@@ -1,2 +1,2 @@\n unrelated one\n unrelated two", 100, 100, "RIGHT")
var plain strings.Builder
for _, line := range lines {
plain.WriteString(ansi.Strip(line.gutter + line.code))
plain.WriteByte('\n')
}
if strings.Contains(plain.String(), "unrelated one") ||
!strings.Contains(plain.String(), "original reviewed lines unavailable") {
t.Fatalf("viewer substituted unrelated code:\n%s", plain.String())
}
}
func TestHighlightDiffRemovesOnlyCommonIndent(t *testing.T) {
lines := highlightDiff(
"example.py",
"@@ -10,3 +10,3 @@\n if ready:\n run()\n finish()",
10, 12, "RIGHT",
)
var code []string
for _, line := range lines {
if line.gutter != "" {
code = append(code, ansi.Strip(line.code))
}
}
if got, want := strings.Join(code, "\n"), "if ready:\n run()\nfinish()"; got != want {
t.Fatalf("dedented code:\n%q\nwant:\n%q", got, want)
}
}
func TestHighlightDiffCacheReturnsIndependentSlices(t *testing.T) {
highlightedDiffs.clear()
first := highlightDiff("main.go", "@@ -1 +1 @@\n-old\n+new", 1, 1, "RIGHT")
if len(first) == 0 {
t.Fatal("highlighted diff is empty")
}
first[0].code = "mutated"
second := highlightDiff("main.go", "@@ -1 +1 @@\n-old\n+new", 1, 1, "RIGHT")
if len(second) == 0 || second[0].code == "mutated" {
t.Fatalf("cached highlighted diff shares caller storage: %#v", second)
}
}