Files
tia-love/internal/ui/theme/theme_test.go
T

83 lines
2.3 KiB
Go

package theme
import (
"testing"
)
func TestBuildPaletteMapping(t *testing.T) {
mo := build(ModeDark, "mauve", true)
if mo.Base != "#1e1e2e" || mo.Text != "#cdd6f4" || mo.Accent != "#cba6f7" {
t.Fatalf("mocha salah: %+v", mo)
}
if mo.Success != "#a6e3a1" || mo.Danger != "#f38ba8" || mo.Warning != "#f9e2af" {
t.Fatalf("token status salah: %+v", mo)
}
la := build(ModeLight, "mauve", true) // mode light menang atas flag dark
if la.Base != "#eff1f5" || la.Text != "#4c4f69" || la.Accent != "#8839ef" {
t.Fatalf("latte salah: %+v", la)
}
au := build(ModeAuto, "mauve", false) // auto + bg terang → Latte
if au.Base != "#eff1f5" {
t.Fatalf("auto(terang) harus Latte: %+v", au)
}
au = build(ModeAuto, "mauve", true)
if au.Base != "#1e1e2e" {
t.Fatalf("auto(gelap) harus Mocha: %+v", au)
}
}
func TestAccentValidationAndAllAccents(t *testing.T) {
if th := build(ModeDark, "klingon", true); th.AccentName != "mauve" || th.Accent != "#cba6f7" {
t.Fatalf("aksen tak dikenal harus fallback mauve: %+v", th)
}
for _, a := range Accents {
th := build(ModeDark, a, true)
if th.Accent == "" || th.AccentName != a {
t.Fatalf("aksen %s tidak terpetakan", a)
}
}
}
func TestTerminalMode(t *testing.T) {
th := build(ModeTerminal, "green", true)
if th.Text != "" {
t.Fatalf("terminal: teks harus default (kosong), dapat %q", th.Text)
}
if th.Accent != "10" {
t.Fatalf("terminal: aksen green → ANSI 10, dapat %q", th.Accent)
}
if th.Danger != "9" || th.Warning != "11" || th.Info != "12" {
t.Fatalf("terminal: token status salah: %+v", th)
}
if paint := Color("").Paint("x"); paint != "x" {
t.Fatalf("warna kosong harus tanpa escape: %q", paint)
}
if paint := Color("9").Paint("x"); paint == "x" {
t.Fatal("warna ANSI harus menghasilkan escape")
}
}
func TestCycleMode(t *testing.T) {
order := []Mode{ModeAuto, ModeDark, ModeLight, ModeTerminal, ModeAuto}
m := ModeAuto
for i := 1; i < len(order); i++ {
m = CycleMode(m)
if m != order[i] {
t.Fatalf("cycle %d: dapat %s, mau %s", i, m, order[i])
}
}
}
func TestSetCurrent(t *testing.T) {
Set(ModeLight, "red")
if cur := Current(); cur.Base != "#eff1f5" || cur.AccentName != "red" {
t.Fatalf("Set tidak berlaku: %+v", cur)
}
Set("mode-rusak", "mauve") // fallback dark
if cur := Current(); cur.Mode != ModeDark {
t.Fatalf("mode rusak harus fallback dark: %+v", cur.Mode)
}
}