summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/diff/diff_test.go
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-05-30 20:47:56 -0400
committerDax Raad <[email protected]>2025-05-30 20:48:36 -0400
commitf3da73553c45f17e04b1e77cb13eb0fca714d1bd (patch)
treea24317a19e1ab2a89da50db669dc6894f15d00d1 /packages/tui/internal/diff/diff_test.go
parent9a26b3058ffc1023e5c7e54b6d571c903d15888e (diff)
downloadopencode-f3da73553c45f17e04b1e77cb13eb0fca714d1bd.tar.gz
opencode-f3da73553c45f17e04b1e77cb13eb0fca714d1bd.zip
sync
Diffstat (limited to 'packages/tui/internal/diff/diff_test.go')
-rw-r--r--packages/tui/internal/diff/diff_test.go103
1 files changed, 103 insertions, 0 deletions
diff --git a/packages/tui/internal/diff/diff_test.go b/packages/tui/internal/diff/diff_test.go
new file mode 100644
index 000000000..4c014e45c
--- /dev/null
+++ b/packages/tui/internal/diff/diff_test.go
@@ -0,0 +1,103 @@
+package diff
+
+import (
+ "fmt"
+ "testing"
+
+ "github.com/charmbracelet/lipgloss"
+ "github.com/stretchr/testify/assert"
+)
+
+// TestApplyHighlighting tests the applyHighlighting function with various ANSI sequences
+func TestApplyHighlighting(t *testing.T) {
+ t.Parallel()
+
+ // Mock theme colors for testing
+ mockHighlightBg := lipgloss.AdaptiveColor{
+ Dark: "#FF0000", // Red background for highlighting
+ Light: "#FF0000",
+ }
+
+ // Test cases
+ tests := []struct {
+ name string
+ content string
+ segments []Segment
+ segmentType LineType
+ expectContains string
+ }{
+ {
+ name: "Simple text with no ANSI",
+ content: "This is a test",
+ segments: []Segment{{Start: 0, End: 4, Type: LineAdded}},
+ segmentType: LineAdded,
+ // Should contain full reset sequence after highlighting
+ expectContains: "\x1b[0m",
+ },
+ {
+ name: "Text with existing ANSI foreground",
+ content: "This \x1b[32mis\x1b[0m a test", // "is" in green
+ segments: []Segment{{Start: 5, End: 7, Type: LineAdded}},
+ segmentType: LineAdded,
+ // Should contain full reset sequence after highlighting
+ expectContains: "\x1b[0m",
+ },
+ {
+ name: "Text with existing ANSI background",
+ content: "This \x1b[42mis\x1b[0m a test", // "is" with green background
+ segments: []Segment{{Start: 5, End: 7, Type: LineAdded}},
+ segmentType: LineAdded,
+ // Should contain full reset sequence after highlighting
+ expectContains: "\x1b[0m",
+ },
+ {
+ name: "Text with complex ANSI styling",
+ content: "This \x1b[1;32;45mis\x1b[0m a test", // "is" bold green on magenta
+ segments: []Segment{{Start: 5, End: 7, Type: LineAdded}},
+ segmentType: LineAdded,
+ // Should contain full reset sequence after highlighting
+ expectContains: "\x1b[0m",
+ },
+ }
+
+ for _, tc := range tests {
+ tc := tc // Capture range variable for parallel testing
+ t.Run(tc.name, func(t *testing.T) {
+ t.Parallel()
+ result := applyHighlighting(tc.content, tc.segments, tc.segmentType, mockHighlightBg)
+
+ // Verify the result contains the expected sequence
+ assert.Contains(t, result, tc.expectContains,
+ "Result should contain full reset sequence")
+
+ // Print the result for manual inspection if needed
+ if t.Failed() {
+ fmt.Printf("Original: %q\nResult: %q\n", tc.content, result)
+ }
+ })
+ }
+}
+
+// TestApplyHighlightingWithMultipleSegments tests highlighting multiple segments
+func TestApplyHighlightingWithMultipleSegments(t *testing.T) {
+ t.Parallel()
+
+ // Mock theme colors for testing
+ mockHighlightBg := lipgloss.AdaptiveColor{
+ Dark: "#FF0000", // Red background for highlighting
+ Light: "#FF0000",
+ }
+
+ content := "This is a test with multiple segments to highlight"
+ segments := []Segment{
+ {Start: 0, End: 4, Type: LineAdded}, // "This"
+ {Start: 8, End: 9, Type: LineAdded}, // "a"
+ {Start: 15, End: 23, Type: LineAdded}, // "multiple"
+ }
+
+ result := applyHighlighting(content, segments, LineAdded, mockHighlightBg)
+
+ // Verify the result contains the full reset sequence
+ assert.Contains(t, result, "\x1b[0m",
+ "Result should contain full reset sequence")
+} \ No newline at end of file