145 lines
3.3 KiB
Go
145 lines
3.3 KiB
Go
package zenutil
|
|
|
|
import (
|
|
"image/color"
|
|
"testing"
|
|
|
|
"golang.org/x/image/colornames"
|
|
)
|
|
|
|
func TestColor_names(t *testing.T) {
|
|
tests := []string{
|
|
"chocolate",
|
|
"lime",
|
|
"olive",
|
|
"orange",
|
|
"plum",
|
|
"salmon",
|
|
"tomato",
|
|
}
|
|
for _, test := range tests {
|
|
c1 := colornames.Map[test]
|
|
c2 := ParseColor(test)
|
|
c3 := ParseColor(UnparseColor(c1))
|
|
if !ColorEquals(c1, c2) {
|
|
t.Errorf("ParseColor(%s) = %v; want %v", test, c2, c1)
|
|
}
|
|
if !ColorEquals(c1, c3) {
|
|
t.Errorf("ParseColor(UnparseColor(%v)) = %v; want %v", c1, c3, c1)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestColor_colors(t *testing.T) {
|
|
tests := []color.Color{
|
|
color.Black,
|
|
color.White,
|
|
color.Opaque,
|
|
color.Transparent,
|
|
}
|
|
for _, test := range tests {
|
|
c := ParseColor(UnparseColor(test))
|
|
if !ColorEquals(c, test) {
|
|
t.Errorf("ParseColor(UnparseColor(%v)) = %v; want %v", test, c, test)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestColor_strings(t *testing.T) {
|
|
tests := []struct {
|
|
data string
|
|
want color.Color
|
|
}{
|
|
{"#000", color.Black},
|
|
{"#000f", color.Black},
|
|
{"#000000", color.Black},
|
|
{"#000000ff", color.Black},
|
|
{"#fff", color.White},
|
|
{"#ffff", color.White},
|
|
{"#ffffff", color.White},
|
|
{"#ffffffff", color.White},
|
|
{"#FFF", color.Opaque},
|
|
{"#FFFF", color.Opaque},
|
|
{"#FFFFFF", color.Opaque},
|
|
{"#FFFFFFFF", color.Opaque},
|
|
{"#0000", color.Transparent},
|
|
{"#00000000", color.Transparent},
|
|
{"#8888", color.NRGBA{0x88, 0x88, 0x88, 0x88}},
|
|
{"#80808080", color.NRGBA{0x80, 0x80, 0x80, 0x80}},
|
|
{"rgb(128,128,128)", color.NRGBA{0x80, 0x80, 0x80, 0xff}},
|
|
{"rgba(128,128,128,0)", color.NRGBA{0x80, 0x80, 0x80, 0x00}},
|
|
{"rgba(128,128,128,1)", color.NRGBA{0x80, 0x80, 0x80, 0xff}},
|
|
{"rgba(128,128,128,0.0)", color.NRGBA{0x80, 0x80, 0x80, 0x00}},
|
|
{"rgba(128,128,128,1.0)", color.NRGBA{0x80, 0x80, 0x80, 0xff}},
|
|
{"not a color", nil},
|
|
{"#0", nil},
|
|
{"#00", nil},
|
|
{"#000", color.Black},
|
|
{"#0000", color.Transparent},
|
|
{"#00000", nil},
|
|
{"#000000", color.Black},
|
|
{"#0000000", nil},
|
|
{"#00000000", color.Transparent},
|
|
{"#000000000", nil},
|
|
{"rgb(-1,-1,-1)", nil},
|
|
{"rgb(256,256,256)", nil},
|
|
{"rgb(128,128,128,0.5)", nil},
|
|
{"rgb(127.5,127.5,127.5)", nil},
|
|
{"rgba(127.5,127.5,127.5,0.5)", nil},
|
|
{"rgba(128,128,128)", nil},
|
|
}
|
|
for _, test := range tests {
|
|
c := ParseColor(test.data)
|
|
if !ColorEquals(c, test.want) {
|
|
t.Errorf("ParseColor(%s) = %v; want %v", test.data, c, test.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func FuzzParseColor(f *testing.F) {
|
|
f.Add("#000")
|
|
f.Add("#000f")
|
|
f.Add("#000000")
|
|
f.Add("#000000ff")
|
|
f.Add("#fff")
|
|
f.Add("#ffff")
|
|
f.Add("#ffffff")
|
|
f.Add("#ffffffff")
|
|
f.Add("#FFF")
|
|
f.Add("#FFFF")
|
|
f.Add("#FFFFFF")
|
|
f.Add("#FFFFFFFF")
|
|
f.Add("#0")
|
|
f.Add("#00")
|
|
f.Add("#000")
|
|
f.Add("#0000")
|
|
f.Add("#00000")
|
|
f.Add("#000000")
|
|
f.Add("#0000000")
|
|
f.Add("#00000000")
|
|
f.Add("#000000000")
|
|
f.Add("#8888")
|
|
f.Add("#80808080")
|
|
f.Add("rgb(-1,-1,-1)")
|
|
f.Add("rgb(128,128,128)")
|
|
f.Add("rgb(256,256,256)")
|
|
f.Add("rgb(128,128,128,0.5)")
|
|
f.Add("rgb(127.5,127.5,127.5)")
|
|
f.Add("rgba(128,128,128)")
|
|
f.Add("rgba(128,128,128,0)")
|
|
f.Add("rgba(128,128,128,1)")
|
|
f.Add("rgba(128,128,128,0.0)")
|
|
f.Add("rgba(128,128,128,0.5)")
|
|
f.Add("rgba(128,128,128,1.0)")
|
|
f.Add("rgba(127.5,127.5,127.5,0.5)")
|
|
f.Add("not a color")
|
|
f.Add("")
|
|
|
|
for _, name := range colornames.Names {
|
|
f.Add(name)
|
|
}
|
|
|
|
f.Fuzz(func(t *testing.T, s string) {
|
|
ParseColor(s)
|
|
})
|
|
}
|