1 # -*- Mode: Python; py-indent-offset: 4 -*-
2 # vim: tabstop=4 shiftwidth=4 expandtab
7 from gi import PyGIDeprecationWarning
10 from gi.repository import Gdk, GdkPixbuf, Gtk
15 from helper import capture_glib_deprecation_warnings
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)
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))
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))
41 self.assertEqual(Gdk.Color(13107, 21845, 65535).to_floats(),
42 (0.2, 1.0 / 3.0, 1.0))
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))
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))
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)
60 self.assertEqual(rgba.green, 0.9)
62 # Iterator/tuple convsersion
63 self.assertEqual(tuple(Gdk.RGBA(0.1, 0.2, 0.3, 0.4)),
67 event = Gdk.Event.new(Gdk.EventType.CONFIGURE)
68 self.assertEqual(event.type, Gdk.EventType.CONFIGURE)
69 self.assertEqual(event.send_event, 0)
72 event.type = Gdk.EventType.SCROLL
73 self.assertRaises(AttributeError, lambda: getattr(event, 'foo_bar'))
75 def test_event_touch(self):
76 event = Gdk.Event.new(Gdk.EventType.TOUCH_BEGIN)
77 self.assertEqual(event.type, Gdk.EventType.TOUCH_BEGIN)
79 # emulating_pointer is unique to touch events
80 self.assertFalse(event.emulating_pointer)
81 self.assertFalse(event.touch.emulating_pointer)
83 event.emulating_pointer = True
84 self.assertTrue(event.emulating_pointer)
85 self.assertTrue(event.touch.emulating_pointer)
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)
95 # this used to work, keep it that way
96 self.assertFalse(hasattr(event, "foo_bar"))
99 def test_event_repr(self):
100 event = Gdk.Event.new(Gdk.EventType.CONFIGURE)
101 self.assertTrue("CONFIGURE" in repr(event))
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))
112 self.assertEqual(event.get_time(), 12345)
116 b.connect('button-press-event', button_press_cb)
119 Gdk.test_simulate_button(b.get_window(),
122 Gdk.ModifierType.CONTROL_MASK,
123 Gdk.EventType.BUTTON_PRESS)
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)
134 display_manager = Gdk.DisplayManager.get()
135 display = display_manager.get_default_display()
137 test_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB,
143 with capture_glib_deprecation_warnings() as warn:
144 c = Gdk.Cursor(display,
147 self.assertNotEqual(c, None)
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.*')
154 self.assertRaises(ValueError, Gdk.Cursor, 1, 2, 3)
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>')
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>')
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>')
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)
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)
185 rgba = Gdk.RGBA(red=1.0, green=0.8, blue=0.6, alpha=0.4)
186 self.assertEqual(eval(repr(rgba)), rgba)
188 def test_rectangle_functions(self):
189 # https://bugzilla.gnome.org/show_bug.cgi?id=756364
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))