color 0.1.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env ruby
2
+ #--
3
+ # Color
4
+ # Colour management with Ruby
5
+ # http://rubyforge.org/projects/color
6
+ # Version 1.4.0
7
+ #
8
+ # Licensed under a MIT-style licence. See Licence.txt in the main
9
+ # distribution for full licensing information.
10
+ #
11
+ # Copyright (c) 2005 - 2007 Austin Ziegler and Matt Lyon
12
+ #
13
+ # HSL Tests provided by Adam Johnson
14
+ #
15
+ # $Id: test_all.rb 55 2007-02-03 23:29:34Z austin $
16
+ #++
17
+
18
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
19
+ require 'test/unit'
20
+ require 'color'
21
+
22
+ module TestColor
23
+ class TestHSL < Test::Unit::TestCase
24
+ def setup
25
+ # @hsl = Color::HSL.new(262, 67, 42)
26
+ @hsl = Color::HSL.new(145, 20, 30)
27
+ # @rgb = Color::RGB.new(88, 35, 179)
28
+ end
29
+
30
+ def test_rgb_roundtrip_conversion
31
+ hsl = Color::HSL.new(262, 67, 42)
32
+ c = hsl.to_rgb.to_hsl
33
+ assert_in_delta hsl.h, c.h, Color::COLOR_TOLERANCE, "Hue"
34
+ assert_in_delta hsl.s, c.s, Color::COLOR_TOLERANCE, "Saturation"
35
+ assert_in_delta hsl.l, c.l, Color::COLOR_TOLERANCE, "Luminance"
36
+ end
37
+
38
+ def test_brightness
39
+ assert_in_delta 0.3, @hsl.brightness, Color::COLOR_TOLERANCE
40
+ end
41
+
42
+ def test_hue
43
+ assert_in_delta 0.4027, @hsl.h, Color::COLOR_TOLERANCE
44
+ assert_in_delta 145, @hsl.hue, Color::COLOR_TOLERANCE
45
+ assert_nothing_raised { @hsl.hue = 33 }
46
+ assert_in_delta 0.09167, @hsl.h, Color::COLOR_TOLERANCE
47
+ assert_nothing_raised { @hsl.hue = -33 }
48
+ assert_in_delta 0.90833, @hsl.h, Color::COLOR_TOLERANCE
49
+ assert_nothing_raised { @hsl.h = 3.3 }
50
+ assert_in_delta 360, @hsl.hue, Color::COLOR_TOLERANCE
51
+ assert_nothing_raised { @hsl.h = -3.3 }
52
+ assert_in_delta 0.0, @hsl.h, Color::COLOR_TOLERANCE
53
+ assert_nothing_raised { @hsl.hue = 0 }
54
+ assert_nothing_raised { @hsl.hue -= 20 }
55
+ assert_in_delta 340, @hsl.hue, Color::COLOR_TOLERANCE
56
+ assert_nothing_raised { @hsl.hue += 45 }
57
+ assert_in_delta 25, @hsl.hue, Color::COLOR_TOLERANCE
58
+ end
59
+
60
+ def test_saturation
61
+ assert_in_delta 0.2, @hsl.s, Color::COLOR_TOLERANCE
62
+ assert_in_delta 20, @hsl.saturation, Color::COLOR_TOLERANCE
63
+ assert_nothing_raised { @hsl.saturation = 33 }
64
+ assert_in_delta 0.33, @hsl.s, Color::COLOR_TOLERANCE
65
+ assert_nothing_raised { @hsl.s = 3.3 }
66
+ assert_in_delta 100, @hsl.saturation, Color::COLOR_TOLERANCE
67
+ assert_nothing_raised { @hsl.s = -3.3 }
68
+ assert_in_delta 0.0, @hsl.s, Color::COLOR_TOLERANCE
69
+ end
70
+
71
+ def test_luminance
72
+ assert_in_delta 0.3, @hsl.l, Color::COLOR_TOLERANCE
73
+ assert_in_delta 30, @hsl.luminosity, Color::COLOR_TOLERANCE
74
+ assert_nothing_raised { @hsl.luminosity = 33 }
75
+ assert_in_delta 0.33, @hsl.l, Color::COLOR_TOLERANCE
76
+ assert_nothing_raised { @hsl.l = 3.3 }
77
+ assert_in_delta 100, @hsl.lightness, Color::COLOR_TOLERANCE
78
+ assert_nothing_raised { @hsl.l = -3.3 }
79
+ assert_in_delta 0.0, @hsl.l, Color::COLOR_TOLERANCE
80
+ end
81
+
82
+ def test_html_css
83
+ assert_equal "hsl(145.00, 20.00%, 30.00%)", @hsl.css_hsl
84
+ assert_equal "hsla(145.00, 20.00%, 30.00%, 1.00)", @hsl.css_hsla
85
+ end
86
+
87
+ def test_to_cmyk
88
+ cmyk = nil
89
+ assert_nothing_raised { cmyk = @hsl.to_cmyk }
90
+ assert_kind_of Color::CMYK, cmyk
91
+ assert_in_delta 0.3223, cmyk.c, Color::COLOR_TOLERANCE
92
+ assert_in_delta 0.2023, cmyk.m, Color::COLOR_TOLERANCE
93
+ assert_in_delta 0.2723, cmyk.y, Color::COLOR_TOLERANCE
94
+ assert_in_delta 0.4377, cmyk.k, Color::COLOR_TOLERANCE
95
+ end
96
+
97
+ def test_to_grayscale
98
+ gs = nil
99
+ assert_nothing_raised { gs = @hsl.to_grayscale }
100
+ assert_kind_of Color::GreyScale, gs
101
+ assert_in_delta 30, gs.gray, Color::COLOR_TOLERANCE
102
+ end
103
+
104
+ def test_to_rgb
105
+ rgb = nil
106
+ assert_nothing_raised { rgb = @hsl.to_rgb }
107
+ assert_kind_of Color::RGB, rgb
108
+ assert_in_delta 0.24, rgb.r, Color::COLOR_TOLERANCE
109
+ assert_in_delta 0.36, rgb.g, Color::COLOR_TOLERANCE
110
+ assert_in_delta 0.29, rgb.b, Color::COLOR_TOLERANCE
111
+ assert_equal "#3d5c4a", @hsl.html
112
+ assert_equal "rgb(24.00%, 36.00%, 29.00%)", @hsl.css_rgb
113
+ assert_equal "rgba(24.00%, 36.00%, 29.00%, 1.00)", @hsl.css_rgba
114
+ # The following tests address a bug reported by Jean Krohn on June 6,
115
+ # 2006 and excercise some previously unexercised code in to_rgb.
116
+ assert_equal Color::RGB::Black, Color::HSL.new(75, 75, 0)
117
+ assert_equal Color::RGB::White, Color::HSL.new(75, 75, 100)
118
+ assert_equal Color::RGB::Gray80, Color::HSL.new(75, 0, 80)
119
+
120
+ # The following tests a bug reported by Adam Johnson on 29 October
121
+ # 2007.
122
+ rgb = Color::RGB.from_fraction(0.34496, 0.1386, 0.701399)
123
+ c = Color::HSL.new(262, 67, 42).to_rgb
124
+ assert_in_delta rgb.r, c.r, Color::COLOR_TOLERANCE, "Red"
125
+ assert_in_delta rgb.g, c.g, Color::COLOR_TOLERANCE, "Green"
126
+ assert_in_delta rgb.b, c.b, Color::COLOR_TOLERANCE, "Blue"
127
+ end
128
+
129
+ def test_to_yiq
130
+ yiq = nil
131
+ assert_nothing_raised { yiq = @hsl.to_yiq }
132
+ assert_kind_of Color::YIQ, yiq
133
+ assert_in_delta 0.3161, yiq.y, Color::COLOR_TOLERANCE
134
+ assert_in_delta 0.0, yiq.i, Color::COLOR_TOLERANCE
135
+ assert_in_delta 0.0, yiq.q, Color::COLOR_TOLERANCE
136
+ end
137
+
138
+ def test_mix_with
139
+ red = Color::RGB::Red.to_hsl
140
+ yellow = Color::RGB::Yellow.to_hsl
141
+ assert_in_delta 0, red.hue, Color::COLOR_TOLERANCE
142
+ assert_in_delta 60, yellow.hue, Color::COLOR_TOLERANCE
143
+ ry25 = red.mix_with yellow, 0.25
144
+ assert_in_delta 15, ry25.hue, Color::COLOR_TOLERANCE
145
+ ry50 = red.mix_with yellow, 0.50
146
+ assert_in_delta 30, ry50.hue, Color::COLOR_TOLERANCE
147
+ ry75 = red.mix_with yellow, 0.75
148
+ assert_in_delta 45, ry75.hue, Color::COLOR_TOLERANCE
149
+ end
150
+
151
+ def test_inspect
152
+ assert_equal "HSL [145.00 deg, 20.00%, 30.00%]", @hsl.inspect
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env ruby
2
+ #--
3
+ # Color
4
+ # Colour management with Ruby
5
+ # http://rubyforge.org/projects/color
6
+ # Version 1.4.0
7
+ #
8
+ # Licensed under a MIT-style licence. See Licence.txt in the main
9
+ # distribution for full licensing information.
10
+ #
11
+ # Copyright (c) 2005 - 2007 Austin Ziegler and Matt Lyon
12
+ #
13
+ # $Id: test_all.rb 55 2007-02-03 23:29:34Z austin $
14
+ #++
15
+
16
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
17
+ require 'test/unit'
18
+ require 'color'
19
+ require 'color/palette/monocontrast'
20
+
21
+ module TestColor
22
+ module TestPalette
23
+ class TestMonoContrast < Test::Unit::TestCase
24
+ include Color::Palette
25
+ def setup
26
+ @high = Color::RGB.from_html("#c9e3a6")
27
+ @low = Color::RGB.from_html("#746b8e")
28
+ @mcp1 = MonoContrast.new(@high)
29
+ @mcp2 = MonoContrast.new(@low)
30
+ end
31
+
32
+ def test_background
33
+ assert_equal("#141711", @mcp1.background[-5].html)
34
+ assert_equal("#32392a", @mcp1.background[-4].html)
35
+ assert_equal("#657253", @mcp1.background[-3].html)
36
+ assert_equal("#97aa7d", @mcp1.background[-2].html)
37
+ assert_equal("#abc18d", @mcp1.background[-1].html)
38
+ assert_equal("#c9e3a6", @mcp1.background[ 0].html)
39
+ assert_equal("#d1e7b3", @mcp1.background[+1].html)
40
+ assert_equal("#d7eabc", @mcp1.background[+2].html) # d7eabd
41
+ assert_equal("#e4f1d3", @mcp1.background[+3].html) # e5f2d3
42
+ assert_equal("#f2f8e9", @mcp1.background[+4].html) # f1f8e9
43
+ assert_equal("#fafcf6", @mcp1.background[+5].html) # fafdf7
44
+
45
+ assert_equal("#0c0b0e", @mcp2.background[-5].html)
46
+ assert_equal("#1d1b24", @mcp2.background[-4].html)
47
+ assert_equal("#3a3647", @mcp2.background[-3].html)
48
+ assert_equal("#57506b", @mcp2.background[-2].html)
49
+ assert_equal("#635b79", @mcp2.background[-1].html)
50
+ assert_equal("#746b8e", @mcp2.background[ 0].html)
51
+ assert_equal("#89819f", @mcp2.background[+1].html)
52
+ assert_equal("#9790aa", @mcp2.background[+2].html) # 9790ab
53
+ assert_equal("#bab5c7", @mcp2.background[+3].html) # bab6c7
54
+ assert_equal("#dcdae3", @mcp2.background[+4].html)
55
+ assert_equal("#f1f0f4", @mcp2.background[+5].html) # f2f1f4
56
+ end
57
+
58
+ def test_brightness_diff
59
+ bd1 = @mcp1.brightness_diff(@high, @low)
60
+ bd2 = @mcp1.brightness_diff(@low, @high)
61
+ assert_in_delta(bd1, bd2, Color::COLOR_TOLERANCE)
62
+ end
63
+
64
+ def test_calculate_foreground
65
+ assert_equal("#ffffff", @mcp1.calculate_foreground(@low, @high).html)
66
+ assert_equal("#1d1b24", @mcp1.calculate_foreground(@high, @low).html)
67
+ end
68
+
69
+ def test_color_diff
70
+ assert_in_delta(@mcp1.color_diff(@low, @high),
71
+ @mcp1.color_diff(@high, @low),
72
+ Color::COLOR_TOLERANCE)
73
+ end
74
+
75
+ def test_foreground
76
+ assert_equal("#c9e3a6", @mcp1.foreground[-5].html)
77
+ assert_equal("#e4f1d3", @mcp1.foreground[-4].html) # e5f2d3
78
+ assert_equal("#ffffff", @mcp1.foreground[-3].html)
79
+ assert_equal("#000000", @mcp1.foreground[-2].html)
80
+ assert_equal("#000000", @mcp1.foreground[-1].html)
81
+ assert_equal("#000000", @mcp1.foreground[ 0].html)
82
+ assert_equal("#000000", @mcp1.foreground[+1].html)
83
+ assert_equal("#000000", @mcp1.foreground[+2].html)
84
+ assert_equal("#32392a", @mcp1.foreground[+3].html)
85
+ assert_equal("#32392a", @mcp1.foreground[+4].html)
86
+ assert_equal("#32392a", @mcp1.foreground[+5].html)
87
+
88
+ assert_equal("#bab5c7", @mcp2.foreground[-5].html) # bab6c7
89
+ assert_equal("#dcdae3", @mcp2.foreground[-4].html)
90
+ assert_equal("#ffffff", @mcp2.foreground[-3].html)
91
+ assert_equal("#ffffff", @mcp2.foreground[-2].html)
92
+ assert_equal("#ffffff", @mcp2.foreground[-1].html)
93
+ assert_equal("#ffffff", @mcp2.foreground[ 0].html)
94
+ assert_equal("#000000", @mcp2.foreground[+1].html)
95
+ assert_equal("#000000", @mcp2.foreground[+2].html)
96
+ assert_equal("#000000", @mcp2.foreground[+3].html)
97
+ assert_equal("#1d1b24", @mcp2.foreground[+4].html)
98
+ assert_equal("#3a3647", @mcp2.foreground[+5].html)
99
+ end
100
+
101
+ def test_minimum_brightness_diff
102
+ assert_in_delta(MonoContrast::DEFAULT_MINIMUM_BRIGHTNESS_DIFF,
103
+ @mcp1.minimum_brightness_diff, Color::COLOR_TOLERANCE)
104
+ end
105
+
106
+ def test_minimum_brightness_diff_equals
107
+ assert_in_delta(MonoContrast::DEFAULT_MINIMUM_BRIGHTNESS_DIFF,
108
+ @mcp1.minimum_brightness_diff, Color::COLOR_TOLERANCE)
109
+ mcps = @mcp1.dup
110
+ assert_nothing_raised { @mcp1.minimum_brightness_diff = 0.75 }
111
+ assert_in_delta(0.75, @mcp1.minimum_brightness_diff, Color::COLOR_TOLERANCE)
112
+ assert_not_equal(@mcp1.foreground[-5], mcps.foreground[-5])
113
+ assert_nothing_raised { @mcp1.minimum_brightness_diff = 4.0 }
114
+ assert_in_delta(1, @mcp1.minimum_brightness_diff, Color::COLOR_TOLERANCE)
115
+ assert_nothing_raised { @mcp1.minimum_brightness_diff = -4.0 }
116
+ assert_in_delta(0, @mcp1.minimum_brightness_diff, Color::COLOR_TOLERANCE)
117
+ assert_nothing_raised { @mcp1.minimum_brightness_diff = nil }
118
+ assert_in_delta(MonoContrast::DEFAULT_MINIMUM_BRIGHTNESS_DIFF,
119
+ @mcp1.minimum_brightness_diff, Color::COLOR_TOLERANCE)
120
+ end
121
+
122
+ def test_minimum_color_diff
123
+ assert_in_delta(MonoContrast::DEFAULT_MINIMUM_COLOR_DIFF,
124
+ @mcp1.minimum_color_diff, Color::COLOR_TOLERANCE)
125
+ end
126
+
127
+ def test_minimum_color_diff_equals
128
+ assert_in_delta(MonoContrast::DEFAULT_MINIMUM_COLOR_DIFF,
129
+ @mcp1.minimum_color_diff, Color::COLOR_TOLERANCE)
130
+ mcps = @mcp1.dup
131
+ assert_nothing_raised { @mcp1.minimum_color_diff = 0.75 }
132
+ assert_in_delta(0.75, @mcp1.minimum_color_diff, Color::COLOR_TOLERANCE)
133
+ assert_not_equal(@mcp1.foreground[-5], mcps.foreground[-5])
134
+ assert_nothing_raised { @mcp1.minimum_color_diff = 4.0 }
135
+ assert_in_delta(3, @mcp1.minimum_color_diff, Color::COLOR_TOLERANCE)
136
+ assert_nothing_raised { @mcp1.minimum_color_diff = -4.0 }
137
+ assert_in_delta(0, @mcp1.minimum_color_diff, Color::COLOR_TOLERANCE)
138
+ assert_nothing_raised { @mcp1.minimum_color_diff = nil }
139
+ assert_in_delta(MonoContrast::DEFAULT_MINIMUM_COLOR_DIFF,
140
+ @mcp1.minimum_color_diff, Color::COLOR_TOLERANCE)
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,346 @@
1
+ #!/usr/bin/env ruby
2
+ #--
3
+ # Color
4
+ # Colour management with Ruby
5
+ # http://rubyforge.org/projects/color
6
+ # Version 1.4.0
7
+ #
8
+ # Licensed under a MIT-style licence. See Licence.txt in the main
9
+ # distribution for full licensing information.
10
+ #
11
+ # Copyright (c) 2005 - 2007 Austin Ziegler and Matt Lyon
12
+ #
13
+ # $Id: test_all.rb 55 2007-02-03 23:29:34Z austin $
14
+ #++
15
+
16
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
17
+ require 'test/unit'
18
+ require 'color'
19
+
20
+ module TestColor
21
+ class TestRGB < Test::Unit::TestCase
22
+ def test_adjust_brightness
23
+ assert_equal("#1a1aff", Color::RGB::Blue.adjust_brightness(10).html)
24
+ assert_equal("#0000e6", Color::RGB::Blue.adjust_brightness(-10).html)
25
+ end
26
+
27
+ def test_adjust_hue
28
+ assert_equal("#6600ff", Color::RGB::Blue.adjust_hue(10).html)
29
+ assert_equal("#0066ff", Color::RGB::Blue.adjust_hue(-10).html)
30
+ end
31
+
32
+ def test_adjust_saturation
33
+ assert_equal("#ef9374",
34
+ Color::RGB::DarkSalmon.adjust_saturation(10).html)
35
+ assert_equal("#e39980",
36
+ Color::RGB::DarkSalmon.adjust_saturation(-10).html)
37
+ end
38
+
39
+ def test_red
40
+ red = Color::RGB::Red.dup
41
+ assert_in_delta(1.0, red.r, Color::COLOR_TOLERANCE)
42
+ assert_in_delta(100, red.red_p, Color::COLOR_TOLERANCE)
43
+ assert_in_delta(255, red.red, Color::COLOR_TOLERANCE)
44
+ assert_in_delta(1.0, red.r, Color::COLOR_TOLERANCE)
45
+ assert_nothing_raised { red.red_p = 33 }
46
+ assert_in_delta(0.33, red.r, Color::COLOR_TOLERANCE)
47
+ assert_nothing_raised { red.red = 330 }
48
+ assert_in_delta(1.0, red.r, Color::COLOR_TOLERANCE)
49
+ assert_nothing_raised { red.r = -3.3 }
50
+ assert_in_delta(0.0, red.r, Color::COLOR_TOLERANCE)
51
+ end
52
+
53
+ def test_green
54
+ lime = Color::RGB::Lime.dup
55
+ assert_in_delta(1.0, lime.g, Color::COLOR_TOLERANCE)
56
+ assert_in_delta(100, lime.green_p, Color::COLOR_TOLERANCE)
57
+ assert_in_delta(255, lime.green, Color::COLOR_TOLERANCE)
58
+ assert_nothing_raised { lime.green_p = 33 }
59
+ assert_in_delta(0.33, lime.g, Color::COLOR_TOLERANCE)
60
+ assert_nothing_raised { lime.green = 330 }
61
+ assert_in_delta(1.0, lime.g, Color::COLOR_TOLERANCE)
62
+ assert_nothing_raised { lime.g = -3.3 }
63
+ assert_in_delta(0.0, lime.g, Color::COLOR_TOLERANCE)
64
+ end
65
+
66
+ def test_blue
67
+ blue = Color::RGB::Blue.dup
68
+ assert_in_delta(1.0, blue.b, Color::COLOR_TOLERANCE)
69
+ assert_in_delta(255, blue.blue, Color::COLOR_TOLERANCE)
70
+ assert_in_delta(100, blue.blue_p, Color::COLOR_TOLERANCE)
71
+ assert_nothing_raised { blue.blue_p = 33 }
72
+ assert_in_delta(0.33, blue.b, Color::COLOR_TOLERANCE)
73
+ assert_nothing_raised { blue.blue = 330 }
74
+ assert_in_delta(1.0, blue.b, Color::COLOR_TOLERANCE)
75
+ assert_nothing_raised { blue.b = -3.3 }
76
+ assert_in_delta(0.0, blue.b, Color::COLOR_TOLERANCE)
77
+ end
78
+
79
+ def test_brightness
80
+ assert_in_delta(0.0, Color::RGB::Black.brightness, Color::COLOR_TOLERANCE)
81
+ assert_in_delta(0.5, Color::RGB::Grey50.brightness, Color::COLOR_TOLERANCE)
82
+ assert_in_delta(1.0, Color::RGB::White.brightness, Color::COLOR_TOLERANCE)
83
+ end
84
+
85
+ def test_darken_by
86
+ assert_in_delta(0.5, Color::RGB::Blue.darken_by(50).b,
87
+ Color::COLOR_TOLERANCE)
88
+ end
89
+
90
+ def test_html
91
+ assert_equal("#000000", Color::RGB::Black.html)
92
+ assert_equal(Color::RGB::Black, Color::RGB.from_html("#000000"))
93
+ assert_equal("#0000ff", Color::RGB::Blue.html)
94
+ assert_equal("#00ff00", Color::RGB::Lime.html)
95
+ assert_equal("#ff0000", Color::RGB::Red.html)
96
+ assert_equal("#ffffff", Color::RGB::White.html)
97
+
98
+ assert_equal("rgb(0.00%, 0.00%, 0.00%)", Color::RGB::Black.css_rgb)
99
+ assert_equal("rgb(0.00%, 0.00%, 100.00%)", Color::RGB::Blue.css_rgb)
100
+ assert_equal("rgb(0.00%, 100.00%, 0.00%)", Color::RGB::Lime.css_rgb)
101
+ assert_equal("rgb(100.00%, 0.00%, 0.00%)", Color::RGB::Red.css_rgb)
102
+ assert_equal("rgb(100.00%, 100.00%, 100.00%)", Color::RGB::White.css_rgb)
103
+
104
+ assert_equal("rgba(0.00%, 0.00%, 0.00%, 1.00)", Color::RGB::Black.css_rgba)
105
+ assert_equal("rgba(0.00%, 0.00%, 100.00%, 1.00)", Color::RGB::Blue.css_rgba)
106
+ assert_equal("rgba(0.00%, 100.00%, 0.00%, 1.00)", Color::RGB::Lime.css_rgba)
107
+ assert_equal("rgba(100.00%, 0.00%, 0.00%, 1.00)", Color::RGB::Red.css_rgba)
108
+ assert_equal("rgba(100.00%, 100.00%, 100.00%, 1.00)",
109
+ Color::RGB::White.css_rgba)
110
+ end
111
+
112
+ def test_lighten_by
113
+ assert_in_delta(1.0, Color::RGB::Blue.lighten_by(50).b,
114
+ Color::COLOR_TOLERANCE)
115
+ assert_in_delta(0.5, Color::RGB::Blue.lighten_by(50).r,
116
+ Color::COLOR_TOLERANCE)
117
+ assert_in_delta(0.5, Color::RGB::Blue.lighten_by(50).g,
118
+ Color::COLOR_TOLERANCE)
119
+ end
120
+
121
+ def test_mix_with
122
+ assert_in_delta(0.5, Color::RGB::Red.mix_with(Color::RGB::Blue, 50).r,
123
+ Color::COLOR_TOLERANCE)
124
+ assert_in_delta(0.0, Color::RGB::Red.mix_with(Color::RGB::Blue, 50).g,
125
+ Color::COLOR_TOLERANCE)
126
+ assert_in_delta(0.5, Color::RGB::Red.mix_with(Color::RGB::Blue, 50).b,
127
+ Color::COLOR_TOLERANCE)
128
+ assert_in_delta(0.5, Color::RGB::Blue.mix_with(Color::RGB::Red, 50).r,
129
+ Color::COLOR_TOLERANCE)
130
+ assert_in_delta(0.0, Color::RGB::Blue.mix_with(Color::RGB::Red, 50).g,
131
+ Color::COLOR_TOLERANCE)
132
+ assert_in_delta(0.5, Color::RGB::Blue.mix_with(Color::RGB::Red, 50).b,
133
+ Color::COLOR_TOLERANCE)
134
+ end
135
+
136
+ def test_pdf_fill
137
+ assert_equal("0.000 0.000 0.000 rg", Color::RGB::Black.pdf_fill)
138
+ assert_equal("0.000 0.000 1.000 rg", Color::RGB::Blue.pdf_fill)
139
+ assert_equal("0.000 1.000 0.000 rg", Color::RGB::Lime.pdf_fill)
140
+ assert_equal("1.000 0.000 0.000 rg", Color::RGB::Red.pdf_fill)
141
+ assert_equal("1.000 1.000 1.000 rg", Color::RGB::White.pdf_fill)
142
+ assert_equal("0.000 0.000 0.000 RG", Color::RGB::Black.pdf_stroke)
143
+ assert_equal("0.000 0.000 1.000 RG", Color::RGB::Blue.pdf_stroke)
144
+ assert_equal("0.000 1.000 0.000 RG", Color::RGB::Lime.pdf_stroke)
145
+ assert_equal("1.000 0.000 0.000 RG", Color::RGB::Red.pdf_stroke)
146
+ assert_equal("1.000 1.000 1.000 RG", Color::RGB::White.pdf_stroke)
147
+ end
148
+
149
+ def test_to_cmyk
150
+ assert_kind_of(Color::CMYK, Color::RGB::Black.to_cmyk)
151
+ assert_equal(Color::CMYK.new(0, 0, 0, 100), Color::RGB::Black.to_cmyk)
152
+ assert_equal(Color::CMYK.new(0, 0, 100, 0),
153
+ Color::RGB::Yellow.to_cmyk)
154
+ assert_equal(Color::CMYK.new(100, 0, 0, 0), Color::RGB::Cyan.to_cmyk)
155
+ assert_equal(Color::CMYK.new(0, 100, 0, 0),
156
+ Color::RGB::Magenta.to_cmyk)
157
+ assert_equal(Color::CMYK.new(0, 100, 100, 0), Color::RGB::Red.to_cmyk)
158
+ assert_equal(Color::CMYK.new(100, 0, 100, 0),
159
+ Color::RGB::Lime.to_cmyk)
160
+ assert_equal(Color::CMYK.new(100, 100, 0, 0),
161
+ Color::RGB::Blue.to_cmyk)
162
+ assert_equal(Color::CMYK.new(10.32, 60.52, 10.32, 39.47),
163
+ Color::RGB::Purple.to_cmyk)
164
+ assert_equal(Color::CMYK.new(10.90, 59.13, 59.13, 24.39),
165
+ Color::RGB::Brown.to_cmyk)
166
+ assert_equal(Color::CMYK.new(0, 63.14, 18.43, 0),
167
+ Color::RGB::Carnation.to_cmyk)
168
+ assert_equal(Color::CMYK.new(7.39, 62.69, 62.69, 37.32),
169
+ Color::RGB::Cayenne.to_cmyk)
170
+ end
171
+
172
+ def test_to_grayscale
173
+ assert_kind_of(Color::GrayScale, Color::RGB::Black.to_grayscale)
174
+ assert_equal(Color::GrayScale.from_fraction(0),
175
+ Color::RGB::Black.to_grayscale)
176
+ assert_equal(Color::GrayScale.from_fraction(0.5),
177
+ Color::RGB::Yellow.to_grayscale)
178
+ assert_equal(Color::GrayScale.from_fraction(0.5),
179
+ Color::RGB::Cyan.to_grayscale)
180
+ assert_equal(Color::GrayScale.from_fraction(0.5),
181
+ Color::RGB::Magenta.to_grayscale)
182
+ assert_equal(Color::GrayScale.from_fraction(0.5),
183
+ Color::RGB::Red.to_grayscale)
184
+ assert_equal(Color::GrayScale.from_fraction(0.5),
185
+ Color::RGB::Lime.to_grayscale)
186
+ assert_equal(Color::GrayScale.from_fraction(0.5),
187
+ Color::RGB::Blue.to_grayscale)
188
+ assert_equal(Color::GrayScale.from_fraction(0.2510),
189
+ Color::RGB::Purple.to_grayscale)
190
+ assert_equal(Color::GrayScale.new(40.58),
191
+ Color::RGB::Brown.to_grayscale)
192
+ assert_equal(Color::GrayScale.new(68.43),
193
+ Color::RGB::Carnation.to_grayscale)
194
+ assert_equal(Color::GrayScale.new(27.65),
195
+ Color::RGB::Cayenne.to_grayscale)
196
+ end
197
+
198
+ def test_to_hsl
199
+ assert_kind_of(Color::HSL, Color::RGB::Black.to_hsl)
200
+ assert_equal(Color::HSL.new, Color::RGB::Black.to_hsl)
201
+ assert_equal(Color::HSL.new(60, 100, 50), Color::RGB::Yellow.to_hsl)
202
+ assert_equal(Color::HSL.new(180, 100, 50), Color::RGB::Cyan.to_hsl)
203
+ assert_equal(Color::HSL.new(300, 100, 50), Color::RGB::Magenta.to_hsl)
204
+ assert_equal(Color::HSL.new(0, 100, 50), Color::RGB::Red.to_hsl)
205
+ assert_equal(Color::HSL.new(120, 100, 50), Color::RGB::Lime.to_hsl)
206
+ assert_equal(Color::HSL.new(240, 100, 50), Color::RGB::Blue.to_hsl)
207
+ assert_equal(Color::HSL.new(300, 100, 25.10),
208
+ Color::RGB::Purple.to_hsl)
209
+ assert_equal(Color::HSL.new(0, 59.42, 40.59),
210
+ Color::RGB::Brown.to_hsl)
211
+ assert_equal(Color::HSL.new(317.5, 100, 68.43),
212
+ Color::RGB::Carnation.to_hsl)
213
+ assert_equal(Color::HSL.new(0, 100, 27.64),
214
+ Color::RGB::Cayenne.to_hsl)
215
+
216
+ assert_equal("hsl(0.00, 0.00%, 0.00%)", Color::RGB::Black.css_hsl)
217
+ assert_equal("hsl(60.00, 100.00%, 50.00%)",
218
+ Color::RGB::Yellow.css_hsl)
219
+ assert_equal("hsl(180.00, 100.00%, 50.00%)", Color::RGB::Cyan.css_hsl)
220
+ assert_equal("hsl(300.00, 100.00%, 50.00%)",
221
+ Color::RGB::Magenta.css_hsl)
222
+ assert_equal("hsl(0.00, 100.00%, 50.00%)", Color::RGB::Red.css_hsl)
223
+ assert_equal("hsl(120.00, 100.00%, 50.00%)", Color::RGB::Lime.css_hsl)
224
+ assert_equal("hsl(240.00, 100.00%, 50.00%)", Color::RGB::Blue.css_hsl)
225
+ assert_equal("hsl(300.00, 100.00%, 25.10%)",
226
+ Color::RGB::Purple.css_hsl)
227
+ assert_equal("hsl(0.00, 59.42%, 40.59%)", Color::RGB::Brown.css_hsl)
228
+ assert_equal("hsl(317.52, 100.00%, 68.43%)",
229
+ Color::RGB::Carnation.css_hsl)
230
+ assert_equal("hsl(0.00, 100.00%, 27.65%)", Color::RGB::Cayenne.css_hsl)
231
+
232
+ assert_equal("hsla(0.00, 0.00%, 0.00%, 1.00)",
233
+ Color::RGB::Black.css_hsla)
234
+ assert_equal("hsla(60.00, 100.00%, 50.00%, 1.00)",
235
+ Color::RGB::Yellow.css_hsla)
236
+ assert_equal("hsla(180.00, 100.00%, 50.00%, 1.00)",
237
+ Color::RGB::Cyan.css_hsla)
238
+ assert_equal("hsla(300.00, 100.00%, 50.00%, 1.00)",
239
+ Color::RGB::Magenta.css_hsla)
240
+ assert_equal("hsla(0.00, 100.00%, 50.00%, 1.00)",
241
+ Color::RGB::Red.css_hsla)
242
+ assert_equal("hsla(120.00, 100.00%, 50.00%, 1.00)",
243
+ Color::RGB::Lime.css_hsla)
244
+ assert_equal("hsla(240.00, 100.00%, 50.00%, 1.00)",
245
+ Color::RGB::Blue.css_hsla)
246
+ assert_equal("hsla(300.00, 100.00%, 25.10%, 1.00)",
247
+ Color::RGB::Purple.css_hsla)
248
+ assert_equal("hsla(0.00, 59.42%, 40.59%, 1.00)",
249
+ Color::RGB::Brown.css_hsla)
250
+ assert_equal("hsla(317.52, 100.00%, 68.43%, 1.00)",
251
+ Color::RGB::Carnation.css_hsla)
252
+ assert_equal("hsla(0.00, 100.00%, 27.65%, 1.00)",
253
+ Color::RGB::Cayenne.css_hsla)
254
+
255
+ # The following tests a bug reported by Jean Krohn on 10 June 2006
256
+ # where HSL conversion was not quite correct, resulting in a bad
257
+ # round-trip.
258
+ assert_equal("#008800", Color::RGB.from_html("#008800").to_hsl.html)
259
+ assert_not_equal("#002288", Color::RGB.from_html("#008800").to_hsl.html)
260
+
261
+ # The following tests a bug reported by Adam Johnson on 29 October
262
+ # 2007.
263
+ hsl = Color::HSL.new(262, 67, 42)
264
+ c = Color::RGB.from_fraction(0.34496, 0.1386, 0.701399).to_hsl
265
+ assert_in_delta hsl.h, c.h, Color::COLOR_TOLERANCE, "Hue"
266
+ assert_in_delta hsl.s, c.s, Color::COLOR_TOLERANCE, "Saturation"
267
+ assert_in_delta hsl.l, c.l, Color::COLOR_TOLERANCE, "Luminance"
268
+ end
269
+
270
+ def test_to_rgb
271
+ assert_equal(Color::RGB::Black, Color::RGB::Black.to_rgb)
272
+ end
273
+
274
+ def test_to_yiq
275
+ assert_kind_of(Color::YIQ, Color::RGB::Black.to_yiq)
276
+ assert_equal(Color::YIQ.new, Color::RGB::Black.to_yiq)
277
+ assert_equal(Color::YIQ.new(88.6, 32.1, 0), Color::RGB::Yellow.to_yiq)
278
+ assert_equal(Color::YIQ.new(70.1, 0, 0), Color::RGB::Cyan.to_yiq)
279
+ assert_equal(Color::YIQ.new(41.3, 27.5, 52.3),
280
+ Color::RGB::Magenta.to_yiq)
281
+ assert_equal(Color::YIQ.new(29.9, 59.6, 21.2), Color::RGB::Red.to_yiq)
282
+ assert_equal(Color::YIQ.new(58.7, 0, 0), Color::RGB::Lime.to_yiq)
283
+ assert_equal(Color::YIQ.new(11.4, 0, 31.1), Color::RGB::Blue.to_yiq)
284
+ assert_equal(Color::YIQ.new(20.73, 13.80, 26.25),
285
+ Color::RGB::Purple.to_yiq)
286
+ assert_equal(Color::YIQ.new(30.89, 28.75, 10.23),
287
+ Color::RGB::Brown.to_yiq)
288
+ assert_equal(Color::YIQ.new(60.84, 23.28, 27.29),
289
+ Color::RGB::Carnation.to_yiq)
290
+ assert_equal(Color::YIQ.new(16.53, 32.96, 11.72),
291
+ Color::RGB::Cayenne.to_yiq)
292
+ end
293
+
294
+ def test_add
295
+ assert_nothing_raised { Color::RGB::Cyan + Color::RGB::Yellow }
296
+ white = Color::RGB::Cyan + Color::RGB::Yellow
297
+ assert_not_nil(white)
298
+ assert_equal(Color::RGB::White, white)
299
+
300
+ c1 = Color::RGB.new(0x80, 0x80, 0x00)
301
+ c2 = Color::RGB.new(0x45, 0x20, 0xf0)
302
+ cr = Color::RGB.new(0xc5, 0xa0, 0xf0)
303
+
304
+ assert_equal(cr, c1 + c2)
305
+ end
306
+
307
+ def test_subtract
308
+ black = Color::RGB::LightCoral - Color::RGB::Honeydew
309
+ assert_equal(Color::RGB::Black, black)
310
+
311
+ c1 = Color::RGB.new(0x85, 0x80, 0x00)
312
+ c2 = Color::RGB.new(0x40, 0x20, 0xf0)
313
+ cr = Color::RGB.new(0x45, 0x60, 0x00)
314
+
315
+ assert_equal(cr, c1 - c2)
316
+ end
317
+
318
+ def test_mean_grayscale
319
+ c1 = Color::RGB.new(0x85, 0x80, 0x00)
320
+ c1_max = assert_nothing_raised { c1.max_rgb_as_greyscale }
321
+ c1_max = c1.max_rgb_as_greyscale
322
+ c1_result = Color::GrayScale.from_fraction(0x85 / 255.0)
323
+
324
+ assert_equal(c1_result, c1_max)
325
+ end
326
+
327
+ def test_from_html
328
+ assert_equal("RGB [#333333]", Color::RGB.from_html("#333").inspect)
329
+ assert_equal("RGB [#333333]", Color::RGB.from_html("333").inspect)
330
+ assert_equal("RGB [#555555]", Color::RGB.from_html("#555555").inspect)
331
+ assert_equal("RGB [#555555]", Color::RGB.from_html("555555").inspect)
332
+ assert_raises(ArgumentError) { Color::RGB.from_html("#5555555") }
333
+ assert_raises(ArgumentError) { Color::RGB.from_html("5555555") }
334
+ assert_raises(ArgumentError) { Color::RGB.from_html("#55555") }
335
+ assert_raises(ArgumentError) { Color::RGB.from_html("55555") }
336
+ end
337
+
338
+ def test_inspect
339
+ assert_equal("RGB [#000000]", Color::RGB::Black.inspect)
340
+ assert_equal("RGB [#0000ff]", Color::RGB::Blue.inspect)
341
+ assert_equal("RGB [#00ff00]", Color::RGB::Lime.inspect)
342
+ assert_equal("RGB [#ff0000]", Color::RGB::Red.inspect)
343
+ assert_equal("RGB [#ffffff]", Color::RGB::White.inspect)
344
+ end
345
+ end
346
+ end