Commit | Line | Data |
---|---|---|
6a1aa64f DV |
1 | if (typeof(dojo) != 'undefined') { dojo.require('MochiKit.Color'); } |
2 | if (typeof(JSAN) != 'undefined') { JSAN.use('MochiKit.Color'); } | |
3 | if (typeof(tests) == 'undefined') { tests = {}; } | |
4 | ||
5 | tests.test_Color = function (t) { | |
6 | var approx = function (a, b, msg) { | |
7 | return t.is(a.toPrecision(4), b.toPrecision(4), msg); | |
8 | }; | |
9 | ||
10 | t.is( Color.whiteColor().toHexString(), "#ffffff", "whiteColor has right hex" ); | |
11 | t.is( Color.blackColor().toHexString(), "#000000", "blackColor has right hex" ); | |
12 | t.is( Color.blueColor().toHexString(), "#0000ff", "blueColor has right hex" ); | |
13 | t.is( Color.redColor().toHexString(), "#ff0000", "redColor has right hex" ); | |
14 | t.is( Color.greenColor().toHexString(), "#00ff00", "greenColor has right hex" ); | |
15 | t.is( compare(Color.whiteColor(), Color.whiteColor()), 0, "default colors compare right" ); | |
16 | t.ok( Color.whiteColor() == Color.whiteColor(), "default colors are interned" ); | |
17 | t.ok( Color.whiteColor().toRGBString(), "rgb(255,255,255)", "toRGBString white" ); | |
18 | t.ok( Color.blueColor().toRGBString(), "rgb(0,0,255)", "toRGBString blue" ); | |
19 | t.is( Color.fromRGB(190/255, 222/255, 173/255).toHexString(), "#bedead", "fromRGB works" ); | |
20 | t.is( Color.fromRGB(226/255, 15.9/255, 182/255).toHexString(), "#e210b6", "fromRGB < 16 works" ); | |
21 | t.is( Color.fromRGB({r:190/255,g:222/255,b:173/255}).toHexString(), "#bedead", "alt fromRGB works" ); | |
22 | t.is( Color.fromHexString("#bedead").toHexString(), "#bedead", "round-trip hex" ); | |
23 | t.is( Color.fromString("#bedead").toHexString(), "#bedead", "round-trip string(hex)" ); | |
24 | t.is( Color.fromRGBString("rgb(190,222,173)").toHexString(), "#bedead", "round-trip rgb" ); | |
25 | t.is( Color.fromString("rgb(190,222,173)").toHexString(), "#bedead", "round-trip rgb" ); | |
26 | ||
27 | var hsl = Color.redColor().asHSL(); | |
28 | approx( hsl.h, 0.0, "red hsl.h" ); | |
29 | approx( hsl.s, 1.0, "red hsl.s" ); | |
30 | approx( hsl.l, 0.5, "red hsl.l" ); | |
31 | hsl = Color.fromRGB(0, 0, 0.5).asHSL(); | |
32 | approx( hsl.h, 2/3, "darkblue hsl.h" ); | |
33 | approx( hsl.s, 1.0, "darkblue hsl.s" ); | |
34 | approx( hsl.l, 0.25, "darkblue hsl.l" ); | |
35 | hsl = Color.fromString("#4169E1").asHSL(); | |
36 | approx( hsl.h, (5/8), "4169e1 h"); | |
37 | approx( hsl.s, (8/11), "4169e1 s"); | |
38 | approx( hsl.l, (29/51), "4169e1 l"); | |
39 | hsl = Color.fromString("#555544").asHSL(); | |
40 | approx( hsl.h, (1/6), "555544 h" ); | |
41 | approx( hsl.s, (1/9), "555544 s" ); | |
42 | approx( hsl.l, (3/10), "555544 l" ); | |
43 | hsl = Color.fromRGB(0.5, 1, 0.5).asHSL(); | |
44 | approx( hsl.h, 1/3, "aqua hsl.h" ); | |
45 | approx( hsl.s, 1.0, "aqua hsl.s" ); | |
46 | approx( hsl.l, 0.75, "aqua hsl.l" ); | |
47 | t.is( | |
48 | Color.fromHSL(hsl.h, hsl.s, hsl.l).toHexString(), | |
49 | Color.fromRGB(0.5, 1, 0.5).toHexString(), | |
50 | "fromHSL works with components" | |
51 | ); | |
52 | t.is( | |
53 | Color.fromHSL(hsl).toHexString(), | |
54 | Color.fromRGB(0.5, 1, 0.5).toHexString(), | |
55 | "fromHSL alt form" | |
56 | ); | |
57 | t.is( | |
58 | Color.fromString("hsl(120,100%,75%)").toHexString(), | |
59 | "#80ff80", | |
60 | "fromHSLString" | |
61 | ); | |
62 | t.is( | |
63 | Color.fromRGB(0.5, 1, 0.5).toHSLString(), | |
64 | "hsl(120,100.0%,75.00%)", | |
65 | "toHSLString" | |
66 | ); | |
67 | t.is( Color.fromHSL(0, 0, 0).toHexString(), "#000000", "fromHSL to black" ); | |
68 | hsl = Color.blackColor().asHSL(); | |
69 | approx( hsl.h, 0.0, "black hsl.h" ); | |
70 | approx( hsl.s, 0.0, "black hsl.s" ); | |
71 | approx( hsl.l, 0.0, "black hsl.l" ); | |
72 | hsl.h = 1.0; | |
73 | hsl = Color.blackColor().asHSL(); | |
74 | approx( hsl.h, 0.0, "asHSL returns copy" ); | |
75 | var rgb = Color.brownColor().asRGB(); | |
76 | approx( rgb.r, 153/255, "brown rgb.r" ); | |
77 | approx( rgb.g, 102/255, "brown rgb.g" ); | |
78 | approx( rgb.b, 51/255, "brown rgb.b" ); | |
79 | rgb.r = 0; | |
80 | rgb = Color.brownColor().asRGB(); | |
81 | approx( rgb.r, 153/255, "asRGB returns copy" ); | |
82 | ||
83 | t.is( Color.fromName("aqua").toHexString(), "#00ffff", "aqua fromName" ); | |
84 | t.is( Color.fromString("aqua").toHexString(), "#00ffff", "aqua fromString" ); | |
85 | t.is( Color.fromName("transparent"), Color.transparentColor(), "transparent fromName" ); | |
86 | t.is( Color.fromString("transparent"), Color.transparentColor(), "transparent fromString" ); | |
87 | t.is( Color.transparentColor().toRGBString(), "rgba(0,0,0,0)", "transparent toRGBString" ); | |
88 | t.is( Color.fromRGBString("rgba( 0, 255, 255, 50%)").asRGB().a, 0.5, "rgba parsing alpha correctly" ); | |
89 | t.is( Color.fromRGBString("rgba( 0, 255, 255, 50%)").toRGBString(), "rgba(0,255,255,0.5)", "rgba output correctly" ); | |
90 | t.is( Color.fromRGBString("rgba( 0, 255, 255, 1)").toHexString(), "#00ffff", "fromRGBString with spaces and alpha" ); | |
91 | t.is( Color.fromRGBString("rgb( 0, 255, 255)").toHexString(), "#00ffff", "fromRGBString with spaces" ); | |
92 | t.is( Color.fromRGBString("rgb( 0, 100%, 255)").toHexString(), "#00ffff", "fromRGBString with percents" ); | |
93 | ||
94 | var hsv = Color.redColor().asHSV(); | |
95 | approx( hsv.h, 0.0, "red hsv.h" ); | |
96 | approx( hsv.s, 1.0, "red hsv.s" ); | |
97 | approx( hsv.v, 1.0, "red hsv.v" ); | |
98 | t.is( Color.fromHSV(hsv).toHexString(), Color.redColor().toHexString(), "red hexstring" ); | |
99 | hsv = Color.fromRGB(0, 0, 0.5).asHSV(); | |
100 | approx( hsv.h, 2/3, "darkblue hsv.h" ); | |
101 | approx( hsv.s, 1.0, "darkblue hsv.s" ); | |
102 | approx( hsv.v, 0.5, "darkblue hsv.v" ); | |
103 | t.is( Color.fromHSV(hsv).toHexString(), Color.fromRGB(0, 0, 0.5).toHexString(), "darkblue hexstring" ); | |
104 | hsv = Color.fromString("#4169E1").asHSV(); | |
105 | approx( hsv.h, 5/8, "4169e1 h"); | |
106 | approx( hsv.s, 32/45, "4169e1 s"); | |
107 | approx( hsv.v, 15/17, "4169e1 l"); | |
108 | t.is( Color.fromHSV(hsv).toHexString(), "#4169e1", "4169e1 hexstring" ); | |
109 | hsv = Color.fromString("#555544").asHSV(); | |
110 | approx( hsv.h, 1/6, "555544 h" ); | |
111 | approx( hsv.s, 1/5, "555544 s" ); | |
112 | approx( hsv.v, 1/3, "555544 l" ); | |
113 | t.is( Color.fromHSV(hsv).toHexString(), "#555544", "555544 hexstring" ); | |
114 | hsv = Color.fromRGB(0.5, 1, 0.5).asHSV(); | |
115 | approx( hsv.h, 1/3, "aqua hsv.h" ); | |
116 | approx( hsv.s, 0.5, "aqua hsv.s" ); | |
117 | approx( hsv.v, 1, "aqua hsv.v" ); | |
118 | t.is( | |
119 | Color.fromHSV(hsv.h, hsv.s, hsv.v).toHexString(), | |
120 | Color.fromRGB(0.5, 1, 0.5).toHexString(), | |
121 | "fromHSV works with components" | |
122 | ); | |
123 | t.is( | |
124 | Color.fromHSV(hsv).toHexString(), | |
125 | Color.fromRGB(0.5, 1, 0.5).toHexString(), | |
126 | "fromHSV alt form" | |
127 | ); | |
128 | hsv = Color.fromRGB(1, 1, 1).asHSV() | |
129 | approx( hsv.h, 0, 'white hsv.h' ); | |
130 | approx( hsv.s, 0, 'white hsv.s' ); | |
131 | approx( hsv.v, 1, 'white hsv.v' ); | |
132 | t.is( | |
133 | Color.fromHSV(0, 0, 1).toHexString(), | |
134 | '#ffffff', | |
135 | 'HSV saturation' | |
136 | ); | |
137 | }; |