178 lines
3.7 KiB
Go
178 lines
3.7 KiB
Go
package theme
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
ui "github.com/gizak/termui"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestPaletteIndices(t *testing.T) {}
|
||
|
|
var want = map[Flavor]map[string]int{
|
||
|
|
Mocha: {
|
||
|
|
"rosewater": 224,
|
||
|
|
"flamingo": 224,
|
||
|
|
"pink": 218,
|
||
|
|
"mauve": 183,
|
||
|
|
"red": 211,
|
||
|
|
"maroon": 181,
|
||
|
|
"peach": 216,
|
||
|
|
"yellow": 223,
|
||
|
|
"green": 151,
|
||
|
|
"teal": 116,
|
||
|
|
"sky": 116,
|
||
|
|
"sapphire": 117,
|
||
|
|
"blue": 111,
|
||
|
|
"lavender": 147,
|
||
|
|
"text": 189,
|
||
|
|
"subtext1": 146,
|
||
|
|
"subtext0": 146,
|
||
|
|
"overlay2": 103,
|
||
|
|
"overlay1": 103,
|
||
|
|
"overlay0": 243,
|
||
|
|
"surface2": 241,
|
||
|
|
"surface1": 239,
|
||
|
|
"surface0": 237,
|
||
|
|
"base": 235,
|
||
|
|
"mantle": 234,
|
||
|
|
"crust": 233,
|
||
|
|
},
|
||
|
|
Frappe: {
|
||
|
|
"rosewater": 224,
|
||
|
|
"flamingo": 217,
|
||
|
|
"pink": 218,
|
||
|
|
"mauve": 182,
|
||
|
|
"red": 174,
|
||
|
|
"maroon": 175,
|
||
|
|
"peach": 216,
|
||
|
|
"yellow": 186,
|
||
|
|
"green": 150,
|
||
|
|
"teal": 115,
|
||
|
|
"sky": 116,
|
||
|
|
"sapphire": 110,
|
||
|
|
"blue": 111,
|
||
|
|
"lavender": 147,
|
||
|
|
"text": 189,
|
||
|
|
"subtext1": 146,
|
||
|
|
"subtext0": 146,
|
||
|
|
"overlay2": 109,
|
||
|
|
"overlay1": 103,
|
||
|
|
"overlay0": 243,
|
||
|
|
"surface2": 60,
|
||
|
|
"surface1": 59,
|
||
|
|
"surface0": 239,
|
||
|
|
"base": 237,
|
||
|
|
"mantle": 236,
|
||
|
|
"crust": 235,
|
||
|
|
},
|
||
|
|
Macchiato: {
|
||
|
|
"rosewater": 224,
|
||
|
|
"flamingo": 224,
|
||
|
|
"pink": 218,
|
||
|
|
"mauve": 183,
|
||
|
|
"red": 210,
|
||
|
|
"maroon": 211,
|
||
|
|
"peach": 216,
|
||
|
|
"yellow": 223,
|
||
|
|
"green": 150,
|
||
|
|
"teal": 116,
|
||
|
|
"sky": 116,
|
||
|
|
"sapphire": 116,
|
||
|
|
"blue": 111,
|
||
|
|
"lavender": 147,
|
||
|
|
"text": 189,
|
||
|
|
"subtext1": 146,
|
||
|
|
"subtext0": 146,
|
||
|
|
"overlay2": 103,
|
||
|
|
"overlay1": 103,
|
||
|
|
"overlay0": 243,
|
||
|
|
"surface2": 60,
|
||
|
|
"surface1": 240,
|
||
|
|
"surface0": 238,
|
||
|
|
"base": 236,
|
||
|
|
"mantle": 235,
|
||
|
|
"crust": 234,
|
||
|
|
},
|
||
|
|
Latte: {
|
||
|
|
"rosewater": 174,
|
||
|
|
"flamingo": 174,
|
||
|
|
"pink": 176,
|
||
|
|
"mauve": 99,
|
||
|
|
"red": 161,
|
||
|
|
"maroon": 167,
|
||
|
|
"peach": 202,
|
||
|
|
"yellow": 172,
|
||
|
|
"green": 70,
|
||
|
|
"teal": 30,
|
||
|
|
"sky": 38,
|
||
|
|
"sapphire": 37,
|
||
|
|
"blue": 27,
|
||
|
|
"lavender": 69,
|
||
|
|
"text": 240,
|
||
|
|
"subtext1": 60,
|
||
|
|
"subtext0": 243,
|
||
|
|
"overlay2": 102,
|
||
|
|
"overlay1": 246,
|
||
|
|
"overlay0": 248,
|
||
|
|
"surface2": 249,
|
||
|
|
"surface1": 7,
|
||
|
|
"surface0": 252,
|
||
|
|
"base": 255,
|
||
|
|
"mantle": 255,
|
||
|
|
"crust": 254,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPaletteColors(t *testing.T) {
|
||
|
|
for flavor, m := range want {
|
||
|
|
Set(flavor)
|
||
|
|
for name, idx := range m {
|
||
|
|
got := int(Color(name))
|
||
|
|
if got != idx+1 {
|
||
|
|
t.Errorf("%s/%s: Color=%d want %d", flavor, name, got, idx+1)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestSlotsResolve(t *testing.T) {
|
||
|
|
for _, f := range []Flavor{Mocha, Frappe, Macchiato, Latte} {
|
||
|
|
Set(f)
|
||
|
|
m := BuildColorMap()
|
||
|
|
for slot := range slots {
|
||
|
|
if _, ok := m[slot]; !ok { t.Fatalf("%s: missing slot %s", f, slot) }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestParseFlavor(t *testing.T) {
|
||
|
|
for _, s := range []string{"mocha","frappe","macchiato","latte"} {
|
||
|
|
if _, ok := ParseFlavor(s); !ok { t.Errorf("ParseFlavor(%s) failed", s) }
|
||
|
|
}
|
||
|
|
if _, ok := ParseFlavor("bogus"); ok { t.Error("bogus flavor accepted") }
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestTransparentSlots(t *testing.T) {
|
||
|
|
Set(Mocha)
|
||
|
|
SetOpaque(false)
|
||
|
|
for _, slot := range []string{"bg", "block.bg", "border.bg", "par.text.bg", "menu.text.bg"} {
|
||
|
|
if got := Attr(slot); got != ui.ColorDefault {
|
||
|
|
t.Errorf("transparent %s: got %d want ColorDefault(0)", slot, got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestOpaqueSlots(t *testing.T) {
|
||
|
|
Set(Mocha)
|
||
|
|
SetOpaque(true)
|
||
|
|
base := Color("base")
|
||
|
|
if base == 0 { t.Fatal("Color(base) should not be ColorDefault") }
|
||
|
|
for _, slot := range []string{"bg", "block.bg", "border.bg", "par.text.bg", "menu.text.bg"} {
|
||
|
|
if got := Attr(slot); got != base {
|
||
|
|
t.Errorf("opaque %s: got %d want base(%d)", slot, got, base)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
SetOpaque(false) // restore
|
||
|
|
}
|
||
|
|
|
||
|
|
var _ = ui.ColorDefault // keep import
|