1 # -*- Mode: Python; py-indent-offset: 4 -*-
2 # vim: tabstop=4 shiftwidth=4 expandtab
8 sys.path.insert(0, "../")
10 from compathelper import _long, _unicode, _bytes
12 from gi.repository import GLib
13 from gi.repository import GObject
14 from gi.repository import Gdk
15 from gi.repository import Gtk
16 from gi.repository import Gio
17 from gi.repository import Pango
18 from gi.repository import GdkPixbuf
19 import gi.overrides as overrides
22 class TestGLib(unittest.TestCase):
24 def test_gvariant_create(self):
27 variant = GLib.Variant('i', 42)
28 self.assertTrue(isinstance(variant, GLib.Variant))
29 self.assertEquals(variant.get_int32(), 42)
31 variant = GLib.Variant('s', '')
32 self.assertTrue(isinstance(variant, GLib.Variant))
33 self.assertEquals(variant.get_string(), '')
35 variant = GLib.Variant('s', 'hello')
36 self.assertTrue(isinstance(variant, GLib.Variant))
37 self.assertEquals(variant.get_string(), 'hello')
40 variant = GLib.Variant('v', GLib.Variant('i', 42))
41 self.assertTrue(isinstance(variant, GLib.Variant))
42 self.assertTrue(isinstance(variant.get_variant(), GLib.Variant))
43 self.assertEqual(variant.get_type_string(), 'v')
44 self.assertEqual(variant.get_variant().get_type_string(), 'i')
45 self.assertEquals(variant.get_variant().get_int32(), 42)
47 variant = GLib.Variant('v', GLib.Variant('v', GLib.Variant('i', 42)))
48 self.assertEqual(variant.get_type_string(), 'v')
49 self.assertEqual(variant.get_variant().get_type_string(), 'v')
50 self.assertEqual(variant.get_variant().get_variant().get_type_string(), 'i')
51 self.assertEquals(variant.get_variant().get_variant().get_int32(), 42)
55 variant = GLib.Variant('()', ())
56 self.assertEqual(variant.get_type_string(), '()')
57 self.assertEquals(variant.n_children(), 0)
59 variant = GLib.Variant('(i)', (3,))
60 self.assertEqual(variant.get_type_string(), '(i)')
61 self.assertTrue(isinstance(variant, GLib.Variant))
62 self.assertEquals(variant.n_children(), 1)
63 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
64 self.assertEquals(variant.get_child_value(0).get_int32(), 3)
66 variant = GLib.Variant('(ss)', ('mec', 'mac'))
67 self.assertEqual(variant.get_type_string(), '(ss)')
68 self.assertTrue(isinstance(variant, GLib.Variant))
69 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
70 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
71 self.assertEquals(variant.get_child_value(0).get_string(), 'mec')
72 self.assertEquals(variant.get_child_value(1).get_string(), 'mac')
75 variant = GLib.Variant('((si)(ub))', (('hello', -1), (42, True)))
76 self.assertEqual(variant.get_type_string(), '((si)(ub))')
77 self.assertEqual(variant.unpack(), (('hello', -1), (_long(42), True)))
81 variant = GLib.Variant('a{si}', {})
82 self.assertTrue(isinstance(variant, GLib.Variant))
83 self.assertEqual(variant.get_type_string(), 'a{si}')
84 self.assertEquals(variant.n_children(), 0)
86 variant = GLib.Variant('a{si}', {'': 1, 'key1': 2, 'key2': 3})
87 self.assertEqual(variant.get_type_string(), 'a{si}')
88 self.assertTrue(isinstance(variant, GLib.Variant))
89 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
90 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
91 self.assertTrue(isinstance(variant.get_child_value(2), GLib.Variant))
92 self.assertEqual(variant.unpack(), {'': 1, 'key1': 2, 'key2': 3})
95 variant = GLib.Variant('a{sa{si}}', {})
96 self.assertTrue(isinstance(variant, GLib.Variant))
97 self.assertEqual(variant.get_type_string(), 'a{sa{si}}')
98 self.assertEquals(variant.n_children(), 0)
100 d = {'': {'': 1, 'keyn1': 2},
101 'key1': {'key11': 11, 'key12': 12}}
102 variant = GLib.Variant('a{sa{si}}', d)
103 self.assertEqual(variant.get_type_string(), 'a{sa{si}}')
104 self.assertTrue(isinstance(variant, GLib.Variant))
105 self.assertEqual(variant.unpack(), d)
109 variant = GLib.Variant('ai', [])
110 self.assertEqual(variant.get_type_string(), 'ai')
111 self.assertEquals(variant.n_children(), 0)
113 variant = GLib.Variant('ai', [1, 2])
114 self.assertEqual(variant.get_type_string(), 'ai')
115 self.assertTrue(isinstance(variant, GLib.Variant))
116 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
117 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
118 self.assertEquals(variant.get_child_value(0).get_int32(), 1)
119 self.assertEquals(variant.get_child_value(1).get_int32(), 2)
121 variant = GLib.Variant('as', [])
122 self.assertEqual(variant.get_type_string(), 'as')
123 self.assertEquals(variant.n_children(), 0)
125 variant = GLib.Variant('as', [''])
126 self.assertEqual(variant.get_type_string(), 'as')
127 self.assertTrue(isinstance(variant, GLib.Variant))
128 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
129 self.assertEquals(variant.get_child_value(0).get_string(), '')
131 variant = GLib.Variant('as', ['hello', 'world'])
132 self.assertEqual(variant.get_type_string(), 'as')
133 self.assertTrue(isinstance(variant, GLib.Variant))
134 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
135 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
136 self.assertEquals(variant.get_child_value(0).get_string(), 'hello')
137 self.assertEquals(variant.get_child_value(1).get_string(), 'world')
140 variant = GLib.Variant('aai', [])
141 self.assertEqual(variant.get_type_string(), 'aai')
142 self.assertEquals(variant.n_children(), 0)
144 variant = GLib.Variant('aai', [[]])
145 self.assertEqual(variant.get_type_string(), 'aai')
146 self.assertEquals(variant.n_children(), 1)
147 self.assertEquals(variant.get_child_value(0).n_children(), 0)
149 variant = GLib.Variant('aai', [[1, 2], [3, 4, 5]])
150 self.assertEqual(variant.get_type_string(), 'aai')
151 self.assertEquals(variant.unpack(), [[1, 2], [3, 4, 5]])
157 variant = GLib.Variant('(as)', ([],))
158 self.assertEqual(variant.get_type_string(), '(as)')
159 self.assertEquals(variant.n_children(), 1)
160 self.assertEquals(variant.get_child_value(0).n_children(), 0)
162 variant = GLib.Variant('(as)', ([''],))
163 self.assertEqual(variant.get_type_string(), '(as)')
164 self.assertEquals(variant.n_children(), 1)
165 self.assertEquals(variant.get_child_value(0).n_children(), 1)
166 self.assertEquals(variant.get_child_value(0).get_child_value(0).get_string(), '')
168 variant = GLib.Variant('(as)', (['hello'],))
169 self.assertEqual(variant.get_type_string(), '(as)')
170 self.assertEquals(variant.n_children(), 1)
171 self.assertEquals(variant.get_child_value(0).n_children(), 1)
172 self.assertEquals(variant.get_child_value(0).get_child_value(0).get_string(), 'hello')
174 obj = {'a1': (1, True), 'a2': (2, False)}
175 variant = GLib.Variant('a{s(ib)}', obj)
176 self.assertEqual(variant.get_type_string(), 'a{s(ib)}')
177 self.assertEqual(variant.unpack(), obj)
179 obj = {'a1': (1, GLib.Variant('b', True)), 'a2': (2, GLib.Variant('y', 255))}
180 variant = GLib.Variant('a{s(iv)}', obj)
181 self.assertEqual(variant.get_type_string(), 'a{s(iv)}')
182 self.assertEqual(variant.unpack(), {'a1': (1, True), 'a2': (2, 255)})
184 obj = (1, {'a': {'a1': True, 'a2': False},
189 variant = GLib.Variant('(ia{sa{sb}}s)', obj)
190 self.assertEqual(variant.get_type_string(), '(ia{sa{sb}}s)')
191 self.assertEqual(variant.unpack(), obj)
193 obj = {"frequency": GLib.Variant('t', 738000000),
194 "hierarchy": GLib.Variant('i', 0),
195 "bandwidth": GLib.Variant('x', 8),
196 "code-rate-hp": GLib.Variant('d', 2.0/3.0),
197 "constellation": GLib.Variant('s', "QAM16"),
198 "guard-interval": GLib.Variant('u', 4),}
199 variant = GLib.Variant('a{sv}', obj)
200 self.assertEqual(variant.get_type_string(), 'a{sv}')
201 self.assertEqual(variant.unpack(), {"frequency": 738000000,
204 "code-rate-hp": 2.0/3.0,
205 "constellation": "QAM16",
206 "guard-interval": 4})
208 def test_gvariant_create_errors(self):
210 self.assertRaises(TypeError, GLib.Variant, 'i', 42, 3)
211 self.assertRaises(TypeError, GLib.Variant, '(i)', (42, 3))
213 # not enough arguments
214 self.assertRaises(TypeError, GLib.Variant, '(ii)', (42,))
217 self.assertRaises(TypeError, GLib.Variant, 'i', 'hello')
218 self.assertRaises(TypeError, GLib.Variant, 's', 42)
219 self.assertRaises(TypeError, GLib.Variant, '(ss)', 'mec', 'mac')
221 # unimplemented data type
222 self.assertRaises(NotImplementedError, GLib.Variant, 'Q', 1)
224 def test_gvariant_unpack(self):
226 res = GLib.Variant.new_int32(-42).unpack()
227 self.assertEqual(res, -42)
229 res = GLib.Variant.new_uint64(34359738368).unpack()
230 self.assertEqual(res, 34359738368)
232 res = GLib.Variant.new_boolean(True).unpack()
233 self.assertEqual(res, True)
235 res = GLib.Variant.new_object_path('/foo/Bar').unpack()
236 self.assertEqual(res, '/foo/Bar')
239 res = GLib.Variant('v', GLib.Variant.new_int32(-42)).unpack()
240 self.assertEqual(res, -42)
242 variant = GLib.Variant('v', GLib.Variant('v', GLib.Variant('i', 42)))
243 self.assertEqual(res, -42)
246 res = GLib.Variant.new_tuple(GLib.Variant.new_int32(-1),
247 GLib.Variant.new_string('hello')).unpack()
248 self.assertEqual(res, (-1, 'hello'))
251 vb = GLib.VariantBuilder()
252 vb.init(gi._gi.variant_type_from_string('ai'))
253 vb.add_value(GLib.Variant.new_int32(-1))
254 vb.add_value(GLib.Variant.new_int32(3))
255 res = vb.end().unpack()
256 self.assertEqual(res, [-1, 3])
259 res = GLib.Variant('a{si}', {'key1': 1, 'key2': 2}).unpack()
260 self.assertEqual(res, {'key1': 1, 'key2': 2})
262 def test_gvariant_iteration(self):
264 vb = GLib.VariantBuilder()
265 vb.init(gi._gi.variant_type_from_string('ai'))
266 vb.add_value(GLib.Variant.new_int32(-1))
267 vb.add_value(GLib.Variant.new_int32(3))
270 self.assertEqual(len(v), 2)
271 self.assertEqual(v[0], -1)
272 self.assertEqual(v[1], 3)
273 self.assertEqual(v[-1], 3)
274 self.assertEqual(v[-2], -1)
275 self.assertRaises(IndexError, v.__getitem__, 2)
276 self.assertRaises(IndexError, v.__getitem__, -3)
277 self.assertRaises(ValueError, v.__getitem__, 'a')
280 self.assertEqual([x for x in v], [-1, 3])
281 self.assertEqual(list(v), [-1, 3])
284 v = GLib.Variant.new_tuple(GLib.Variant.new_int32(-1),
285 GLib.Variant.new_string('hello'))
286 self.assertEqual(len(v), 2)
287 self.assertEqual(v[0], -1)
288 self.assertEqual(v[1], 'hello')
289 self.assertEqual(v[-1], 'hello')
290 self.assertEqual(v[-2], -1)
291 self.assertRaises(IndexError, v.__getitem__, 2)
292 self.assertRaises(IndexError, v.__getitem__, -3)
293 self.assertRaises(ValueError, v.__getitem__, 'a')
296 self.assertEqual([x for x in v], [-1, 'hello'])
297 self.assertEqual(tuple(v), (-1, 'hello'))
299 # dictionary index access
300 vsi = GLib.Variant('a{si}', {'key1': 1, 'key2': 2})
301 vis = GLib.Variant('a{is}', {1: 'val1', 5: 'val2'})
303 self.assertEqual(len(vsi), 2)
304 self.assertEqual(vsi['key1'], 1)
305 self.assertEqual(vsi['key2'], 2)
306 self.assertRaises(KeyError, vsi.__getitem__, 'unknown')
308 self.assertEqual(len(vis), 2)
309 self.assertEqual(vis[1], 'val1')
310 self.assertEqual(vis[5], 'val2')
311 self.assertRaises(KeyError, vsi.__getitem__, 3)
313 # dictionary iteration
314 self.assertEqual(set(vsi.keys()), set(['key1', 'key2']))
315 self.assertEqual(set(vis.keys()), set([1, 5]))
317 # string index access
318 v = GLib.Variant('s', 'hello')
319 self.assertEqual(len(v), 5)
320 self.assertEqual(v[0], 'h')
321 self.assertEqual(v[4], 'o')
322 self.assertEqual(v[-1], 'o')
323 self.assertEqual(v[-5], 'h')
324 self.assertRaises(IndexError, v.__getitem__, 5)
325 self.assertRaises(IndexError, v.__getitem__, -6)
328 self.assertEqual([x for x in v], ['h', 'e', 'l', 'l', 'o'])
330 class TestPango(unittest.TestCase):
332 def test_default_font_description(self):
333 desc = Pango.FontDescription()
334 self.assertEquals(desc.get_variant(), Pango.Variant.NORMAL)
336 def test_font_description(self):
337 desc = Pango.FontDescription('monospace')
338 self.assertEquals(desc.get_family(), 'monospace')
339 self.assertEquals(desc.get_variant(), Pango.Variant.NORMAL)
341 def test_layout(self):
342 self.assertRaises(TypeError, Pango.Layout)
343 context = Pango.Context()
344 layout = Pango.Layout(context)
345 self.assertEquals(layout.get_context(), context)
347 class TestGdk(unittest.TestCase):
349 def test_constructor(self):
350 attribute = Gdk.WindowAttr()
351 attribute.window_type = Gdk.WindowType.CHILD
352 attributes_mask = Gdk.WindowAttributesType.X | \
353 Gdk.WindowAttributesType.Y
354 window = Gdk.Window(None, attribute, attributes_mask)
355 self.assertEquals(window.get_window_type(), Gdk.WindowType.CHILD)
357 def test_color(self):
358 color = Gdk.Color(100, 200, 300)
359 self.assertEquals(color.red, 100)
360 self.assertEquals(color.green, 200)
361 self.assertEquals(color.blue, 300)
364 self.assertEquals(Gdk.RGBA, overrides.Gdk.RGBA)
365 rgba = Gdk.RGBA(0.1, 0.2, 0.3, 0.4)
366 self.assertEquals(rgba.red, 0.1)
367 self.assertEquals(rgba.green, 0.2)
368 self.assertEquals(rgba.blue, 0.3)
369 self.assertEquals(rgba.alpha, 0.4)
371 self.assertEquals(rgba.green, 0.9)
373 def test_event(self):
374 event = Gdk.Event.new(Gdk.EventType.CONFIGURE)
375 self.assertEquals(event.type, Gdk.EventType.CONFIGURE)
376 self.assertEquals(event.send_event, 0)
378 event = Gdk.Event.new(Gdk.EventType.DRAG_MOTION)
379 event.x_root, event.y_root = 0, 5
380 self.assertEquals(event.x_root, 0)
381 self.assertEquals(event.y_root, 5)
384 event.type = Gdk.EventType.SCROLL
385 self.assertRaises(AttributeError, lambda: getattr(event, 'foo_bar'))
387 def test_event_structures(self):
388 def button_press_cb(button, event):
389 self.assertTrue(isinstance(event, Gdk.EventButton))
390 self.assertTrue(event.type == Gdk.EventType.BUTTON_PRESS)
391 self.assertEquals(event.send_event, 0)
392 self.assertEquals(event.get_state(), Gdk.ModifierType.CONTROL_MASK)
393 self.assertEquals(event.get_root_coords(), (2, 5))
396 self.assertEquals(event.get_time(), 12345)
400 b.connect('button-press-event', button_press_cb)
403 Gdk.test_simulate_button(b.get_window(),
406 Gdk.ModifierType.CONTROL_MASK,
407 Gdk.EventType.BUTTON_PRESS)
409 def test_cursor(self):
410 self.assertEquals(Gdk.Cursor, overrides.Gdk.Cursor)
411 c = Gdk.Cursor(Gdk.CursorType.WATCH)
412 self.assertNotEqual(c, None)
413 c = Gdk.Cursor(cursor_type = Gdk.CursorType.WATCH)
414 self.assertNotEqual(c, None)
416 display_manager = Gdk.DisplayManager.get()
417 display = display_manager.get_default_display()
419 test_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB,
425 c = Gdk.Cursor(display,
429 self.assertNotEqual(c, None)
430 self.assertRaises(ValueError, Gdk.Cursor, 1, 2, 3)
432 class TestGtk(unittest.TestCase):
434 def test_container(self):
441 self.assertTrue(label in box)
442 self.assertTrue(label2 in box)
443 self.assertEqual(len(box), 2)
446 self.assertEqual(l, [label, label2])
448 def test_actions(self):
449 self.assertEquals(Gtk.Action, overrides.Gtk.Action)
450 self.assertRaises(TypeError, Gtk.Action)
451 action = Gtk.Action("test", "Test", "Test Action", Gtk.STOCK_COPY)
452 self.assertEquals(action.get_name(), "test")
453 self.assertEquals(action.get_label(), "Test")
454 self.assertEquals(action.get_tooltip(), "Test Action")
455 self.assertEquals(action.get_stock_id(), Gtk.STOCK_COPY)
457 self.assertEquals(Gtk.RadioAction, overrides.Gtk.RadioAction)
458 self.assertRaises(TypeError, Gtk.RadioAction)
459 action = Gtk.RadioAction("test", "Test", "Test Action", Gtk.STOCK_COPY, 1)
460 self.assertEquals(action.get_name(), "test")
461 self.assertEquals(action.get_label(), "Test")
462 self.assertEquals(action.get_tooltip(), "Test Action")
463 self.assertEquals(action.get_stock_id(), Gtk.STOCK_COPY)
464 self.assertEquals(action.get_current_value(), 1)
466 def test_actiongroup(self):
467 self.assertEquals(Gtk.ActionGroup, overrides.Gtk.ActionGroup)
468 self.assertRaises(TypeError, Gtk.ActionGroup)
470 action_group = Gtk.ActionGroup (name = 'TestActionGroup')
471 callback_data = "callback data"
473 def test_action_callback_data(action, user_data):
474 self.assertEquals(user_data, callback_data);
476 def test_radio_action_callback_data(action, current, user_data):
477 self.assertEquals(user_data, callback_data);
479 action_group.add_actions ([
480 ('test-action1', None, 'Test Action 1',
481 None, None, test_action_callback_data),
482 ('test-action2', Gtk.STOCK_COPY, 'Test Action 2',
483 None, None, test_action_callback_data)], callback_data)
484 action_group.add_toggle_actions([
485 ('test-toggle-action1', None, 'Test Toggle Action 1',
486 None, None, test_action_callback_data, False),
487 ('test-toggle-action2', Gtk.STOCK_COPY, 'Test Toggle Action 2',
488 None, None, test_action_callback_data, True)], callback_data)
489 action_group.add_radio_actions([
490 ('test-radio-action1', None, 'Test Radio Action 1'),
491 ('test-radio-action2', Gtk.STOCK_COPY, 'Test Radio Action 2')], 1,
492 test_radio_action_callback_data,
495 expected_results = [('test-action1', Gtk.Action),
496 ('test-action2', Gtk.Action),
497 ('test-toggle-action1', Gtk.ToggleAction),
498 ('test-toggle-action2', Gtk.ToggleAction),
499 ('test-radio-action1', Gtk.RadioAction),
500 ('test-radio-action2', Gtk.RadioAction)]
502 for action in action_group.list_actions():
503 a = (action.get_name(), type(action))
504 self.assertTrue(a in expected_results)
505 expected_results.remove(a)
508 def test_uimanager(self):
509 self.assertEquals(Gtk.UIManager, overrides.Gtk.UIManager)
511 ui.add_ui_from_string(
514 <menubar name="menubar1"></menubar>
518 menubar = ui.get_widget("/menubar1")
519 self.assertEquals(type(menubar), Gtk.MenuBar)
521 ag = Gtk.ActionGroup (name="ag1")
522 ui.insert_action_group(ag)
523 ag2 = Gtk.ActionGroup (name="ag2")
524 ui.insert_action_group(ag2)
525 groups = ui.get_action_groups()
526 self.assertEquals(ag, groups[-2])
527 self.assertEquals(ag2, groups[-1])
529 def test_builder(self):
530 self.assertEquals(Gtk.Builder, overrides.Gtk.Builder)
532 class SignalTest(GObject.GObject):
533 __gtype_name__ = "GIOverrideSignalTest"
535 "test-signal": (GObject.SIGNAL_RUN_FIRST,
545 def on_signal_1(self, *args):
548 def on_signal_3(self, *args):
551 signal_checker = SignalCheck()
552 builder = Gtk.Builder()
554 # add object1 to the builder
555 builder.add_from_string(
558 <object class="GIOverrideSignalTest" id="object1">
559 <signal name="test-signal" handler="on_signal_1" />
564 # only add object3 to the builder
565 builder.add_objects_from_string(
568 <object class="GIOverrideSignalTest" id="object2">
569 <signal name="test-signal" handler="on_signal_2" />
571 <object class="GIOverrideSignalTest" id="object3">
572 <signal name="test-signal" handler="on_signal_3" />
574 <object class="GIOverrideSignalTest" id="object4">
575 <signal name="test-signal" handler="on_signal_4" />
583 builder.connect_signals(signal_checker)
585 # call their notify signals and check sentinel
586 objects = builder.get_objects()
587 self.assertEquals(len(objects), 2)
589 obj.emit('test-signal')
591 self.assertEquals(signal_checker.sentinel, 4)
593 def test_dialogs(self):
594 self.assertEquals(Gtk.Dialog, overrides.Gtk.Dialog)
595 self.assertEquals(Gtk.AboutDialog, overrides.Gtk.AboutDialog)
596 self.assertEquals(Gtk.MessageDialog, overrides.Gtk.MessageDialog)
597 self.assertEquals(Gtk.ColorSelectionDialog, overrides.Gtk.ColorSelectionDialog)
598 self.assertEquals(Gtk.FileChooserDialog, overrides.Gtk.FileChooserDialog)
599 self.assertEquals(Gtk.FontSelectionDialog, overrides.Gtk.FontSelectionDialog)
600 self.assertEquals(Gtk.RecentChooserDialog, overrides.Gtk.RecentChooserDialog)
603 dialog = Gtk.Dialog (title='Foo',
604 flags=Gtk.DialogFlags.MODAL,
605 buttons=('test-button1', 1))
607 dialog.add_buttons ('test-button2', 2, Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)
609 self.assertEquals('Foo', dialog.get_title())
610 self.assertTrue(dialog.get_modal())
611 button = dialog.get_widget_for_response (1)
612 self.assertEquals('test-button1', button.get_label())
613 button = dialog.get_widget_for_response (2)
614 self.assertEquals('test-button2', button.get_label())
615 button = dialog.get_widget_for_response (Gtk.ResponseType.CLOSE)
616 self.assertEquals(Gtk.STOCK_CLOSE, button.get_label())
619 dialog = Gtk.AboutDialog()
622 dialog = Gtk.MessageDialog (title='message dialog test',
623 flags=Gtk.DialogFlags.MODAL,
624 buttons=Gtk.ButtonsType.OK,
625 message_format='dude!')
627 self.assertEquals('message dialog test', dialog.get_title())
628 self.assertTrue(dialog.get_modal())
629 text = dialog.get_property('text')
630 self.assertEquals('dude!', text)
632 dialog.format_secondary_text('2nd text')
633 self.assertEqual(dialog.get_property('secondary-text'), '2nd text')
634 self.assertFalse(dialog.get_property('secondary-use-markup'))
636 dialog.format_secondary_markup('2nd markup')
637 self.assertEqual(dialog.get_property('secondary-text'), '2nd markup')
638 self.assertTrue(dialog.get_property('secondary-use-markup'))
640 # Gtk.ColorSelectionDialog
641 dialog = Gtk.ColorSelectionDialog("color selection dialog test")
642 self.assertEquals('color selection dialog test', dialog.get_title())
644 # Gtk.FileChooserDialog
645 dialog = Gtk.FileChooserDialog (title='file chooser dialog test',
646 buttons=('test-button1', 1),
647 action=Gtk.FileChooserAction.SAVE)
649 dialog.add_buttons ('test-button2', 2, Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)
650 self.assertEquals('file chooser dialog test', dialog.get_title())
651 button = dialog.get_widget_for_response (1)
652 self.assertEquals('test-button1', button.get_label())
653 button = dialog.get_widget_for_response (2)
654 self.assertEquals('test-button2', button.get_label())
655 button = dialog.get_widget_for_response (Gtk.ResponseType.CLOSE)
656 self.assertEquals(Gtk.STOCK_CLOSE, button.get_label())
657 action = dialog.get_property('action')
658 self.assertEquals(Gtk.FileChooserAction.SAVE, action)
661 # Gtk.FontSelectionDialog
662 dialog = Gtk.ColorSelectionDialog("font selection dialog test")
663 self.assertEquals('font selection dialog test', dialog.get_title())
665 # Gtk.RecentChooserDialog
666 test_manager = Gtk.RecentManager()
667 dialog = Gtk.RecentChooserDialog (title='recent chooser dialog test',
668 buttons=('test-button1', 1),
669 manager=test_manager)
671 dialog.add_buttons ('test-button2', 2, Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)
672 self.assertEquals('recent chooser dialog test', dialog.get_title())
673 button = dialog.get_widget_for_response (1)
674 self.assertEquals('test-button1', button.get_label())
675 button = dialog.get_widget_for_response (2)
676 self.assertEquals('test-button2', button.get_label())
677 button = dialog.get_widget_for_response (Gtk.ResponseType.CLOSE)
678 self.assertEquals(Gtk.STOCK_CLOSE, button.get_label())
680 class TestClass(GObject.GObject):
681 __gtype_name__ = "GIOverrideTreeAPITest"
683 def __init__(self, tester, int_value, string_value):
684 super(TestGtk.TestClass, self).__init__()
686 self.int_value = int_value
687 self.string_value = string_value
689 def check(self, int_value, string_value):
690 self.tester.assertEquals(int_value, self.int_value)
691 self.tester.assertEquals(string_value, self.string_value)
693 def test_tree_store(self):
694 self.assertEquals(Gtk.TreeStore, overrides.Gtk.TreeStore)
695 self.assertEquals(Gtk.ListStore, overrides.Gtk.ListStore)
696 self.assertEquals(Gtk.TreeModel, overrides.Gtk.TreeModel)
697 self.assertEquals(Gtk.TreeViewColumn, overrides.Gtk.TreeViewColumn)
699 class TestPyObject(object):
702 test_pyobj = TestPyObject()
703 test_pydict = {1:1, "2":2, "3":"3"}
704 test_pylist = [1,"2", "3"]
705 tree_store = Gtk.TreeStore(int,
722 label = 'this is child #%d' % i
723 testobj = TestGtk.TestClass(self, i, label)
724 parent = tree_store.append(parent, (i,
734 -9223372036854775808,
740 # len gets the number of children in the root node
741 # since we kept appending to the previous node
742 # there should only be one child of the root
743 self.assertEquals(len(tree_store), 1)
745 # walk the tree to see if the values were stored correctly
749 treeiter = tree_store.iter_children(parent)
751 i = tree_store.get_value(treeiter, 0)
752 s = tree_store.get_value(treeiter, 1)
753 obj = tree_store.get_value(treeiter, 2)
756 pyobj = tree_store.get_value(treeiter, 3)
757 self.assertEquals(pyobj, test_pyobj)
758 pydict = tree_store.get_value(treeiter, 4)
759 self.assertEquals(pydict, test_pydict)
760 pylist = tree_store.get_value(treeiter, 5)
761 self.assertEquals(pylist, test_pylist)
763 bool_1 = tree_store.get_value(treeiter, 6)
764 bool_2 = tree_store.get_value(treeiter, 7)
765 self.assertEquals(bool_1, bool_2)
766 self.assertTrue(isinstance(bool_1, bool))
767 self.assertTrue(isinstance(bool_2, bool))
769 uint_ = tree_store.get_value(treeiter, 8)
770 self.assertEquals(uint_, i)
771 ulong_ = tree_store.get_value(treeiter, 9)
772 self.assertEquals(ulong_, 9223372036854775808)
773 int64_ = tree_store.get_value(treeiter, 10)
774 self.assertEquals(int64_, -9223372036854775808)
775 uint64_ = tree_store.get_value(treeiter, 11)
776 self.assertEquals(uint64_, 0xffffffffffffffff)
777 uchar_ = tree_store.get_value(treeiter, 12)
778 self.assertEquals(ord(uchar_), 254)
779 char_ = tree_store.get_value(treeiter, 13)
780 self.assertEquals(char_, 'a')
783 treeiter = tree_store.iter_children(parent)
785 self.assertEquals(i, 99)
787 def test_list_store(self):
788 class TestPyObject(object):
791 class TestPyGObject(GObject.Object):
792 __gtype_name__ = 'TestPyGObject'
793 def __init__(self, i):
794 GObject.Object.__init__(self)
795 self.sentinal = i + 5
797 test_pyobj = TestPyObject()
798 test_pydict = {1:1, "2":2, "3":"3"}
799 test_pylist = [1,"2", "3"]
801 list_store = Gtk.ListStore(int, str, 'GIOverrideTreeAPITest', object, object, object, bool, bool, object)
803 label = 'this is row #%d' % i
804 testobj = TestGtk.TestClass(self, i, label)
805 testpygobj = TestPyGObject(i)
806 parent = list_store.append((i,
817 label = _unicode('this is row #93')
818 treeiter = list_store.append()
819 list_store.set_value(treeiter, 0, i)
820 list_store.set_value(treeiter, 1, label)
821 list_store.set_value(treeiter, 2, TestGtk.TestClass(self, i, label))
822 list_store.set_value(treeiter, 3, test_pyobj)
823 list_store.set_value(treeiter, 4, test_pydict)
824 list_store.set_value(treeiter, 5, test_pylist)
825 list_store.set_value(treeiter, 6, 1)
826 list_store.set_value(treeiter, 7, True)
827 list_store.set_value(treeiter, 8, TestPyGObject(i))
829 # test automatic unicode->str conversion
831 label = _unicode('this is row #94')
832 treeiter = list_store.append((i,
834 TestGtk.TestClass(self, i, label),
842 # add sorted items out of order to test insert* apis
843 # also test sending in None to not set a column
845 label = 'this is row #97'
846 treeiter = list_store.append((None,
856 list_store.set_value(treeiter, 0, i)
857 list_store.set_value(treeiter, 1, label)
858 list_store.set_value(treeiter, 2, TestGtk.TestClass(self, i, label))
859 list_store.set_value(treeiter, 4, test_pydict)
860 list_store.set_value(treeiter, 7, True)
864 label = 'this is row #99'
865 list_store.insert(9999, (i,
867 TestGtk.TestClass(self, i, label),
876 label = 'this is row #96'
877 list_store.insert_before(treeiter, (i,
879 TestGtk.TestClass(self, i, label),
888 label = 'this is row #98'
889 list_store.insert_after(treeiter, (i,
891 TestGtk.TestClass(self, i, label),
901 label = 'this is row #95'
902 list_store.insert(95, (i,
904 TestGtk.TestClass(self, i, label),
912 self.assertEquals(len(list_store), 100)
914 # walk the list to see if the values were stored correctly
916 treeiter = list_store.get_iter_first()
920 i = list_store.get_value(treeiter, 0)
921 self.assertEquals(i, counter)
922 s = list_store.get_value(treeiter, 1)
923 obj = list_store.get_value(treeiter, 2)
926 pyobj = list_store.get_value(treeiter, 3)
927 self.assertEquals(pyobj, test_pyobj)
928 pydict = list_store.get_value(treeiter, 4)
929 self.assertEquals(pydict, test_pydict)
930 pylist = list_store.get_value(treeiter, 5)
931 self.assertEquals(pylist, test_pylist)
933 bool_1 = list_store.get_value(treeiter, 6)
934 bool_2 = list_store.get_value(treeiter, 7)
935 self.assertEquals(bool_1, bool_2)
936 self.assertTrue(isinstance(bool_1, bool))
937 self.assertTrue(isinstance(bool_2, bool))
939 pygobj = list_store.get_value(treeiter, 8)
940 self.assertEquals(pygobj.sentinal, i + 5)
942 treeiter = list_store.iter_next(treeiter)
946 self.assertEquals(i, 99)
948 def test_tree_path(self):
950 p2 = Gtk.TreePath.new_first()
951 self.assertEqual(p1, p2)
952 self.assertEqual(str(p1), '0')
954 p2 = Gtk.TreePath.new_from_string('2')
955 self.assertEqual(p1, p2)
956 self.assertEqual(str(p1), '2')
957 p1 = Gtk.TreePath('1:2:3')
958 p2 = Gtk.TreePath.new_from_string('1:2:3')
959 self.assertEqual(p1, p2)
960 self.assertEqual(str(p1), '1:2:3')
961 p1 = Gtk.TreePath((1,2,3))
962 p2 = Gtk.TreePath.new_from_string('1:2:3')
963 self.assertEqual(p1, p2)
964 self.assertEqual(str(p1), '1:2:3')
965 self.assertTrue(p1 != None)
966 self.assertFalse(p1 == None)
967 self.assertTrue(p1 > None)
968 self.assertTrue(p1 >= None)
969 self.assertFalse(p1 < None)
970 self.assertFalse(p1 <= None)
972 def test_tree_model(self):
973 tree_store = Gtk.TreeStore(int, str)
975 self.assertTrue(tree_store)
976 self.assertEqual(len(tree_store), 0)
977 self.assertEqual(tree_store.get_iter_first(), None)
979 def get_by_index(row, col=None):
981 return tree_store[row][col]
983 return tree_store[row]
985 self.assertRaises(TypeError, get_by_index, None)
986 self.assertRaises(TypeError, get_by_index, "")
987 self.assertRaises(TypeError, get_by_index, ())
989 self.assertRaises(IndexError, get_by_index, "0")
990 self.assertRaises(IndexError, get_by_index, 0)
991 self.assertRaises(IndexError, get_by_index, (0,))
993 self.assertRaises(ValueError, tree_store.get_iter, "0")
994 self.assertRaises(ValueError, tree_store.get_iter, 0)
995 self.assertRaises(ValueError, tree_store.get_iter, (0,))
997 self.assertRaises(ValueError, tree_store.get_iter_from_string, "0")
999 for row in tree_store:
1000 self.fail("Should not be reached")
1002 class DerivedIntType(int):
1005 class DerivedStrType(str):
1008 for i in range(100):
1009 label = 'this is row #%d' % i
1010 parent = tree_store.append(None, (DerivedIntType(i), DerivedStrType(label),))
1011 self.assertNotEquals(parent, None)
1013 label = 'this is child #%d of node #%d' % (j, i)
1014 child = tree_store.append(parent, (j, label,))
1015 self.assertNotEqual(child, None)
1017 self.assertTrue(tree_store)
1018 self.assertEqual(len(tree_store), 100)
1020 for i,row in enumerate(tree_store):
1021 self.assertEqual(row.model, tree_store)
1022 self.assertEqual(row.parent, None)
1024 self.assertEqual(tree_store[i].path, row.path)
1025 self.assertEqual(tree_store[str(i)].path, row.path)
1026 self.assertEqual(tree_store[(i,)].path, row.path)
1028 self.assertEqual(tree_store[i][0], i)
1029 self.assertEqual(tree_store[i][1], "this is row #%d" % i)
1031 aiter = tree_store.get_iter(i)
1032 self.assertEqual(tree_store.get_path(aiter), row.path)
1034 aiter = tree_store.get_iter(str(i))
1035 self.assertEqual(tree_store.get_path(aiter), row.path)
1037 aiter = tree_store.get_iter((i,))
1038 self.assertEqual(tree_store.get_path(aiter), row.path)
1040 self.assertEqual(tree_store.iter_parent(aiter), row.parent)
1042 next = tree_store.iter_next(aiter)
1043 if i < len(tree_store) - 1:
1044 self.assertEqual(tree_store.get_path(next), row.next.path)
1046 self.assertEqual(next, None)
1048 self.assertEqual(tree_store.iter_n_children(row.iter), 20)
1050 child = tree_store.iter_children(row.iter)
1051 for j,childrow in enumerate(row.iterchildren()):
1052 child_path = tree_store.get_path(child)
1053 self.assertEqual(childrow.path, child_path)
1054 self.assertEqual(childrow.parent.path, row.path)
1055 self.assertEqual(childrow.path, tree_store[child].path)
1056 self.assertEqual(childrow.path, tree_store[child_path].path)
1058 self.assertEqual(childrow[0], tree_store[child][0])
1059 self.assertEqual(childrow[0], j)
1060 self.assertEqual(childrow[1], tree_store[child][1])
1061 self.assertEqual(childrow[1], 'this is child #%d of node #%d' % (j, i))
1063 self.assertRaises(IndexError, get_by_index, child, 2)
1065 tree_store[child][1] = 'this was child #%d of node #%d' % (j, i)
1066 self.assertEqual(childrow[1], 'this was child #%d of node #%d' % (j, i))
1068 nth_child = tree_store.iter_nth_child(row.iter, j)
1069 self.assertEqual(childrow.path, tree_store.get_path(nth_child))
1071 childrow2 = tree_store["%d:%d" % (i, j)]
1072 self.assertEqual(childrow.path, childrow2.path)
1074 childrow2 = tree_store[(i, j,)]
1075 self.assertEqual(childrow.path, childrow2.path)
1077 child = tree_store.iter_next(child)
1079 self.assertEqual(childrow.next.path, tree_store.get_path(child))
1081 self.assertEqual(child, childrow.next)
1082 self.assertEqual(child, None)
1084 self.assertEqual(j, 19)
1086 self.assertEqual(i, 99)
1089 for i in range(-1,-100,-1):
1091 self.assertEqual(tree_store[i][0], i_real)
1094 for j in range(-1, -20, -1):
1096 path = (i_real, j_real,)
1098 self.assertEqual(tree_store[path][-2], j_real)
1100 label = 'this was child #%d of node #%d' % (j_real, i_real)
1101 self.assertEqual(tree_store[path][-1], label)
1103 new_label = 'this still is child #%d of node #%d' % (j_real, i_real)
1104 tree_store[path][-1] = new_label
1105 self.assertEqual(tree_store[path][-1], new_label)
1107 self.assertRaises(IndexError, get_by_index, path, -3)
1109 self.assertRaises(IndexError, get_by_index, -101)
1111 last_row = tree_store[99]
1112 self.assertNotEqual(last_row, None)
1114 for i,childrow in enumerate(last_row.iterchildren()):
1116 self.assertTrue(tree_store.remove(childrow.iter))
1118 self.assertFalse(tree_store.remove(childrow.iter))
1120 self.assertEqual(i, 19)
1122 self.assertEqual(tree_store.iter_n_children(last_row.iter), 0)
1123 for childrow in last_row.iterchildren():
1124 self.fail("Should not be reached")
1126 aiter = tree_store.get_iter(10)
1127 self.assertRaises(TypeError, tree_store.get, aiter, 1, 'a')
1128 self.assertRaises(ValueError, tree_store.get, aiter, 1, -1)
1129 self.assertRaises(ValueError, tree_store.get, aiter, 1, 100)
1130 self.assertEqual(tree_store.get(aiter, 0, 1), (10, 'this is row #10'))
1132 def test_tree_view_column(self):
1133 cell = Gtk.CellRendererText()
1134 column = Gtk.TreeViewColumn(title='This is just a test',
1139 def test_tree_selection(self):
1140 store = Gtk.ListStore(int, str)
1142 store.append((i, "foo"))
1143 view = Gtk.TreeView()
1144 view.set_model(store)
1145 firstpath = store.get_path(store.get_iter_first())
1146 sel = view.get_selection()
1148 sel.select_path(firstpath)
1149 (m, s) = sel.get_selected()
1150 self.assertEqual(m, store)
1151 self.assertEqual(store.get_path(s), firstpath)
1154 (m, s) = sel.get_selected()
1155 self.assertEqual(m, store)
1156 self.assertEqual(store.get_path(s), firstpath)
1158 sel.select_path("0:0")
1159 (m, s) = sel.get_selected()
1160 self.assertEqual(m, store)
1161 self.assertEqual(store.get_path(s), firstpath)
1163 sel.select_path((0,0))
1164 (m, s) = sel.get_selected()
1165 self.assertEqual(m, store)
1166 self.assertEqual(store.get_path(s), firstpath)
1168 def test_text_buffer(self):
1169 self.assertEquals(Gtk.TextBuffer, overrides.Gtk.TextBuffer)
1170 buffer = Gtk.TextBuffer()
1171 tag = buffer.create_tag ('title', font = 'Sans 18')
1173 self.assertEquals(tag.props.name, 'title')
1174 self.assertEquals(tag.props.font, 'Sans 18')
1176 (start, end) = buffer.get_bounds()
1178 mark = buffer.create_mark(None, start)
1179 self.assertFalse(mark.get_left_gravity())
1181 buffer.set_text('Hello Jane Hello Bob')
1182 (start, end) = buffer.get_bounds()
1183 text = buffer.get_text(start, end, False)
1184 self.assertEquals(text, 'Hello Jane Hello Bob')
1187 (start, end) = buffer.get_bounds()
1188 text = buffer.get_text(start, end, False)
1189 self.assertEquals(text, '')
1191 buffer.insert(end, 'HelloHello')
1192 buffer.insert(end, ' Bob')
1194 cursor_iter = end.copy()
1195 cursor_iter.backward_chars(9)
1196 buffer.place_cursor(cursor_iter)
1197 buffer.insert_at_cursor(' Jane ')
1199 (start, end) = buffer.get_bounds()
1200 text = buffer.get_text(start, end, False)
1201 self.assertEquals(text, 'Hello Jane Hello Bob')
1203 sel = buffer.get_selection_bounds()
1204 self.assertEquals(sel, ())
1205 buffer.select_range(start, end)
1206 sel = buffer.get_selection_bounds()
1207 self.assertTrue(sel[0].equal(start))
1208 self.assertTrue(sel[1].equal(end))
1211 buffer.insert_with_tags(buffer.get_start_iter(), 'HelloHello', tag)
1212 (start, end) = buffer.get_bounds()
1213 self.assertTrue(start.begins_tag(tag))
1214 self.assertTrue(start.has_tag(tag))
1217 buffer.insert_with_tags_by_name(buffer.get_start_iter(), 'HelloHello', 'title')
1218 (start, end) = buffer.get_bounds()
1219 self.assertTrue(start.begins_tag(tag))
1220 self.assertTrue(start.has_tag(tag))
1222 self.assertRaises(ValueError, buffer.insert_with_tags_by_name,
1223 buffer.get_start_iter(), 'HelloHello', 'unknowntag')
1225 def test_text_iter(self):
1226 self.assertEquals(Gtk.TextIter, overrides.Gtk.TextIter)
1227 buffer = Gtk.TextBuffer()
1228 buffer.set_text('Hello Jane Hello Bob')
1229 tag = buffer.create_tag ('title', font = 'Sans 18')
1230 (start, end) = buffer.get_bounds()
1231 start.forward_chars(10)
1232 buffer.apply_tag(tag, start, end)
1233 self.assertTrue(start.begins_tag())
1234 self.assertTrue(end.ends_tag())
1235 self.assertTrue(start.toggles_tag())
1236 self.assertTrue(end.toggles_tag())
1237 start.backward_chars(1)
1238 self.assertFalse(start.begins_tag())
1239 self.assertFalse(start.ends_tag())
1240 self.assertFalse(start.toggles_tag())
1242 def test_buttons(self):
1243 self.assertEquals(Gtk.Button, overrides.Gtk.Button)
1246 button = Gtk.Button()
1247 button = Gtk.Button(stock=Gtk.STOCK_CLOSE)
1248 self.assertEquals(Gtk.STOCK_CLOSE, button.get_label())
1249 self.assertTrue(button.get_use_stock())
1250 self.assertTrue(button.get_use_underline())
1252 # test Gtk.LinkButton
1253 self.assertRaises(TypeError, Gtk.LinkButton)
1254 button = Gtk.LinkButton('http://www.gtk.org', 'Gtk')
1255 self.assertEquals('http://www.gtk.org', button.get_uri())
1256 self.assertEquals('Gtk', button.get_label())
1258 def test_inheritance(self):
1259 for name in overrides.Gtk.__all__:
1260 over = getattr(overrides.Gtk, name)
1261 for element in dir(Gtk):
1263 klass = getattr(Gtk, element)
1264 info = klass.__info__
1265 except (NotImplementedError, AttributeError):
1268 # Get all parent classes and interfaces klass inherits from
1269 if isinstance(info, gi.types.ObjectInfo):
1270 classes = list(info.get_interfaces())
1271 parent = info.get_parent()
1272 while parent.get_name() != "Object":
1273 classes.append(parent)
1274 parent = parent.get_parent()
1275 classes = [kl for kl in classes if kl.get_namespace() == "Gtk"]
1280 if kl.get_name() == name:
1281 self.assertTrue(issubclass(klass, over,),
1282 "%r does not inherit from override %r" % (klass, over,))
1284 def test_editable(self):
1285 self.assertEquals(Gtk.Editable, overrides.Gtk.Editable)
1287 # need to use Gtk.Entry because Editable is an interface
1289 pos = entry.insert_text('HeWorld', 0)
1290 self.assertEquals(pos, 7)
1291 pos = entry.insert_text('llo ', 2)
1292 self.assertEquals(pos, 6)
1293 text = entry.get_chars(0, 11)
1294 self.assertEquals('Hello World', text)
1296 def test_label(self):
1297 label = Gtk.Label('Hello')
1298 self.assertEquals(label.get_text(), 'Hello')
1300 def adjustment_check(self, adjustment, value=0.0, lower=0.0, upper=0.0,
1301 step_increment=0.0, page_increment=0.0, page_size=0.0):
1302 self.assertEquals(adjustment.get_value(), value)
1303 self.assertEquals(adjustment.get_lower(), lower)
1304 self.assertEquals(adjustment.get_upper(), upper)
1305 self.assertEquals(adjustment.get_step_increment(), step_increment)
1306 self.assertEquals(adjustment.get_page_increment(), page_increment)
1307 self.assertEquals(adjustment.get_page_size(), page_size)
1309 def test_adjustment(self):
1310 adjustment = Gtk.Adjustment(1, 0, 6, 4, 5, 3)
1311 self.adjustment_check(adjustment, 1, 0, 6, 4, 5, 3)
1313 adjustment = Gtk.Adjustment(1, 0, 6, 4, 5)
1314 self.adjustment_check(adjustment, 1, 0, 6, 4, 5)
1316 adjustment = Gtk.Adjustment(1, 0, 6, 4)
1317 self.adjustment_check(adjustment, 1, 0, 6, 4)
1319 adjustment = Gtk.Adjustment(1, 0, 6)
1320 self.adjustment_check(adjustment, 1, 0, 6)
1322 adjustment = Gtk.Adjustment()
1323 self.adjustment_check(adjustment)
1325 adjustment = Gtk.Adjustment(value=1, lower=0, upper=6,
1326 step_increment=4, page_increment=5, page_size=3)
1327 self.adjustment_check(adjustment, 1, 0, 6, 4, 5, 3)
1329 def test_table(self):
1331 self.assertEquals(table.get_size(), (1,1))
1332 self.assertEquals(table.get_homogeneous(), False)
1333 table = Gtk.Table(2, 3)
1334 self.assertEquals(table.get_size(), (2,3))
1335 self.assertEquals(table.get_homogeneous(), False)
1336 table = Gtk.Table(2, 3, True)
1337 self.assertEquals(table.get_size(), (2,3))
1338 self.assertEquals(table.get_homogeneous(), True)
1340 # Test PyGTK interface
1341 table = Gtk.Table(rows=3, columns=2)
1342 self.assertEquals(table.get_size(), (3,2))
1343 # Test using the actual property names
1344 table = Gtk.Table(n_rows=2, n_columns=3, homogeneous=True)
1345 self.assertEquals(table.get_size(), (2,3))
1346 self.assertEquals(table.get_homogeneous(), True)
1348 label = Gtk.Label('Hello')
1349 table.attach(label, 0, 1, 0, 1)
1350 self.assertEquals(label, table.get_children()[0])
1352 def test_scrolledwindow(self):
1353 sw = Gtk.ScrolledWindow()
1354 sb = sw.get_hscrollbar()
1355 self.assertEquals(sw.get_hadjustment(), sb.get_adjustment())
1356 sb = sw.get_vscrollbar()
1357 self.assertEquals(sw.get_vadjustment(), sb.get_adjustment())
1359 def test_widget_drag_methods(self):
1360 widget = Gtk.Button()
1362 # here we are not checking functionality, only that the methods exist
1363 # and except the right number of arguments
1365 widget.drag_check_threshold(0, 0, 0, 0)
1367 # drag_dest_ methods
1368 widget.drag_dest_set(Gtk.DestDefaults.DROP, None, Gdk.DragAction.COPY)
1369 widget.drag_dest_add_image_targets()
1370 widget.drag_dest_add_text_targets()
1371 widget.drag_dest_add_uri_targets()
1372 widget.drag_dest_get_track_motion()
1373 widget.drag_dest_set_track_motion(True)
1374 widget.drag_dest_get_target_list()
1375 widget.drag_dest_set_target_list(Gtk.TargetList.new([Gtk.TargetEntry()]))
1376 widget.drag_dest_unset()
1378 widget.drag_highlight()
1379 widget.drag_unhighlight()
1381 # drag_source_ methods
1382 widget.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, None, Gdk.DragAction.MOVE)
1383 widget.drag_source_add_image_targets()
1384 widget.drag_source_add_text_targets()
1385 widget.drag_source_add_uri_targets()
1386 widget.drag_source_set_icon_name("")
1387 widget.drag_source_set_icon_pixbuf(GdkPixbuf.Pixbuf())
1388 widget.drag_source_set_icon_stock("")
1389 widget.drag_source_get_target_list()
1390 widget.drag_source_set_target_list(Gtk.TargetList.new([Gtk.TargetEntry()]))
1391 widget.drag_source_unset()
1393 # these methods cannot be called because they require a valid drag on
1394 # a real GdkWindow. So we only check that they exist and are callable.
1395 self.assertTrue(hasattr(widget.drag_dest_set_proxy, '__call__'))
1396 self.assertTrue(hasattr(widget.drag_get_data, '__call__'))
1398 class TestGio(unittest.TestCase):
1400 os.environ['GSETTINGS_BACKEND'] = 'memory'
1401 # support a separate build tree, so look in build dir first
1402 os.environ['GSETTINGS_SCHEMA_DIR'] = os.environ.get('TESTS_BUILDDIR',
1403 os.path.dirname(__file__))
1404 self.settings = Gio.Settings('org.gnome.test')
1405 # we change the values in the tests, so set them to predictable start
1407 self.settings.reset('test-string')
1408 self.settings.reset('test-array')
1410 def test_file_enumerator(self):
1411 self.assertEquals(Gio.FileEnumerator, overrides.Gio.FileEnumerator)
1412 f = Gio.file_new_for_path("./")
1415 for info in f.enumerate_children("standard::*", 0, None):
1416 iter_info.append(info.get_name())
1419 enumerator = f.enumerate_children("standard::*", 0, None)
1421 info = enumerator.next_file(None)
1424 next_info.append(info.get_name())
1426 self.assertEquals(iter_info, next_info)
1428 def test_gsettings_native(self):
1429 self.assertTrue('test-array' in self.settings.list_keys())
1432 v = self.settings.get_value('test-boolean')
1433 self.assertEqual(v.get_boolean(), True)
1434 self.assertEqual(self.settings.get_boolean('test-boolean'), True)
1436 v = self.settings.get_value('test-string')
1437 self.assertEqual(v.get_string(), 'Hello')
1438 self.assertEqual(self.settings.get_string('test-string'), 'Hello')
1440 v = self.settings.get_value('test-array')
1441 self.assertEqual(v.unpack(), [1, 2])
1443 v = self.settings.get_value('test-tuple')
1444 self.assertEqual(v.unpack(), (1, 2))
1447 self.settings.set_string('test-string', 'World')
1448 self.assertEqual(self.settings.get_string('test-string'), 'World')
1450 self.settings.set_value('test-string', GLib.Variant('s', 'Goodbye'))
1451 self.assertEqual(self.settings.get_string('test-string'), 'Goodbye')
1453 def test_gsettings_constructor(self):
1454 # default constructor uses path from schema
1455 self.assertEqual(self.settings.get_property('path'), '/tests/')
1457 # optional constructor arguments
1458 with_path = Gio.Settings('org.gnome.nopathtest', path='/mypath/')
1459 self.assertEqual(with_path.get_property('path'), '/mypath/')
1460 self.assertEqual(with_path['np-int'], 42)
1462 def test_gsettings_override(self):
1463 # dictionary interface
1464 self.assertEqual(len(self.settings), 4)
1465 self.assertTrue('test-array' in self.settings)
1466 self.assertTrue('test-array' in self.settings.keys())
1467 self.failIf('nonexisting' in self.settings)
1468 self.failIf(4 in self.settings)
1469 self.assertEqual(bool(self.settings), True)
1472 self.assertEqual(self.settings['test-boolean'], True)
1473 self.assertEqual(self.settings['test-string'], 'Hello')
1474 self.assertEqual(self.settings['test-array'], [1, 2])
1475 self.assertEqual(self.settings['test-tuple'], (1, 2))
1477 self.assertRaises(KeyError, self.settings.__getitem__, 'unknown')
1478 self.assertRaises(KeyError, self.settings.__getitem__, 2)
1481 self.settings['test-string'] = 'Goodbye'
1482 self.assertEqual(self.settings['test-string'], 'Goodbye')
1483 self.settings['test-array'] = [3, 4, 5]
1484 self.assertEqual(self.settings['test-array'], [3, 4, 5])
1486 self.assertRaises(TypeError, self.settings.__setitem__, 'test-string', 1)
1487 self.assertRaises(KeyError, self.settings.__setitem__, 'unknown', 'moo')
1489 def test_gsettings_empty(self):
1490 empty = Gio.Settings('org.gnome.empty', path='/tests/')
1491 self.assertEqual(len(empty), 0)
1492 self.assertEqual(bool(empty), True)
1493 self.assertEqual(empty.keys(), [])
1495 def test_closures(self):
1496 # make sure this doesn't crash
1500 ag = Gtk.AccelGroup()
1501 ag.connect(Gdk.KEY_l, Gdk.ModifierType.CONTROL_MASK, 0, fake_cb)