Files
wehub-resource-sync ead81af521
CI / go (push) Waiting to run
CI / build (darwin, macos-14) (push) Waiting to run
CI / build (windows, windows-2025) (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Failing after 0s
chore: import upstream snapshot with attribution
2026-07-13 12:31:13 +08:00

126 lines
2.8 KiB
Go

package theme
import (
"strings"
"testing"
)
func TestDefault(t *testing.T) {
d := Default()
if d.Name != DefaultName {
t.Errorf("Name = %q, want %q", d.Name, DefaultName)
}
if !d.IsDefault() {
t.Error("IsDefault() should be true for default theme")
}
}
func TestIsDefault(t *testing.T) {
tests := []struct {
name string
theme Theme
want bool
}{
{"empty hex values", Theme{Name: "Default"}, true},
{"has accent", Theme{Name: "Custom", Accent: "#ff0000"}, false},
{"has green", Theme{Name: "Custom", Green: "#00ff00"}, false},
{"has bright fg", Theme{Name: "Custom", BrightFG: "#ffffff"}, false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := tt.theme.IsDefault(); got != tt.want {
t.Errorf("IsDefault() = %v, want %v", got, tt.want)
}
})
}
}
func TestParse(t *testing.T) {
input := `# Solarized Dark theme
accent = "#268bd2"
bright_fg = "#93a1a1"
fg = "#839496"
green = "#859900"
yellow = "#b58900"
red = "#dc322f"
`
th, err := Parse("solarized-dark", strings.NewReader(input))
if err != nil {
t.Fatalf("Parse error: %v", err)
}
if th.Name != "solarized-dark" {
t.Errorf("Name = %q, want solarized-dark", th.Name)
}
if th.Accent != "#268bd2" {
t.Errorf("Accent = %q, want #268bd2", th.Accent)
}
if th.BrightFG != "#93a1a1" {
t.Errorf("BrightFG = %q, want #93a1a1", th.BrightFG)
}
if th.FG != "#839496" {
t.Errorf("FG = %q, want #839496", th.FG)
}
if th.Green != "#859900" {
t.Errorf("Green = %q, want #859900", th.Green)
}
if th.Yellow != "#b58900" {
t.Errorf("Yellow = %q, want #b58900", th.Yellow)
}
if th.Red != "#dc322f" {
t.Errorf("Red = %q, want #dc322f", th.Red)
}
}
func TestParseSkipsComments(t *testing.T) {
input := `# comment
accent = "#ff0000"
# another comment
`
th, err := Parse("test", strings.NewReader(input))
if err != nil {
t.Fatalf("Parse error: %v", err)
}
if th.Accent != "#ff0000" {
t.Errorf("Accent = %q, want #ff0000", th.Accent)
}
}
func TestParseEmpty(t *testing.T) {
th, err := Parse("empty", strings.NewReader(""))
if err != nil {
t.Fatalf("Parse error: %v", err)
}
if !th.IsDefault() {
t.Error("empty parse should produce default-like theme")
}
}
func TestParseStripsQuotes(t *testing.T) {
// Both single and double quotes should be stripped
input := `accent = '#ff0000'
fg = "#00ff00"
`
th, err := Parse("test", strings.NewReader(input))
if err != nil {
t.Fatalf("Parse error: %v", err)
}
if th.Accent != "#ff0000" {
t.Errorf("Accent = %q, want #ff0000", th.Accent)
}
if th.FG != "#00ff00" {
t.Errorf("FG = %q, want #00ff00", th.FG)
}
}
func TestParsedThemeNotDefault(t *testing.T) {
input := `accent = "#ff0000"`
th, err := Parse("custom", strings.NewReader(input))
if err != nil {
t.Fatalf("Parse error: %v", err)
}
if th.IsDefault() {
t.Error("theme with accent should not be IsDefault()")
}
}