initial working read only state
This commit is contained in:
108
highlight_test.go
Normal file
108
highlight_test.go
Normal file
@@ -0,0 +1,108 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user