1package diffview_test
2
3import (
4 _ "embed"
5 "testing"
6
7 "github.com/charmbracelet/x/exp/golden"
8 "github.com/opencode-ai/opencode/internal/exp/diffview"
9)
10
11//go:embed testdata/TestDefault.before
12var TestDefaultBefore string
13
14//go:embed testdata/TestDefault.after
15var TestDefaultAfter string
16
17//go:embed testdata/TestMultipleHunks.before
18var TestMultipleHunksBefore string
19
20//go:embed testdata/TestMultipleHunks.after
21var TestMultipleHunksAfter string
22
23//go:embed testdata/TestNarrow.before
24var TestNarrowBefore string
25
26//go:embed testdata/TestNarrow.after
27var TestNarrowAfter string
28
29func TestDefault(t *testing.T) {
30 dv := diffview.New().
31 Before("main.go", TestDefaultBefore).
32 After("main.go", TestDefaultAfter)
33
34 t.Run("LightMode", func(t *testing.T) {
35 dv = dv.Style(diffview.DefaultLightStyle)
36 golden.RequireEqual(t, []byte(dv.String()))
37 })
38
39 t.Run("DarkMode", func(t *testing.T) {
40 dv = dv.Style(diffview.DefaultDarkStyle)
41 golden.RequireEqual(t, []byte(dv.String()))
42 })
43}
44
45func TestNoLineNumbers(t *testing.T) {
46 dv := diffview.New().
47 Before("main.go", TestDefaultBefore).
48 After("main.go", TestDefaultAfter).
49 LineNumbers(false)
50
51 t.Run("LightMode", func(t *testing.T) {
52 dv = dv.Style(diffview.DefaultLightStyle)
53 golden.RequireEqual(t, []byte(dv.String()))
54 })
55
56 t.Run("DarkMode", func(t *testing.T) {
57 dv = dv.Style(diffview.DefaultDarkStyle)
58 golden.RequireEqual(t, []byte(dv.String()))
59 })
60}
61
62func TestMultipleHunks(t *testing.T) {
63 dv := diffview.New().
64 Before("main.go", TestMultipleHunksBefore).
65 After("main.go", TestMultipleHunksAfter)
66
67 t.Run("LightMode", func(t *testing.T) {
68 dv = dv.Style(diffview.DefaultLightStyle)
69 golden.RequireEqual(t, []byte(dv.String()))
70 })
71
72 t.Run("DarkMode", func(t *testing.T) {
73 dv = dv.Style(diffview.DefaultDarkStyle)
74 golden.RequireEqual(t, []byte(dv.String()))
75 })
76}
77
78func TestCustomContextLines(t *testing.T) {
79 dv := diffview.New().
80 Before("main.go", TestMultipleHunksBefore).
81 After("main.go", TestMultipleHunksAfter).
82 ContextLines(4)
83
84 t.Run("LightMode", func(t *testing.T) {
85 dv = dv.Style(diffview.DefaultLightStyle)
86 golden.RequireEqual(t, []byte(dv.String()))
87 })
88
89 t.Run("DarkMode", func(t *testing.T) {
90 dv = dv.Style(diffview.DefaultDarkStyle)
91 golden.RequireEqual(t, []byte(dv.String()))
92 })
93}
94
95func TestNarrow(t *testing.T) {
96 dv := diffview.New().
97 Before("text.txt", TestNarrowBefore).
98 After("text.txt", TestNarrowAfter)
99
100 t.Run("LightMode", func(t *testing.T) {
101 dv = dv.Style(diffview.DefaultLightStyle)
102 golden.RequireEqual(t, []byte(dv.String()))
103 })
104
105 t.Run("DarkMode", func(t *testing.T) {
106 dv = dv.Style(diffview.DefaultDarkStyle)
107 golden.RequireEqual(t, []byte(dv.String()))
108 })
109}