83 lines
2.3 KiB
Go
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)
|
|
}
|
|
}
|