Files
galahad2lcd/internal/cli/cli_test.go
T
Maksim Totmin 4c34f0bedc Initial commit: Go driver for the Lian Li Galahad II LCD
Streams H.264 to the Galahad II LCD via USB (gousb) with:
- ffmpeg CLI transcoding (no fragile FFmpeg C-ABI bindings)
- pure-Go Annex-B access-unit splitting
- framerate pacing with graceful shutdown and USB reconnect
- TOML config, cobra CLI, structured slog logging, unit tests
2026-08-19 12:03:54 +07:00

108 lines
2.8 KiB
Go

package cli
import (
"os"
"path/filepath"
"testing"
"github.com/spf13/cobra"
"galahad2lcd/internal/config"
)
func TestApplyOverridesChangedFlags(t *testing.T) {
dir := t.TempDir()
src := filepath.Join(dir, "media.gif")
if err := os.WriteFile(src, []byte("gif"), 0o644); err != nil {
t.Fatal(err)
}
cmd := &cobra.Command{}
var input string
var rotate int
var speed, fps float64
cmd.Flags().StringVar(&input, "input", "", "")
cmd.Flags().IntVar(&rotate, "rotate", 0, "")
cmd.Flags().Float64Var(&speed, "speed", 0, "")
cmd.Flags().Float64Var(&fps, "fps", 0, "")
_ = cmd.Flags().Set("input", src)
_ = cmd.Flags().Set("rotate", "180")
_ = cmd.Flags().Set("speed", "1.5")
_ = cmd.Flags().Set("fps", "24")
cfg := config.Default()
if err := applyOverrides(cmd, &cfg, input, rotate, speed, fps); err != nil {
t.Fatalf("applyOverrides error = %v", err)
}
if cfg.Display.Input != src {
t.Errorf("input = %q, want %q", cfg.Display.Input, src)
}
if cfg.Display.Rotate != 180 {
t.Errorf("rotate = %d, want 180", cfg.Display.Rotate)
}
if cfg.Display.Speed != 1.5 {
t.Errorf("speed = %v, want 1.5", cfg.Display.Speed)
}
if cfg.Stream.FPS != 24 {
t.Errorf("fps = %v, want 24", cfg.Stream.FPS)
}
}
func TestApplyOverridesUnchangedFlags(t *testing.T) {
cmd := &cobra.Command{}
var input string
var rotate int
var speed, fps float64
cmd.Flags().StringVar(&input, "input", "", "")
cmd.Flags().IntVar(&rotate, "rotate", 0, "")
cmd.Flags().Float64Var(&speed, "speed", 0, "")
cmd.Flags().Float64Var(&fps, "fps", 0, "")
cfg := config.Default()
if err := applyOverrides(cmd, &cfg, input, rotate, speed, fps); err != nil {
t.Fatalf("applyOverrides error = %v", err)
}
if cfg.Display.Input != "" || cfg.Display.Rotate != 0 {
t.Errorf("unset flags changed config: %+v", cfg)
}
}
func TestResolveInput(t *testing.T) {
dir := t.TempDir()
file := filepath.Join(dir, "x.gif")
if err := os.WriteFile(file, nil, 0o644); err != nil {
t.Fatal(err)
}
abs, err := resolveInput(file)
if err != nil {
t.Fatalf("resolveInput error = %v", err)
}
if abs != file {
t.Errorf("resolveInput = %q, want %q", abs, file)
}
if _, err := resolveInput(filepath.Join(dir, "missing.gif")); err == nil {
t.Error("resolveInput returned nil error for missing file")
}
if _, err := resolveInput(dir); err == nil {
t.Error("resolveInput returned nil error for a directory")
}
}
func TestRootVersionCommand(t *testing.T) {
root := newRootCmd("1.2.3")
root.SetArgs([]string{"version"})
if err := root.Execute(); err != nil {
t.Fatalf("version command error = %v", err)
}
}
func TestRootSetCommandRequiresFlags(t *testing.T) {
root := newRootCmd("dev")
root.SetArgs([]string{"set"})
if err := root.Execute(); err == nil {
t.Error("set with no flags returned nil error")
}
}