109 lines
3.3 KiB
Go
109 lines
3.3 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)
|
|
}
|
|
}
|