//
// Copyright (c) 2008, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
// 16 Jun 08 Brian Frank Creation
//
**
** ColorTest
**
@Js
class ColorTest : Test
{
Void testMake()
{
c := Color(0xaabbcc)
verifyEq(c.argb, 0xffaabbcc)
verifyEq(c.rgb, 0xaabbcc)
verifyColor(c, 0xff, 0xaa, 0xbb, 0xcc, "#aabbcc")
c = Color(0xaabbccdd, true)
verifyEq(c.argb, 0xaabbccdd)
verifyEq(c.rgb, 0xbbccdd)
verifyColor(c, 0xaa, 0xbb, 0xcc, 0xdd, "#aabbccdd")
c = Color.makeArgb(1, 2, 3, 4)
verifyEq(c.argb, 0x01020304)
verifyEq(c.rgb, 0x020304)
verifyColor(c, 1, 2, 3, 4, "#01020304")
c = Color.makeRgb(0x33, 0x22, 0x11)
verifyEq(c.argb, 0xff332211)
verifyEq(c.rgb, 0x332211)
verifyColor(c, 0xff, 0x33, 0x22, 0x11, "#332211")
}
Void verifyColor(Color c, Int a, Int r, Int g, Int b, Str s)
{
verifyEq(c.a, a)
verifyEq(c.r, r)
verifyEq(c.g, g)
verifyEq(c.b, b)
verifyEq(c.toStr, s)
verifyEq(c, Color.fromStr(c.toStr))
verifyEq(c, Buf().writeObj(c).flip.readObj)
verifyEq(c, Color.makeArgb(a, r, g, b))
}
Void testFromStr()
{
verifyEq(Color.fromStr("#abc"), Color(0xaabbcc))
verifyEq(Color.fromStr("#345"), Color(0x334455))
verifyEq(Color.fromStr("#a4b5c6"), Color(0xa4b5c6))
verifyEq(Color.fromStr("#dea4b5c6"), Color(0xdea4b5c6, true))
verifyEq(Color.fromStr("#abdc", false), null)
verifyErr(ParseErr#) { x := Color.fromStr("abc") }
verifyErr(ParseErr#) { x := Color.fromStr("#xyz", true) }
}
Void testEquals()
{
verifyEq(Color(0xaabbcc), Color(0xaabbcc))
verifyEq(Color(0xaabbccdd, true), Color(0xaabbccdd, true))
verifyNotEq(Color(0xaa0bcc), Color(0xaabbcc))
verifyNotEq(Color(0xaabbcc), Color(0xaabbcc, true))
verifyNotEq(Color(0x40aabbcc, true), Color(0x30aabbcc, true))
}
Void testToStr()
{
verifyEq(Color.black.toStr, "#000000")
verifyEq(Color.red.toStr, "#ff0000")
verifyEq(Color.blue.toStr, "#0000ff")
verifyEq(Color.orange.toStr, "#ffa500")
}
Void testToCss()
{
verifyEq(Color(0xaabbcc).toCss, "#aabbcc")
verifyEq(Color(0x40aabbcc,true).toCss, "rgba(170,187,204,0.25)")
}
Void testHsv()
{
verifyHsv(0x000000, 0f, 0f, 0f)
verifyHsv(0xffffff, 0f, 0f, 1f)
verifyHsv(0xff0000, 0f, 1f, 1f)
verifyHsv(0x00ff00, 120f, 1f, 1f)
verifyHsv(0x0000ff, 240f, 1f, 1f)
verifyHsv(0xffff00, 60f, 1f, 1f)
verifyHsv(0x00ffff, 180f, 1f, 1f)
verifyHsv(0xff00ff, 300f, 1f, 1f)
verifyHsv(0x6496c8, 210f, 0.5f, 0.78f)
verifyHsv(0x32c850, 132f, 0.75f, 0.78f)
}
Void verifyHsv(Int rgb, Float h, Float s, Float v)
{
c := Color(rgb, false)
verify(c.h.approx(h, 0.1f))
verify(c.s.approx(s, 0.01f))
verify(c.v.approx(v, 0.01f))
verifyEq(c, Color.makeHsv(c.h, c.s, c.v))
}
}