a0ffac42d97c9c52684c1f8e79af9f3d019a67e8
[platform/upstream/pygobject2.git] / tests / test_overrides_gdk.py
1 # -*- Mode: Python; py-indent-offset: 4 -*-
2 # vim: tabstop=4 shiftwidth=4 expandtab
3
4 import unittest
5
6 import gi.overrides
7 from gi import PyGIDeprecationWarning
8
9 try:
10     from gi.repository import Gdk, GdkPixbuf, Gtk
11     Gdk  # pyflakes
12 except ImportError:
13     Gdk = None
14
15 from helper import capture_glib_deprecation_warnings
16
17
18 @unittest.skipUnless(Gdk, 'Gdk not available')
19 class TestGdk(unittest.TestCase):
20     def test_constructor(self):
21         attribute = Gdk.WindowAttr()
22         attribute.window_type = Gdk.WindowType.CHILD
23         attributes_mask = Gdk.WindowAttributesType.X | \
24             Gdk.WindowAttributesType.Y
25         window = Gdk.Window(None, attribute, attributes_mask)
26         self.assertEqual(window.get_window_type(), Gdk.WindowType.CHILD)
27
28     def test_color(self):
29         color = Gdk.Color(100, 200, 300)
30         self.assertEqual(color.red, 100)
31         self.assertEqual(color.green, 200)
32         self.assertEqual(color.blue, 300)
33         with capture_glib_deprecation_warnings():
34             self.assertEqual(color, Gdk.Color(100, 200, 300))
35         self.assertNotEqual(color, Gdk.Color(1, 2, 3))
36
37     def test_color_floats(self):
38         self.assertEqual(Gdk.Color(13107, 21845, 65535),
39                          Gdk.Color.from_floats(0.2, 1.0 / 3.0, 1.0))
40
41         self.assertEqual(Gdk.Color(13107, 21845, 65535).to_floats(),
42                          (0.2, 1.0 / 3.0, 1.0))
43
44         self.assertEqual(Gdk.RGBA(0.2, 1.0 / 3.0, 1.0, 0.5).to_color(),
45                          Gdk.Color.from_floats(0.2, 1.0 / 3.0, 1.0))
46
47         self.assertEqual(Gdk.RGBA.from_color(Gdk.Color(13107, 21845, 65535)),
48                          Gdk.RGBA(0.2, 1.0 / 3.0, 1.0, 1.0))
49
50     def test_rgba(self):
51         self.assertEqual(Gdk.RGBA, gi.overrides.Gdk.RGBA)
52         rgba = Gdk.RGBA(0.1, 0.2, 0.3, 0.4)
53         self.assertEqual(rgba, Gdk.RGBA(0.1, 0.2, 0.3, 0.4))
54         self.assertNotEqual(rgba, Gdk.RGBA(0.0, 0.2, 0.3, 0.4))
55         self.assertEqual(rgba.red, 0.1)
56         self.assertEqual(rgba.green, 0.2)
57         self.assertEqual(rgba.blue, 0.3)
58         self.assertEqual(rgba.alpha, 0.4)
59         rgba.green = 0.9
60         self.assertEqual(rgba.green, 0.9)
61
62         # Iterator/tuple convsersion
63         self.assertEqual(tuple(Gdk.RGBA(0.1, 0.2, 0.3, 0.4)),
64                          (0.1, 0.2, 0.3, 0.4))
65
66     def test_event(self):
67         event = Gdk.Event.new(Gdk.EventType.CONFIGURE)
68         self.assertEqual(event.type, Gdk.EventType.CONFIGURE)
69         self.assertEqual(event.send_event, 0)
70
71         event = Gdk.Event()
72         event.type = Gdk.EventType.SCROLL
73         self.assertRaises(AttributeError, lambda: getattr(event, 'foo_bar'))
74
75     def test_event_touch(self):
76         event = Gdk.Event.new(Gdk.EventType.TOUCH_BEGIN)
77         self.assertEqual(event.type, Gdk.EventType.TOUCH_BEGIN)
78
79         # emulating_pointer is unique to touch events
80         self.assertFalse(event.emulating_pointer)
81         self.assertFalse(event.touch.emulating_pointer)
82
83         event.emulating_pointer = True
84         self.assertTrue(event.emulating_pointer)
85         self.assertTrue(event.touch.emulating_pointer)
86
87     def test_event_setattr(self):
88         event = Gdk.Event.new(Gdk.EventType.DRAG_MOTION)
89         event.x_root, event.y_root = 0, 5
90         self.assertEqual(event.dnd.x_root, 0)
91         self.assertEqual(event.dnd.y_root, 5)
92         self.assertEqual(event.x_root, 0)
93         self.assertEqual(event.y_root, 5)
94
95         # this used to work, keep it that way
96         self.assertFalse(hasattr(event, "foo_bar"))
97         event.foo_bar = 42
98
99     def test_event_repr(self):
100         event = Gdk.Event.new(Gdk.EventType.CONFIGURE)
101         self.assertTrue("CONFIGURE" in repr(event))
102
103     def test_event_structures(self):
104         def button_press_cb(button, event):
105             self.assertTrue(isinstance(event, Gdk.EventButton))
106             self.assertTrue(event.type == Gdk.EventType.BUTTON_PRESS)
107             self.assertEqual(event.send_event, 0)
108             self.assertEqual(event.get_state(), Gdk.ModifierType.CONTROL_MASK)
109             self.assertEqual(event.get_root_coords(), (2, 5))
110
111             event.time = 12345
112             self.assertEqual(event.get_time(), 12345)
113
114         w = Gtk.Window()
115         b = Gtk.Button()
116         b.connect('button-press-event', button_press_cb)
117         w.add(b)
118         w.show_all()
119         Gdk.test_simulate_button(b.get_window(),
120                                  2, 5,
121                                  0,
122                                  Gdk.ModifierType.CONTROL_MASK,
123                                  Gdk.EventType.BUTTON_PRESS)
124
125     def test_cursor(self):
126         self.assertEqual(Gdk.Cursor, gi.overrides.Gdk.Cursor)
127         with capture_glib_deprecation_warnings():
128             c = Gdk.Cursor(Gdk.CursorType.WATCH)
129         self.assertNotEqual(c, None)
130         with capture_glib_deprecation_warnings():
131             c = Gdk.Cursor(cursor_type=Gdk.CursorType.WATCH)
132         self.assertNotEqual(c, None)
133
134         display_manager = Gdk.DisplayManager.get()
135         display = display_manager.get_default_display()
136
137         test_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB,
138                                            False,
139                                            8,
140                                            5,
141                                            10)
142
143         with capture_glib_deprecation_warnings() as warn:
144             c = Gdk.Cursor(display,
145                            test_pixbuf,
146                            y=0, x=0)
147             self.assertNotEqual(c, None)
148
149             self.assertEqual(len(warn), 1)
150             self.assertTrue(issubclass(warn[0].category, PyGIDeprecationWarning))
151             self.assertRegexpMatches(str(warn[0].message),
152                                      '.*new_from_pixbuf.*')
153
154         self.assertRaises(ValueError, Gdk.Cursor, 1, 2, 3)
155
156     def test_flags(self):
157         self.assertEqual(Gdk.ModifierType.META_MASK | 0, 0x10000000)
158         self.assertEqual(hex(Gdk.ModifierType.META_MASK), '0x10000000')
159         self.assertEqual(str(Gdk.ModifierType.META_MASK),
160                          '<flags GDK_META_MASK of type Gdk.ModifierType>')
161
162         self.assertEqual(Gdk.ModifierType.RELEASE_MASK | 0, 0x40000000)
163         self.assertEqual(hex(Gdk.ModifierType.RELEASE_MASK), '0x40000000')
164         self.assertEqual(str(Gdk.ModifierType.RELEASE_MASK),
165                          '<flags GDK_RELEASE_MASK of type Gdk.ModifierType>')
166
167         self.assertEqual(Gdk.ModifierType.RELEASE_MASK | Gdk.ModifierType.META_MASK, 0x50000000)
168         self.assertEqual(str(Gdk.ModifierType.RELEASE_MASK | Gdk.ModifierType.META_MASK),
169                          '<flags GDK_META_MASK | GDK_RELEASE_MASK of type Gdk.ModifierType>')
170
171     def test_color_parse(self):
172         with capture_glib_deprecation_warnings():
173             c = Gdk.color_parse('#00FF80')
174         self.assertEqual(c.red, 0)
175         self.assertEqual(c.green, 65535)
176         self.assertEqual(c.blue, 32896)
177         self.assertEqual(Gdk.color_parse('bogus'), None)
178
179     def test_color_representations(self):
180         # __repr__ should generate a string which is parsable when possible
181         # http://docs.python.org/2/reference/datamodel.html#object.__repr__
182         color = Gdk.Color(red=65535, green=32896, blue=1)
183         self.assertEqual(eval(repr(color)), color)
184
185         rgba = Gdk.RGBA(red=1.0, green=0.8, blue=0.6, alpha=0.4)
186         self.assertEqual(eval(repr(rgba)), rgba)
187
188     def test_rectangle_functions(self):
189         # https://bugzilla.gnome.org/show_bug.cgi?id=756364
190         a = Gdk.Rectangle()
191         b = Gdk.Rectangle()
192         self.assertTrue(isinstance(Gdk.rectangle_union(a, b), Gdk.Rectangle))
193         intersect, rect = Gdk.rectangle_intersect(a, b)
194         self.assertTrue(isinstance(rect, Gdk.Rectangle))
195         self.assertTrue(isinstance(intersect, bool))