diffview_test.go

  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
 29type (
 30	TestFunc  func(dv *diffview.DiffView) *diffview.DiffView
 31	TestFuncs map[string]TestFunc
 32)
 33
 34var (
 35	UnifiedFunc = func(dv *diffview.DiffView) *diffview.DiffView {
 36		return dv.Unified()
 37	}
 38
 39	DefaultFunc = func(dv *diffview.DiffView) *diffview.DiffView {
 40		return dv.
 41			Before("main.go", TestDefaultBefore).
 42			After("main.go", TestDefaultAfter)
 43	}
 44	NoLineNumbersFunc = func(dv *diffview.DiffView) *diffview.DiffView {
 45		return dv.
 46			Before("main.go", TestDefaultBefore).
 47			After("main.go", TestDefaultAfter).
 48			LineNumbers(false)
 49	}
 50	MultipleHunksFunc = func(dv *diffview.DiffView) *diffview.DiffView {
 51		return dv.
 52			Before("main.go", TestMultipleHunksBefore).
 53			After("main.go", TestMultipleHunksAfter)
 54	}
 55	CustomContextLinesFunc = func(dv *diffview.DiffView) *diffview.DiffView {
 56		return dv.
 57			Before("main.go", TestMultipleHunksBefore).
 58			After("main.go", TestMultipleHunksAfter).
 59			ContextLines(4)
 60	}
 61	NarrowFunc = func(dv *diffview.DiffView) *diffview.DiffView {
 62		return dv.
 63			Before("text.txt", TestNarrowBefore).
 64			After("text.txt", TestNarrowAfter)
 65	}
 66
 67	LightModeFunc = func(dv *diffview.DiffView) *diffview.DiffView {
 68		return dv.Style(diffview.DefaultLightStyle)
 69	}
 70	DarkModeFunc = func(dv *diffview.DiffView) *diffview.DiffView {
 71		return dv.Style(diffview.DefaultDarkStyle)
 72	}
 73
 74	LayoutFuncs = TestFuncs{
 75		"Unified": UnifiedFunc,
 76	}
 77	BehaviorFuncs = TestFuncs{
 78		"Default":            DefaultFunc,
 79		"NoLineNumbers":      NoLineNumbersFunc,
 80		"MultipleHunks":      MultipleHunksFunc,
 81		"CustomContextLines": CustomContextLinesFunc,
 82		"Narrow":             NarrowFunc,
 83	}
 84	ThemeFuncs = TestFuncs{
 85		"LightMode": LightModeFunc,
 86		"DarkMode":  DarkModeFunc,
 87	}
 88)
 89
 90func TestDiffView(t *testing.T) {
 91	for layoutName, layoutFunc := range LayoutFuncs {
 92		t.Run(layoutName, func(t *testing.T) {
 93			for behaviorName, behaviorFunc := range BehaviorFuncs {
 94				t.Run(behaviorName, func(t *testing.T) {
 95					for themeName, themeFunc := range ThemeFuncs {
 96						t.Run(themeName, func(t *testing.T) {
 97							dv := diffview.New()
 98							dv = layoutFunc(dv)
 99							dv = behaviorFunc(dv)
100							dv = themeFunc(dv)
101							golden.RequireEqual(t, []byte(dv.String()))
102						})
103					}
104				})
105			}
106		})
107	}
108}