diff --git a/internal/color/validate.go b/internal/color/validate.go index eef46c8..f443e61 100644 --- a/internal/color/validate.go +++ b/internal/color/validate.go @@ -1,8 +1,11 @@ package color -// IsHexColor reports whether value is a safe three- or six-digit hex color. +// IsHexColor reports whether value is a safe 3-, 4-, 6-, or 8-digit hex color. +// Eight-digit form is #RRGGBBAA (used by templates such as aether.zed.json). func IsHexColor(value string) bool { - if len(value) != 4 && len(value) != 7 { + switch len(value) { + case 4, 5, 7, 9: + default: return false } if value[0] != '#' { diff --git a/internal/color/validate_test.go b/internal/color/validate_test.go new file mode 100644 index 0000000..b862488 --- /dev/null +++ b/internal/color/validate_test.go @@ -0,0 +1,21 @@ +package color + +import "testing" + +func TestIsHexColor(t *testing.T) { + cases := map[string]bool{ + "#fff": true, + "#ffffff": true, + "#ffffffff": true, + "#FFFF": true, + "#ggg": false, + "#fffffff": false, + "ffffff": false, + "": false, + } + for in, want := range cases { + if got := IsHexColor(in); got != want { + t.Fatalf("IsHexColor(%q)=%v want %v", in, got, want) + } + } +}