|
1 require("../env"); |
|
2 require("../../d3"); |
|
3 |
|
4 var vows = require("vows"), |
|
5 assert = require("assert"); |
|
6 |
|
7 var suite = vows.describe("d3.rgb"); |
|
8 |
|
9 suite.addBatch({ |
|
10 "rgb": { |
|
11 topic: function() { |
|
12 return d3.rgb; |
|
13 }, |
|
14 "floors channel values": function(rgb) { |
|
15 assert.rgbEqual(rgb(1.2, 2.6, 42.9), 1, 2, 42); |
|
16 }, |
|
17 "does not clamp channel values": function(rgb) { |
|
18 assert.rgbEqual(rgb(-10, -20, -30), -10, -20, -30); |
|
19 assert.rgbEqual(rgb(300, 400, 500), 300, 400, 500); |
|
20 }, |
|
21 "converts string channel values to numbers": function(rgb) { |
|
22 assert.rgbEqual(rgb("12", "34", "56"), 12, 34, 56); |
|
23 }, |
|
24 "converts null channel values to zero": function(rgb) { |
|
25 assert.rgbEqual(rgb(null, null, null), 0, 0, 0); |
|
26 }, |
|
27 "exposes r, g and b properties": function(rgb) { |
|
28 var color = rgb("#abc"); |
|
29 assert.equal(color.r, 170); |
|
30 assert.equal(color.g, 187); |
|
31 assert.equal(color.b, 204); |
|
32 }, |
|
33 "changing r, g or b affects the string format": function(rgb) { |
|
34 var color = rgb("#abc"); |
|
35 color.r++; |
|
36 color.g++; |
|
37 color.b++; |
|
38 assert.equal(color + "", "#abbccd"); |
|
39 }, |
|
40 "parses hexadecimal shorthand format (e.g., \"#abc\")": function(rgb) { |
|
41 assert.rgbEqual(rgb("#abc"), 170, 187, 204); |
|
42 }, |
|
43 "parses hexadecimal format (e.g., \"#abcdef\")": function(rgb) { |
|
44 assert.rgbEqual(rgb("#abcdef"), 171, 205, 239); |
|
45 }, |
|
46 "parses RGB format (e.g., \"rgb(12, 34, 56)\")": function(rgb) { |
|
47 assert.rgbEqual(rgb("rgb(12, 34, 56)"), 12, 34, 56); |
|
48 }, |
|
49 "parses color names (e.g., \"moccasin\")": function(rgb) { |
|
50 assert.rgbEqual(rgb("moccasin"), 255, 228, 181); |
|
51 assert.rgbEqual(rgb("aliceblue"), 240, 248, 255); |
|
52 assert.rgbEqual(rgb("yellow"), 255, 255, 0); |
|
53 }, |
|
54 "parses and converts HSL format (e.g., \"hsl(60, 100%, 20%)\")": function(rgb) { |
|
55 assert.rgbEqual(rgb("hsl(60, 100%, 20%)"), 102, 102, 0); |
|
56 }, |
|
57 "can convert from RGB": function(rgb) { |
|
58 assert.rgbEqual(rgb(d3.rgb(12, 34, 56)), 12, 34, 56); |
|
59 }, |
|
60 "can convert from HSL": function(rgb) { |
|
61 assert.rgbEqual(rgb(d3.hsl(0, 1, .5)), 255, 0, 0); |
|
62 }, |
|
63 "can convert to HSL": function(rgb) { |
|
64 assert.hslEqual(rgb("red").hsl(), 0, 1, .5); |
|
65 }, |
|
66 "can derive a brighter color": function(rgb) { |
|
67 assert.rgbEqual(rgb("brown").brighter(), 235, 60, 60); |
|
68 assert.rgbEqual(rgb("brown").brighter(.5), 197, 50, 50); |
|
69 assert.rgbEqual(rgb("brown").brighter(1), 235, 60, 60); |
|
70 assert.rgbEqual(rgb("brown").brighter(2), 255, 85, 85); |
|
71 }, |
|
72 "can derive a darker color": function(rgb) { |
|
73 assert.rgbEqual(rgb("coral").darker(), 178, 88, 56); |
|
74 assert.rgbEqual(rgb("coral").darker(.5), 213, 106, 66); |
|
75 assert.rgbEqual(rgb("coral").darker(1), 178, 88, 56); |
|
76 assert.rgbEqual(rgb("coral").darker(2), 124, 62, 39); |
|
77 }, |
|
78 "string coercion returns hexadecimal format": function(rgb) { |
|
79 assert.strictEqual(rgb("#abcdef") + "", "#abcdef"); |
|
80 assert.strictEqual(rgb("moccasin") + "", "#ffe4b5"); |
|
81 assert.strictEqual(rgb("hsl(60, 100%, 20%)") + "", "#666600"); |
|
82 assert.strictEqual(rgb("rgb(12, 34, 56)") + "", "#0c2238"); |
|
83 assert.strictEqual(rgb(d3.rgb(12, 34, 56)) + "", "#0c2238"); |
|
84 assert.strictEqual(rgb(d3.hsl(60, 1, .2)) + "", "#666600"); |
|
85 } |
|
86 } |
|
87 }); |
|
88 |
|
89 suite.export(module); |