summaryrefslogtreecommitdiff
path: root/tests/test_color.py
blob: 233fd5c86ff24e5cb6c3a23e1f7fa8a11691351c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# -*- Mode: Python -*-

import unittest

from common import gtk


class Tests(unittest.TestCase):

    def test_constructor(self):
        """ Test GdkColor creation """

        c = gtk.gdk.Color(1, 2, 3)
        self.assertEqual(c.red, 1)
        self.assertEqual(c.green, 2)
        self.assertEqual(c.blue, 3)

        c = gtk.gdk.Color(1.0, 0.7, 0.2)
        self.assertAlmostEqual(c.red_float, 1.0, 4)
        self.assertAlmostEqual(c.green_float, 0.7, 4)
        self.assertAlmostEqual(c.blue_float, 0.2, 4)

        # Mixing integers and floats is not allowed.
        self.assertRaises(TypeError, lambda: gtk.gdk.Color(0, 0.5))

        c = gtk.gdk.Color(pixel=0xffff)
        self.assertEqual(c.pixel, 0xffff)

        c = gtk.gdk.Color(pixel=0xffffL)
        self.assertEqual(c.pixel, 0xffff)

        c = gtk.gdk.Color(pixel=0xffffffffL)
        self.assertEqual(c.pixel, 0xffffffffL)

        c = gtk.gdk.Color('red')
        self.assertEqual(c.red, 65535)
        self.assertEqual(c.green, 0)
        self.assertEqual(c.blue, 0)

        c = gtk.gdk.Color('#ff0000')
        self.assertEqual(c.red, 65535)
        self.assertEqual(c.green, 0)
        self.assertEqual(c.blue, 0)

        self.assertRaises(TypeError, lambda: gtk.gdk.Color([]))

    def test_color_from_hsv(self):
        self.assertEqual(gtk.gdk.Color('red'), gtk.gdk.color_from_hsv(0.0, 1.0, 1.0))

    # See bug #594347.
    def test_color_from_hsv_kwargs(self):
        self.assertEqual(gtk.gdk.Color('black'), gtk.gdk.color_from_hsv(hue=0.0,
                                                                        saturation=0.0,
                                                                        value=0.0))

    def test_float_attributes(self):
        c = gtk.gdk.Color(0, 10000, 65535)
        self.assertAlmostEqual(c.red_float, 0.0)
        self.assertAlmostEqual(c.green_float, 10000.0 / 65535.0)
        self.assertAlmostEqual(c.blue_float, 1.0)

        c.red_float = 0.57
        self.assert_(c.red == int(0.57 * 65535) or c.red == int(0.57 * 65535) + 1)
        self.assertAlmostEqual(c.red_float, 0.57, 4)

        c.green = 12345
        self.assertAlmostEqual(c.green_float, 12345.0 / 65535.0)

    def test_hue(self):
        self.assertAlmostEqual(gtk.gdk.Color('red').hue, 0 * 1.0 / 6)
        self.assertAlmostEqual(gtk.gdk.Color('yellow').hue, 1 * 1.0 / 6)
        self.assertAlmostEqual(gtk.gdk.Color('green').hue, 2 * 1.0 / 6)
        self.assertAlmostEqual(gtk.gdk.Color('cyan').hue, 3 * 1.0 / 6)
        self.assertAlmostEqual(gtk.gdk.Color('blue').hue, 4 * 1.0 / 6)
        self.assertAlmostEqual(gtk.gdk.Color('magenta').hue, 5 * 1.0 / 6)

    def test_saturation(self):
        self.assertAlmostEqual(gtk.gdk.Color('red').saturation, 1.0)
        self.assertAlmostEqual(gtk.gdk.Color('gray').saturation, 0.0)

    def test_value(self):
        self.assertAlmostEqual(gtk.gdk.Color('black').value, 0.0)
        self.assertAlmostEqual(gtk.gdk.Color('white').value, 1.0)

    def test_equal(self):
        self.assertEqual(gtk.gdk.Color(0, 0, 0), gtk.gdk.Color(0, 0, 0))
        self.assertEqual(gtk.gdk.Color(100, 200, 300), gtk.gdk.Color(100, 200, 300))
        self.assertEqual(gtk.gdk.Color('#abc'), gtk.gdk.Color('#aabbcc'))
        self.assertEqual(gtk.gdk.Color('#100020003000'), gtk.gdk.Color(0x1000, 0x2000, 0x3000))

    def test_not_equal(self):
        self.assertNotEqual(gtk.gdk.Color('red'), gtk.gdk.Color('blue'))
        self.assertNotEqual(gtk.gdk.Color(1, 0, 0), gtk.gdk.Color(0, 0, 0))
        self.assertNotEqual(gtk.gdk.Color(0, 1, 0), gtk.gdk.Color(0, 0, 0))
        self.assertNotEqual(gtk.gdk.Color(0, 0, 1), gtk.gdk.Color(0, 0, 0))

    def test_non_hashable(self):
        self.assertRaises(TypeError, lambda: hash(gtk.gdk.Color()))

        def dict_key():
            {} [gtk.gdk.Color()] = 'must raise'
        self.assertRaises(TypeError, dict_key)

    def test_repr(self):
        for color in self._test_color_list():
            self.assertEqual(color, eval(repr(color)))

    def test_str(self):
        for color in self._test_color_list():
            self.assertEqual(color, gtk.gdk.Color(str(color)))

    def _test_color_list(self):
        return [gtk.gdk.Color(),
                gtk.gdk.Color(10, 20, 30),
                gtk.gdk.Color(65535, 65535, 65535),
                gtk.gdk.Color('red'),
                gtk.gdk.Color('#aaa'),
                gtk.gdk.Color('#f0a000'),
                gtk.gdk.Color('#123abcdef'),
                gtk.gdk.Color('#123412341234'),
                gtk.gdk.Color('#fedcfedcfedc')]


if __name__ == '__main__':
    unittest.main()