Files
go-mxl-pattern-generator/internal/video/runner_test.go
T
2026-09-17 20:42:38 +03:00

78 lines
2.2 KiB
Go

package video
import (
"strings"
"testing"
"mxl-pattern-generator/internal/flowdef"
)
const testVideoID = "b3bb5be7-9fe9-4324-a5bb-4c70e1084449"
func testConfig(t *testing.T, overlay OverlayConfig) Config {
t.Helper()
definition, err := flowdef.NewV210Video(
testVideoID,
1920,
1080,
flowdef.Rational{Numerator: 50, Denominator: 1},
)
if err != nil {
t.Fatalf("NewV210Video: %v", err)
}
return Config{Definition: definition, Pattern: "ebu75", Overlay: overlay}
}
func TestBuildTextOverlayDisabled(t *testing.T) {
overlay, err := buildTextOverlay(testConfig(t, OverlayConfig{}))
if err != nil {
t.Fatalf("buildTextOverlay: %v", err)
}
if overlay != nil {
t.Fatal("buildTextOverlay returned an overlay for empty text")
}
}
func TestBuildTextOverlayPositioning(t *testing.T) {
tests := []struct {
name string
overlay OverlayConfig
}{
{name: "explicit", overlay: OverlayConfig{Text: "MXL", X: 120, Y: 48}},
{name: "preset", overlay: OverlayConfig{Text: "MXL", Position: "cc"}},
{name: "preset ignores explicit coordinates", overlay: OverlayConfig{Text: "MXL", X: -1, Y: -1, Position: "cc"}},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
overlay, err := buildTextOverlay(testConfig(t, tc.overlay))
if err != nil {
t.Fatalf("buildTextOverlay: %v", err)
}
if overlay == nil {
t.Fatal("buildTextOverlay returned nil")
}
})
}
}
func TestBuildTextOverlayRejectsInvalidPosition(t *testing.T) {
tests := []struct {
name string
overlay OverlayConfig
wantErrSub string
}{
{name: "negative", overlay: OverlayConfig{Text: "MXL", X: -6}, wantErrSub: "must not be negative"},
{name: "unaligned x", overlay: OverlayConfig{Text: "MXL", X: 7}, wantErrSub: "divisible by 6"},
{name: "right overflow", overlay: OverlayConfig{Text: "MXL", X: 1902}, wantErrSub: "does not fit"},
{name: "bottom overflow", overlay: OverlayConfig{Text: "MXL", Y: 1070}, wantErrSub: "does not fit"},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
_, err := buildTextOverlay(testConfig(t, tc.overlay))
if err == nil || !strings.Contains(err.Error(), tc.wantErrSub) {
t.Fatalf("error = %v, want substring %q", err, tc.wantErrSub)
}
})
}
}