1 # -*- Mode: Python; py-indent-offset: 4 -*-
2 # vim: tabstop=4 shiftwidth=4 expandtab
7 sys.path.insert(0, "../")
9 from compathelper import _long, _unicode, _bytes
11 from gi.repository import GLib
12 from gi.repository import GObject
13 from gi.repository import Gdk
14 from gi.repository import Gtk
15 from gi.repository import Gio
16 from gi.repository import Pango
17 from gi.repository import GdkPixbuf
18 import gi.overrides as overrides
22 class TestRegistry(unittest.TestCase):
24 def test_non_gi(self):
29 overrides.override(MyClass)
30 self.fail('unexpected success of overriding non-GI class')
31 except TypeError as e:
32 self.assertTrue('Can not override a type MyClass' in str(e))
35 class TestGLib(unittest.TestCase):
37 def test_gvariant_create(self):
40 variant = GLib.Variant('i', 42)
41 self.assertTrue(isinstance(variant, GLib.Variant))
42 self.assertEqual(variant.get_int32(), 42)
44 variant = GLib.Variant('s', '')
45 self.assertTrue(isinstance(variant, GLib.Variant))
46 self.assertEqual(variant.get_string(), '')
48 variant = GLib.Variant('s', 'hello')
49 self.assertTrue(isinstance(variant, GLib.Variant))
50 self.assertEqual(variant.get_string(), 'hello')
53 variant = GLib.Variant('v', GLib.Variant('i', 42))
54 self.assertTrue(isinstance(variant, GLib.Variant))
55 self.assertTrue(isinstance(variant.get_variant(), GLib.Variant))
56 self.assertEqual(variant.get_type_string(), 'v')
57 self.assertEqual(variant.get_variant().get_type_string(), 'i')
58 self.assertEqual(variant.get_variant().get_int32(), 42)
60 variant = GLib.Variant('v', GLib.Variant('v', GLib.Variant('i', 42)))
61 self.assertEqual(variant.get_type_string(), 'v')
62 self.assertEqual(variant.get_variant().get_type_string(), 'v')
63 self.assertEqual(variant.get_variant().get_variant().get_type_string(), 'i')
64 self.assertEqual(variant.get_variant().get_variant().get_int32(), 42)
68 variant = GLib.Variant('()', ())
69 self.assertEqual(variant.get_type_string(), '()')
70 self.assertEqual(variant.n_children(), 0)
72 variant = GLib.Variant('(i)', (3,))
73 self.assertEqual(variant.get_type_string(), '(i)')
74 self.assertTrue(isinstance(variant, GLib.Variant))
75 self.assertEqual(variant.n_children(), 1)
76 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
77 self.assertEqual(variant.get_child_value(0).get_int32(), 3)
79 variant = GLib.Variant('(ss)', ('mec', 'mac'))
80 self.assertEqual(variant.get_type_string(), '(ss)')
81 self.assertTrue(isinstance(variant, GLib.Variant))
82 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
83 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
84 self.assertEqual(variant.get_child_value(0).get_string(), 'mec')
85 self.assertEqual(variant.get_child_value(1).get_string(), 'mac')
88 variant = GLib.Variant('((si)(ub))', (('hello', -1), (42, True)))
89 self.assertEqual(variant.get_type_string(), '((si)(ub))')
90 self.assertEqual(variant.unpack(), (('hello', -1), (_long(42), True)))
94 variant = GLib.Variant('a{si}', {})
95 self.assertTrue(isinstance(variant, GLib.Variant))
96 self.assertEqual(variant.get_type_string(), 'a{si}')
97 self.assertEqual(variant.n_children(), 0)
99 variant = GLib.Variant('a{si}', {'': 1, 'key1': 2, 'key2': 3})
100 self.assertEqual(variant.get_type_string(), 'a{si}')
101 self.assertTrue(isinstance(variant, GLib.Variant))
102 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
103 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
104 self.assertTrue(isinstance(variant.get_child_value(2), GLib.Variant))
105 self.assertEqual(variant.unpack(), {'': 1, 'key1': 2, 'key2': 3})
107 # nested dictionaries
108 variant = GLib.Variant('a{sa{si}}', {})
109 self.assertTrue(isinstance(variant, GLib.Variant))
110 self.assertEqual(variant.get_type_string(), 'a{sa{si}}')
111 self.assertEqual(variant.n_children(), 0)
113 d = {'': {'': 1, 'keyn1': 2},
114 'key1': {'key11': 11, 'key12': 12}}
115 variant = GLib.Variant('a{sa{si}}', d)
116 self.assertEqual(variant.get_type_string(), 'a{sa{si}}')
117 self.assertTrue(isinstance(variant, GLib.Variant))
118 self.assertEqual(variant.unpack(), d)
122 variant = GLib.Variant('ai', [])
123 self.assertEqual(variant.get_type_string(), 'ai')
124 self.assertEqual(variant.n_children(), 0)
126 variant = GLib.Variant('ai', [1, 2])
127 self.assertEqual(variant.get_type_string(), 'ai')
128 self.assertTrue(isinstance(variant, GLib.Variant))
129 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
130 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
131 self.assertEqual(variant.get_child_value(0).get_int32(), 1)
132 self.assertEqual(variant.get_child_value(1).get_int32(), 2)
134 variant = GLib.Variant('as', [])
135 self.assertEqual(variant.get_type_string(), 'as')
136 self.assertEqual(variant.n_children(), 0)
138 variant = GLib.Variant('as', [''])
139 self.assertEqual(variant.get_type_string(), 'as')
140 self.assertTrue(isinstance(variant, GLib.Variant))
141 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
142 self.assertEqual(variant.get_child_value(0).get_string(), '')
144 variant = GLib.Variant('as', ['hello', 'world'])
145 self.assertEqual(variant.get_type_string(), 'as')
146 self.assertTrue(isinstance(variant, GLib.Variant))
147 self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
148 self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
149 self.assertEqual(variant.get_child_value(0).get_string(), 'hello')
150 self.assertEqual(variant.get_child_value(1).get_string(), 'world')
153 variant = GLib.Variant('aai', [])
154 self.assertEqual(variant.get_type_string(), 'aai')
155 self.assertEqual(variant.n_children(), 0)
157 variant = GLib.Variant('aai', [[]])
158 self.assertEqual(variant.get_type_string(), 'aai')
159 self.assertEqual(variant.n_children(), 1)
160 self.assertEqual(variant.get_child_value(0).n_children(), 0)
162 variant = GLib.Variant('aai', [[1, 2], [3, 4, 5]])
163 self.assertEqual(variant.get_type_string(), 'aai')
164 self.assertEqual(variant.unpack(), [[1, 2], [3, 4, 5]])
170 variant = GLib.Variant('(as)', ([],))
171 self.assertEqual(variant.get_type_string(), '(as)')
172 self.assertEqual(variant.n_children(), 1)
173 self.assertEqual(variant.get_child_value(0).n_children(), 0)
175 variant = GLib.Variant('(as)', ([''],))
176 self.assertEqual(variant.get_type_string(), '(as)')
177 self.assertEqual(variant.n_children(), 1)
178 self.assertEqual(variant.get_child_value(0).n_children(), 1)
179 self.assertEqual(variant.get_child_value(0).get_child_value(0).get_string(), '')
181 variant = GLib.Variant('(as)', (['hello'],))
182 self.assertEqual(variant.get_type_string(), '(as)')
183 self.assertEqual(variant.n_children(), 1)
184 self.assertEqual(variant.get_child_value(0).n_children(), 1)
185 self.assertEqual(variant.get_child_value(0).get_child_value(0).get_string(), 'hello')
187 obj = {'a1': (1, True), 'a2': (2, False)}
188 variant = GLib.Variant('a{s(ib)}', obj)
189 self.assertEqual(variant.get_type_string(), 'a{s(ib)}')
190 self.assertEqual(variant.unpack(), obj)
192 obj = {'a1': (1, GLib.Variant('b', True)), 'a2': (2, GLib.Variant('y', 255))}
193 variant = GLib.Variant('a{s(iv)}', obj)
194 self.assertEqual(variant.get_type_string(), 'a{s(iv)}')
195 self.assertEqual(variant.unpack(), {'a1': (1, True), 'a2': (2, 255)})
197 obj = (1, {'a': {'a1': True, 'a2': False},
202 variant = GLib.Variant('(ia{sa{sb}}s)', obj)
203 self.assertEqual(variant.get_type_string(), '(ia{sa{sb}}s)')
204 self.assertEqual(variant.unpack(), obj)
206 obj = {"frequency": GLib.Variant('t', 738000000),
207 "hierarchy": GLib.Variant('i', 0),
208 "bandwidth": GLib.Variant('x', 8),
209 "code-rate-hp": GLib.Variant('d', 2.0 / 3.0),
210 "constellation": GLib.Variant('s', "QAM16"),
211 "guard-interval": GLib.Variant('u', 4)}
212 variant = GLib.Variant('a{sv}', obj)
213 self.assertEqual(variant.get_type_string(), 'a{sv}')
214 self.assertEqual(variant.unpack(), {"frequency": 738000000,
217 "code-rate-hp": 2.0 / 3.0,
218 "constellation": "QAM16",
219 "guard-interval": 4})
221 def test_gvariant_create_errors(self):
223 self.assertRaises(TypeError, GLib.Variant, 'i', 42, 3)
224 self.assertRaises(TypeError, GLib.Variant, '(i)', (42, 3))
226 # not enough arguments
227 self.assertRaises(TypeError, GLib.Variant, '(ii)', (42,))
230 self.assertRaises(TypeError, GLib.Variant, 'i', 'hello')
231 self.assertRaises(TypeError, GLib.Variant, 's', 42)
232 self.assertRaises(TypeError, GLib.Variant, '(ss)', 'mec', 'mac')
234 # unimplemented data type
235 self.assertRaises(NotImplementedError, GLib.Variant, 'Q', 1)
237 def test_gvariant_unpack(self):
239 res = GLib.Variant.new_int32(-42).unpack()
240 self.assertEqual(res, -42)
242 res = GLib.Variant.new_uint64(34359738368).unpack()
243 self.assertEqual(res, 34359738368)
245 res = GLib.Variant.new_boolean(True).unpack()
246 self.assertEqual(res, True)
248 res = GLib.Variant.new_object_path('/foo/Bar').unpack()
249 self.assertEqual(res, '/foo/Bar')
252 res = GLib.Variant('v', GLib.Variant.new_int32(-42)).unpack()
253 self.assertEqual(res, -42)
255 GLib.Variant('v', GLib.Variant('v', GLib.Variant('i', 42)))
256 self.assertEqual(res, -42)
259 res = GLib.Variant.new_tuple(GLib.Variant.new_int32(-1),
260 GLib.Variant.new_string('hello')).unpack()
261 self.assertEqual(res, (-1, 'hello'))
264 vb = GLib.VariantBuilder.new(gi._gi.variant_type_from_string('ai'))
265 vb.add_value(GLib.Variant.new_int32(-1))
266 vb.add_value(GLib.Variant.new_int32(3))
267 res = vb.end().unpack()
268 self.assertEqual(res, [-1, 3])
271 res = GLib.Variant('a{si}', {'key1': 1, 'key2': 2}).unpack()
272 self.assertEqual(res, {'key1': 1, 'key2': 2})
274 def test_gvariant_iteration(self):
276 vb = GLib.VariantBuilder.new(gi._gi.variant_type_from_string('ai'))
277 vb.add_value(GLib.Variant.new_int32(-1))
278 vb.add_value(GLib.Variant.new_int32(3))
281 self.assertEqual(len(v), 2)
282 self.assertEqual(v[0], -1)
283 self.assertEqual(v[1], 3)
284 self.assertEqual(v[-1], 3)
285 self.assertEqual(v[-2], -1)
286 self.assertRaises(IndexError, v.__getitem__, 2)
287 self.assertRaises(IndexError, v.__getitem__, -3)
288 self.assertRaises(ValueError, v.__getitem__, 'a')
291 self.assertEqual([x for x in v], [-1, 3])
292 self.assertEqual(list(v), [-1, 3])
295 v = GLib.Variant.new_tuple(GLib.Variant.new_int32(-1),
296 GLib.Variant.new_string('hello'))
297 self.assertEqual(len(v), 2)
298 self.assertEqual(v[0], -1)
299 self.assertEqual(v[1], 'hello')
300 self.assertEqual(v[-1], 'hello')
301 self.assertEqual(v[-2], -1)
302 self.assertRaises(IndexError, v.__getitem__, 2)
303 self.assertRaises(IndexError, v.__getitem__, -3)
304 self.assertRaises(ValueError, v.__getitem__, 'a')
307 self.assertEqual([x for x in v], [-1, 'hello'])
308 self.assertEqual(tuple(v), (-1, 'hello'))
310 # dictionary index access
311 vsi = GLib.Variant('a{si}', {'key1': 1, 'key2': 2})
312 vis = GLib.Variant('a{is}', {1: 'val1', 5: 'val2'})
314 self.assertEqual(len(vsi), 2)
315 self.assertEqual(vsi['key1'], 1)
316 self.assertEqual(vsi['key2'], 2)
317 self.assertRaises(KeyError, vsi.__getitem__, 'unknown')
319 self.assertEqual(len(vis), 2)
320 self.assertEqual(vis[1], 'val1')
321 self.assertEqual(vis[5], 'val2')
322 self.assertRaises(KeyError, vsi.__getitem__, 3)
324 # dictionary iteration
325 self.assertEqual(set(vsi.keys()), set(['key1', 'key2']))
326 self.assertEqual(set(vis.keys()), set([1, 5]))
328 # string index access
329 v = GLib.Variant('s', 'hello')
330 self.assertEqual(len(v), 5)
331 self.assertEqual(v[0], 'h')
332 self.assertEqual(v[4], 'o')
333 self.assertEqual(v[-1], 'o')
334 self.assertEqual(v[-5], 'h')
335 self.assertRaises(IndexError, v.__getitem__, 5)
336 self.assertRaises(IndexError, v.__getitem__, -6)
339 self.assertEqual([x for x in v], ['h', 'e', 'l', 'l', 'o'])
341 def test_variant_split_signature(self):
342 self.assertEqual(GLib.Variant.split_signature('()'), [])
344 self.assertEqual(GLib.Variant.split_signature('s'), ['s'])
346 self.assertEqual(GLib.Variant.split_signature('as'), ['as'])
348 self.assertEqual(GLib.Variant.split_signature('(s)'), ['s'])
350 self.assertEqual(GLib.Variant.split_signature('(iso)'), ['i', 's', 'o'])
352 self.assertEqual(GLib.Variant.split_signature('(s(ss)i(ii))'),
353 ['s', '(ss)', 'i', '(ii)'])
355 self.assertEqual(GLib.Variant.split_signature('(as)'), ['as'])
357 self.assertEqual(GLib.Variant.split_signature('(s(ss)iaiaasa(ii))'),
358 ['s', '(ss)', 'i', 'ai', 'aas', 'a(ii)'])
360 self.assertEqual(GLib.Variant.split_signature('(a{iv}(ii)((ss)a{s(ss)}))'),
361 ['a{iv}', '(ii)', '((ss)a{s(ss)})'])
363 def test_variant_hash(self):
364 v1 = GLib.Variant('s', 'somestring')
365 v2 = GLib.Variant('s', 'somestring')
366 v3 = GLib.Variant('s', 'somestring2')
368 self.assertTrue(v2 in set([v1, v3]))
369 self.assertTrue(v2 in frozenset([v1, v3]))
370 self.assertTrue(v2 in {v1: '1', v3: '2'})
372 def test_variant_compare(self):
373 # Check if identical GVariant are equal
375 def assert_equal(vtype, value):
376 self.assertEqual(GLib.Variant(vtype, value), GLib.Variant(vtype, value))
378 def assert_not_equal(vtype1, value1, vtype2, value2):
379 self.assertNotEqual(GLib.Variant(vtype1, value1), GLib.Variant(vtype2, value2))
381 numbers = ['y', 'n', 'q', 'i', 'u', 'x', 't', 'h', 'd']
383 assert_equal(num, 42)
384 assert_not_equal(num, 42, num, 41)
385 assert_not_equal(num, 42, 's', '42')
387 assert_equal('s', 'something')
388 assert_not_equal('s', 'something', 's', 'somethingelse')
389 assert_not_equal('s', 'something', 'i', 1234)
391 assert_equal('g', 'dustybinqhogx')
392 assert_not_equal('g', 'dustybinqhogx', 'g', 'dustybin')
393 assert_not_equal('g', 'dustybinqhogx', 'i', 1234)
395 assert_equal('o', '/dev/null')
396 assert_not_equal('o', '/dev/null', 'o', '/dev/zero')
397 assert_not_equal('o', '/dev/null', 'i', 1234)
399 assert_equal('(s)', ('strtuple',))
400 assert_not_equal('(s)', ('strtuple',), '(s)', ('strtuple2',))
402 assert_equal('a{si}', {'str': 42})
403 assert_not_equal('a{si}', {'str': 42}, 'a{si}', {'str': 43})
405 assert_equal('v', GLib.Variant('i', 42))
406 assert_not_equal('v', GLib.Variant('i', 42), 'v', GLib.Variant('i', 43))
408 def test_variant_bool(self):
409 # Check if the GVariant bool matches the unpacked Pythonic bool
411 def assert_equals_bool(vtype, value):
412 self.assertEqual(bool(GLib.Variant(vtype, value)), bool(value))
415 assert_equals_bool('b', True)
416 assert_equals_bool('b', False)
418 numbers = ['y', 'n', 'q', 'i', 'u', 'x', 't', 'h', 'd']
419 for number in numbers:
420 assert_equals_bool(number, 0)
421 assert_equals_bool(number, 1)
423 assert_equals_bool('s', '')
424 assert_equals_bool('g', '')
425 assert_equals_bool('s', 'something')
426 assert_equals_bool('o', '/dev/null')
427 assert_equals_bool('g', 'dustybinqhogx')
430 assert_equals_bool('ab', [True])
431 assert_equals_bool('ab', [False])
432 for number in numbers:
433 assert_equals_bool('a' + number, [])
434 assert_equals_bool('a' + number, [0])
435 assert_equals_bool('as', [])
436 assert_equals_bool('as', [''])
437 assert_equals_bool('ao', [])
438 assert_equals_bool('ao', ['/'])
439 assert_equals_bool('ag', [])
440 assert_equals_bool('ag', [''])
441 assert_equals_bool('aai', [[]])
444 assert_equals_bool('()', ())
445 for number in numbers:
446 assert_equals_bool('(' + number + ')', (0,))
447 assert_equals_bool('(s)', ('',))
448 assert_equals_bool('(o)', ('/',))
449 assert_equals_bool('(g)', ('',))
450 assert_equals_bool('(())', ((),))
453 assert_equals_bool('a{si}', {})
454 assert_equals_bool('a{si}', {'': 0})
456 # complex types, always True
457 assert_equals_bool('(as)', ([],))
458 assert_equals_bool('a{s(i)}', {'': (0,)})
460 # variant types, recursive unpacking
461 assert_equals_bool('v', GLib.Variant('i', 0))
462 assert_equals_bool('v', GLib.Variant('i', 1))
465 class TestPango(unittest.TestCase):
467 def test_default_font_description(self):
468 desc = Pango.FontDescription()
469 self.assertEqual(desc.get_variant(), Pango.Variant.NORMAL)
471 def test_font_description(self):
472 desc = Pango.FontDescription('monospace')
473 self.assertEqual(desc.get_family(), 'monospace')
474 self.assertEqual(desc.get_variant(), Pango.Variant.NORMAL)
476 def test_layout(self):
477 self.assertRaises(TypeError, Pango.Layout)
478 context = Pango.Context()
479 layout = Pango.Layout(context)
480 self.assertEqual(layout.get_context(), context)
482 layout.set_markup("Foobar")
483 self.assertEqual(layout.get_text(), "Foobar")
486 class TestGdk(unittest.TestCase):
488 def test_constructor(self):
489 attribute = Gdk.WindowAttr()
490 attribute.window_type = Gdk.WindowType.CHILD
491 attributes_mask = Gdk.WindowAttributesType.X | \
492 Gdk.WindowAttributesType.Y
493 window = Gdk.Window(None, attribute, attributes_mask)
494 self.assertEqual(window.get_window_type(), Gdk.WindowType.CHILD)
496 def test_color(self):
497 color = Gdk.Color(100, 200, 300)
498 self.assertEqual(color.red, 100)
499 self.assertEqual(color.green, 200)
500 self.assertEqual(color.blue, 300)
501 self.assertEqual(color, Gdk.Color(100, 200, 300))
502 self.assertNotEqual(color, Gdk.Color(1, 2, 3))
504 def test_color_floats(self):
505 self.assertEqual(Gdk.Color(13107, 21845, 65535),
506 Gdk.Color.from_floats(0.2, 1.0 / 3.0, 1.0))
508 self.assertEqual(Gdk.Color(13107, 21845, 65535).to_floats(),
509 (0.2, 1.0 / 3.0, 1.0))
511 self.assertEqual(Gdk.RGBA(0.2, 1.0 / 3.0, 1.0, 0.5).to_color(),
512 Gdk.Color.from_floats(0.2, 1.0 / 3.0, 1.0))
514 self.assertEqual(Gdk.RGBA.from_color(Gdk.Color(13107, 21845, 65535)),
515 Gdk.RGBA(0.2, 1.0 / 3.0, 1.0, 1.0))
518 self.assertEqual(Gdk.RGBA, overrides.Gdk.RGBA)
519 rgba = Gdk.RGBA(0.1, 0.2, 0.3, 0.4)
520 self.assertEqual(rgba, Gdk.RGBA(0.1, 0.2, 0.3, 0.4))
521 self.assertNotEqual(rgba, Gdk.RGBA(0.0, 0.2, 0.3, 0.4))
522 self.assertEqual(rgba.red, 0.1)
523 self.assertEqual(rgba.green, 0.2)
524 self.assertEqual(rgba.blue, 0.3)
525 self.assertEqual(rgba.alpha, 0.4)
527 self.assertEqual(rgba.green, 0.9)
529 # Iterator/tuple convsersion
530 self.assertEqual(tuple(Gdk.RGBA(0.1, 0.2, 0.3, 0.4)),
531 (0.1, 0.2, 0.3, 0.4))
533 def test_event(self):
534 event = Gdk.Event.new(Gdk.EventType.CONFIGURE)
535 self.assertEqual(event.type, Gdk.EventType.CONFIGURE)
536 self.assertEqual(event.send_event, 0)
538 event = Gdk.Event.new(Gdk.EventType.DRAG_MOTION)
539 event.x_root, event.y_root = 0, 5
540 self.assertEqual(event.x_root, 0)
541 self.assertEqual(event.y_root, 5)
544 event.type = Gdk.EventType.SCROLL
545 self.assertRaises(AttributeError, lambda: getattr(event, 'foo_bar'))
547 def test_event_structures(self):
548 def button_press_cb(button, event):
549 self.assertTrue(isinstance(event, Gdk.EventButton))
550 self.assertTrue(event.type == Gdk.EventType.BUTTON_PRESS)
551 self.assertEqual(event.send_event, 0)
552 self.assertEqual(event.get_state(), Gdk.ModifierType.CONTROL_MASK)
553 self.assertEqual(event.get_root_coords(), (2, 5))
556 self.assertEqual(event.get_time(), 12345)
560 b.connect('button-press-event', button_press_cb)
563 Gdk.test_simulate_button(b.get_window(),
566 Gdk.ModifierType.CONTROL_MASK,
567 Gdk.EventType.BUTTON_PRESS)
569 def test_cursor(self):
570 self.assertEqual(Gdk.Cursor, overrides.Gdk.Cursor)
571 c = Gdk.Cursor(Gdk.CursorType.WATCH)
572 self.assertNotEqual(c, None)
573 c = Gdk.Cursor(cursor_type=Gdk.CursorType.WATCH)
574 self.assertNotEqual(c, None)
576 display_manager = Gdk.DisplayManager.get()
577 display = display_manager.get_default_display()
579 test_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB,
585 c = Gdk.Cursor(display,
589 self.assertNotEqual(c, None)
590 self.assertRaises(ValueError, Gdk.Cursor, 1, 2, 3)
593 class TestGtk(unittest.TestCase):
595 def test_container(self):
597 self.assertTrue(isinstance(box, Gtk.Box))
598 self.assertTrue(isinstance(box, Gtk.Container))
599 self.assertTrue(isinstance(box, Gtk.Widget))
605 self.assertTrue(label in box)
606 self.assertTrue(label2 in box)
607 self.assertEqual(len(box), 2)
610 self.assertEqual(l, [label, label2])
612 def test_actions(self):
613 self.assertEqual(Gtk.Action, overrides.Gtk.Action)
614 self.assertRaises(TypeError, Gtk.Action)
615 action = Gtk.Action("test", "Test", "Test Action", Gtk.STOCK_COPY)
616 self.assertEqual(action.get_name(), "test")
617 self.assertEqual(action.get_label(), "Test")
618 self.assertEqual(action.get_tooltip(), "Test Action")
619 self.assertEqual(action.get_stock_id(), Gtk.STOCK_COPY)
621 self.assertEqual(Gtk.RadioAction, overrides.Gtk.RadioAction)
622 self.assertRaises(TypeError, Gtk.RadioAction)
623 action = Gtk.RadioAction("test", "Test", "Test Action", Gtk.STOCK_COPY, 1)
624 self.assertEqual(action.get_name(), "test")
625 self.assertEqual(action.get_label(), "Test")
626 self.assertEqual(action.get_tooltip(), "Test Action")
627 self.assertEqual(action.get_stock_id(), Gtk.STOCK_COPY)
628 self.assertEqual(action.get_current_value(), 1)
630 def test_actiongroup(self):
631 self.assertEqual(Gtk.ActionGroup, overrides.Gtk.ActionGroup)
632 self.assertRaises(TypeError, Gtk.ActionGroup)
634 action_group = Gtk.ActionGroup(name='TestActionGroup')
635 callback_data = "callback data"
637 def test_action_callback_data(action, user_data):
638 self.assertEqual(user_data, callback_data)
640 def test_radio_action_callback_data(action, current, user_data):
641 self.assertEqual(user_data, callback_data)
643 action_group.add_actions([
644 ('test-action1', None, 'Test Action 1',
645 None, None, test_action_callback_data),
646 ('test-action2', Gtk.STOCK_COPY, 'Test Action 2',
647 None, None, test_action_callback_data)], callback_data)
648 action_group.add_toggle_actions([
649 ('test-toggle-action1', None, 'Test Toggle Action 1',
650 None, None, test_action_callback_data, False),
651 ('test-toggle-action2', Gtk.STOCK_COPY, 'Test Toggle Action 2',
652 None, None, test_action_callback_data, True)], callback_data)
653 action_group.add_radio_actions([
654 ('test-radio-action1', None, 'Test Radio Action 1'),
655 ('test-radio-action2', Gtk.STOCK_COPY, 'Test Radio Action 2')], 1,
656 test_radio_action_callback_data,
659 expected_results = [('test-action1', Gtk.Action),
660 ('test-action2', Gtk.Action),
661 ('test-toggle-action1', Gtk.ToggleAction),
662 ('test-toggle-action2', Gtk.ToggleAction),
663 ('test-radio-action1', Gtk.RadioAction),
664 ('test-radio-action2', Gtk.RadioAction)]
666 for action in action_group.list_actions():
667 a = (action.get_name(), type(action))
668 self.assertTrue(a in expected_results)
669 expected_results.remove(a)
672 def test_uimanager(self):
673 self.assertEqual(Gtk.UIManager, overrides.Gtk.UIManager)
675 ui.add_ui_from_string(
678 <menubar name="menubar1"></menubar>
682 menubar = ui.get_widget("/menubar1")
683 self.assertEqual(type(menubar), Gtk.MenuBar)
685 ag = Gtk.ActionGroup(name="ag1")
686 ui.insert_action_group(ag)
687 ag2 = Gtk.ActionGroup(name="ag2")
688 ui.insert_action_group(ag2)
689 groups = ui.get_action_groups()
690 self.assertEqual(ag, groups[-2])
691 self.assertEqual(ag2, groups[-1])
693 def test_builder(self):
694 self.assertEqual(Gtk.Builder, overrides.Gtk.Builder)
696 class SignalTest(GObject.GObject):
697 __gtype_name__ = "GIOverrideSignalTest"
699 "test-signal": (GObject.SignalFlags.RUN_FIRST,
707 self.after_sentinel = 0
709 def on_signal_1(self, *args):
711 self.after_sentinel += 1
713 def on_signal_3(self, *args):
716 def on_signal_after(self, *args):
717 if self.after_sentinel == 1:
718 self.after_sentinel += 1
720 signal_checker = SignalCheck()
721 builder = Gtk.Builder()
723 # add object1 to the builder
724 builder.add_from_string(
727 <object class="GIOverrideSignalTest" id="object1">
728 <signal name="test-signal" after="yes" handler="on_signal_after" />
729 <signal name="test-signal" handler="on_signal_1" />
734 # only add object3 to the builder
735 builder.add_objects_from_string(
738 <object class="GIOverrideSignalTest" id="object2">
739 <signal name="test-signal" handler="on_signal_2" />
741 <object class="GIOverrideSignalTest" id="object3">
742 <signal name="test-signal" handler="on_signal_3" />
744 <object class="GIOverrideSignalTest" id="object4">
745 <signal name="test-signal" handler="on_signal_4" />
753 builder.connect_signals(signal_checker)
755 # call their notify signals and check sentinel
756 objects = builder.get_objects()
757 self.assertEqual(len(objects), 2)
759 obj.emit('test-signal')
761 self.assertEqual(signal_checker.sentinel, 4)
762 self.assertEqual(signal_checker.after_sentinel, 2)
764 def test_dialogs(self):
765 self.assertEqual(Gtk.Dialog, overrides.Gtk.Dialog)
766 self.assertEqual(Gtk.AboutDialog, overrides.Gtk.AboutDialog)
767 self.assertEqual(Gtk.MessageDialog, overrides.Gtk.MessageDialog)
768 self.assertEqual(Gtk.ColorSelectionDialog, overrides.Gtk.ColorSelectionDialog)
769 self.assertEqual(Gtk.FileChooserDialog, overrides.Gtk.FileChooserDialog)
770 self.assertEqual(Gtk.FontSelectionDialog, overrides.Gtk.FontSelectionDialog)
771 self.assertEqual(Gtk.RecentChooserDialog, overrides.Gtk.RecentChooserDialog)
774 dialog = Gtk.Dialog(title='Foo',
775 flags=Gtk.DialogFlags.MODAL,
776 buttons=('test-button1', 1))
777 self.assertTrue(isinstance(dialog, Gtk.Dialog))
778 self.assertTrue(isinstance(dialog, Gtk.Window))
780 dialog.add_buttons('test-button2', 2, Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)
782 self.assertEqual('Foo', dialog.get_title())
783 self.assertTrue(dialog.get_modal())
784 button = dialog.get_widget_for_response(1)
785 self.assertEqual('test-button1', button.get_label())
786 button = dialog.get_widget_for_response(2)
787 self.assertEqual('test-button2', button.get_label())
788 button = dialog.get_widget_for_response(Gtk.ResponseType.CLOSE)
789 self.assertEqual(Gtk.STOCK_CLOSE, button.get_label())
792 dialog = Gtk.AboutDialog()
793 self.assertTrue(isinstance(dialog, Gtk.Dialog))
794 self.assertTrue(isinstance(dialog, Gtk.Window))
797 dialog = Gtk.MessageDialog(title='message dialog test',
798 flags=Gtk.DialogFlags.MODAL,
799 buttons=Gtk.ButtonsType.OK,
800 message_format='dude!')
801 self.assertTrue(isinstance(dialog, Gtk.Dialog))
802 self.assertTrue(isinstance(dialog, Gtk.Window))
804 self.assertEqual('message dialog test', dialog.get_title())
805 self.assertTrue(dialog.get_modal())
806 text = dialog.get_property('text')
807 self.assertEqual('dude!', text)
809 dialog.format_secondary_text('2nd text')
810 self.assertEqual(dialog.get_property('secondary-text'), '2nd text')
811 self.assertFalse(dialog.get_property('secondary-use-markup'))
813 dialog.format_secondary_markup('2nd markup')
814 self.assertEqual(dialog.get_property('secondary-text'), '2nd markup')
815 self.assertTrue(dialog.get_property('secondary-use-markup'))
817 # Gtk.ColorSelectionDialog
818 dialog = Gtk.ColorSelectionDialog("color selection dialog test")
819 self.assertTrue(isinstance(dialog, Gtk.Dialog))
820 self.assertTrue(isinstance(dialog, Gtk.Window))
821 self.assertEqual('color selection dialog test', dialog.get_title())
823 # Gtk.FileChooserDialog
824 dialog = Gtk.FileChooserDialog(title='file chooser dialog test',
825 buttons=('test-button1', 1),
826 action=Gtk.FileChooserAction.SAVE)
827 self.assertTrue(isinstance(dialog, Gtk.Dialog))
828 self.assertTrue(isinstance(dialog, Gtk.Window))
830 dialog.add_buttons('test-button2', 2, Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)
831 self.assertEqual('file chooser dialog test', dialog.get_title())
832 button = dialog.get_widget_for_response(1)
833 self.assertEqual('test-button1', button.get_label())
834 button = dialog.get_widget_for_response(2)
835 self.assertEqual('test-button2', button.get_label())
836 button = dialog.get_widget_for_response(Gtk.ResponseType.CLOSE)
837 self.assertEqual(Gtk.STOCK_CLOSE, button.get_label())
838 action = dialog.get_property('action')
839 self.assertEqual(Gtk.FileChooserAction.SAVE, action)
841 # Gtk.FontSelectionDialog
842 dialog = Gtk.ColorSelectionDialog("font selection dialog test")
843 self.assertTrue(isinstance(dialog, Gtk.Dialog))
844 self.assertTrue(isinstance(dialog, Gtk.Window))
845 self.assertEqual('font selection dialog test', dialog.get_title())
847 # Gtk.RecentChooserDialog
848 test_manager = Gtk.RecentManager()
849 dialog = Gtk.RecentChooserDialog(title='recent chooser dialog test',
850 buttons=('test-button1', 1),
851 manager=test_manager)
852 self.assertTrue(isinstance(dialog, Gtk.Dialog))
853 self.assertTrue(isinstance(dialog, Gtk.Window))
855 dialog.add_buttons('test-button2', 2, Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)
856 self.assertEqual('recent chooser dialog test', dialog.get_title())
857 button = dialog.get_widget_for_response(1)
858 self.assertEqual('test-button1', button.get_label())
859 button = dialog.get_widget_for_response(2)
860 self.assertEqual('test-button2', button.get_label())
861 button = dialog.get_widget_for_response(Gtk.ResponseType.CLOSE)
862 self.assertEqual(Gtk.STOCK_CLOSE, button.get_label())
864 class TestClass(GObject.GObject):
865 __gtype_name__ = "GIOverrideTreeAPITest"
867 def __init__(self, tester, int_value, string_value):
868 super(TestGtk.TestClass, self).__init__()
870 self.int_value = int_value
871 self.string_value = string_value
873 def check(self, int_value, string_value):
874 self.tester.assertEqual(int_value, self.int_value)
875 self.tester.assertEqual(string_value, self.string_value)
877 def test_tree_store(self):
878 self.assertEqual(Gtk.TreeStore, overrides.Gtk.TreeStore)
879 self.assertEqual(Gtk.ListStore, overrides.Gtk.ListStore)
880 self.assertEqual(Gtk.TreeModel, overrides.Gtk.TreeModel)
881 self.assertEqual(Gtk.TreeViewColumn, overrides.Gtk.TreeViewColumn)
883 class TestPyObject(object):
886 test_pyobj = TestPyObject()
887 test_pydict = {1: 1, "2": 2, "3": "3"}
888 test_pylist = [1, "2", "3"]
889 tree_store = Gtk.TreeStore(int,
892 GObject.TYPE_PYOBJECT,
907 label = 'this is child #%d' % i
908 testobj = TestGtk.TestClass(self, i, label)
909 parent = tree_store.append(parent, (i,
926 parent = tree_store.append(parent)
928 label = 'this is child #%d' % i
929 testobj = TestGtk.TestClass(self, i, label)
930 tree_store.set(parent, 0, i,
940 10, GObject.G_MAXULONG,
941 11, GObject.G_MININT64,
942 12, 0xffffffffffffffff,
946 parent = tree_store.append(parent)
948 label = 'this is child #%d' % i
949 testobj = TestGtk.TestClass(self, i, label)
950 tree_store.set(parent, {0: i,
960 10: GObject.G_MAXULONG,
961 11: GObject.G_MININT64,
962 12: 0xffffffffffffffff,
966 parent = tree_store.append(parent)
968 label = 'this is child #%d' % i
969 testobj = TestGtk.TestClass(self, i, label)
970 tree_store.set(parent, (0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14),
987 # len gets the number of children in the root node
988 # since we kept appending to the previous node
989 # there should only be one child of the root
990 self.assertEqual(len(tree_store), 1)
992 # walk the tree to see if the values were stored correctly
996 treeiter = tree_store.iter_children(parent)
998 i = tree_store.get_value(treeiter, 0)
999 s = tree_store.get_value(treeiter, 1)
1000 obj = tree_store.get_value(treeiter, 2)
1002 obj2 = tree_store.get_value(treeiter, 3)
1003 self.assertEqual(obj, obj2)
1005 pyobj = tree_store.get_value(treeiter, 4)
1006 self.assertEqual(pyobj, test_pyobj)
1007 pydict = tree_store.get_value(treeiter, 5)
1008 self.assertEqual(pydict, test_pydict)
1009 pylist = tree_store.get_value(treeiter, 6)
1010 self.assertEqual(pylist, test_pylist)
1012 bool_1 = tree_store.get_value(treeiter, 7)
1013 bool_2 = tree_store.get_value(treeiter, 8)
1014 self.assertEqual(bool_1, bool_2)
1015 self.assertTrue(isinstance(bool_1, bool))
1016 self.assertTrue(isinstance(bool_2, bool))
1018 uint_ = tree_store.get_value(treeiter, 9)
1019 self.assertEqual(uint_, i)
1020 ulong_ = tree_store.get_value(treeiter, 10)
1021 self.assertEqual(ulong_, GObject.G_MAXULONG)
1022 int64_ = tree_store.get_value(treeiter, 11)
1023 self.assertEqual(int64_, GObject.G_MININT64)
1024 uint64_ = tree_store.get_value(treeiter, 12)
1025 self.assertEqual(uint64_, 0xffffffffffffffff)
1026 uchar_ = tree_store.get_value(treeiter, 13)
1027 self.assertEqual(ord(uchar_), 254)
1028 char_ = tree_store.get_value(treeiter, 14)
1029 self.assertEqual(char_, 'a')
1032 treeiter = tree_store.iter_children(parent)
1034 self.assertEqual(i, 99)
1036 def test_tree_store_signals(self):
1037 tree_store = Gtk.TreeStore(int, bool)
1039 def on_row_inserted(tree_store, tree_path, tree_iter, signal_list):
1040 signal_list.append('row-inserted')
1042 def on_row_changed(tree_store, tree_path, tree_iter, signal_list):
1043 signal_list.append('row-changed')
1046 tree_store.connect('row-inserted', on_row_inserted, signals)
1047 tree_store.connect('row-changed', on_row_changed, signals)
1049 # adding rows with and without data should only call one signal
1050 tree_store.append(None, (0, False))
1051 self.assertEqual(signals, ['row-inserted'])
1054 tree_store.append(None)
1055 self.assertEqual(signals, ['row-inserted'])
1058 tree_store.prepend(None, (0, False))
1059 self.assertEqual(signals, ['row-inserted'])
1062 tree_store.prepend(None)
1063 self.assertEqual(signals, ['row-inserted'])
1066 tree_store.insert(None, 1, (0, False))
1067 self.assertEqual(signals, ['row-inserted'])
1070 tree_store.insert(None, 1)
1071 self.assertEqual(signals, ['row-inserted'])
1073 def test_list_store(self):
1074 class TestPyObject(object):
1077 test_pyobj = TestPyObject()
1078 test_pydict = {1: 1, "2": 2, "3": "3"}
1079 test_pylist = [1, "2", "3"]
1081 list_store = Gtk.ListStore(int, str, 'GIOverrideTreeAPITest', object, object, object, bool, bool)
1082 for i in range(1, 93):
1083 label = 'this is row #%d' % i
1084 testobj = TestGtk.TestClass(self, i, label)
1085 list_store.append((i,
1095 label = _unicode('this is row #93')
1096 treeiter = list_store.append()
1097 list_store.set_value(treeiter, 0, i)
1098 list_store.set_value(treeiter, 1, label)
1099 list_store.set_value(treeiter, 2, TestGtk.TestClass(self, i, label))
1100 list_store.set_value(treeiter, 3, test_pyobj)
1101 list_store.set_value(treeiter, 4, test_pydict)
1102 list_store.set_value(treeiter, 5, test_pylist)
1103 list_store.set_value(treeiter, 6, 1)
1104 list_store.set_value(treeiter, 7, True)
1107 label = 'this is row #0'
1108 list_store.prepend((0,
1110 TestGtk.TestClass(self, 0, label),
1117 # test automatic unicode->str conversion
1119 label = _unicode('this is row #94')
1120 treeiter = list_store.append((i,
1122 TestGtk.TestClass(self, i, label),
1129 # add sorted items out of order to test insert* apis
1130 # also test sending in None to not set a column
1132 label = 'this is row #97'
1133 treeiter = list_store.append((None,
1142 list_store.set_value(treeiter, 0, i)
1143 list_store.set_value(treeiter, 1, label)
1144 list_store.set_value(treeiter, 2, TestGtk.TestClass(self, i, label))
1145 list_store.set_value(treeiter, 4, test_pydict)
1146 list_store.set_value(treeiter, 7, True)
1148 # this should append
1150 label = 'this is row #99'
1151 list_store.insert(9999, (i,
1153 TestGtk.TestClass(self, i, label),
1161 label = 'this is row #96'
1162 list_store.insert_before(treeiter, (i,
1164 TestGtk.TestClass(self, i, label),
1172 label = 'this is row #98'
1173 list_store.insert_after(treeiter, (i,
1175 TestGtk.TestClass(self, i, label),
1183 label = 'this is row #95'
1184 list_store.insert(95, (i,
1186 TestGtk.TestClass(self, i, label),
1194 label = 'this is row #100'
1195 treeiter = list_store.append()
1196 list_store.set(treeiter, 1, label,
1198 2, TestGtk.TestClass(self, i, label),
1205 label = 'this is row #101'
1206 treeiter = list_store.append()
1207 list_store.set(treeiter, {1: label,
1209 2: TestGtk.TestClass(self, i, label),
1216 label = 'this is row #102'
1217 treeiter = list_store.append()
1218 list_store.set(treeiter, (1, 0, 2, 3, 4, 5, 6, 7),
1221 TestGtk.TestClass(self, i, label),
1228 self.assertEqual(len(list_store), 103)
1230 # walk the list to see if the values were stored correctly
1232 treeiter = list_store.get_iter_first()
1236 i = list_store.get_value(treeiter, 0)
1237 self.assertEqual(i, counter)
1238 s = list_store.get_value(treeiter, 1)
1239 obj = list_store.get_value(treeiter, 2)
1242 pyobj = list_store.get_value(treeiter, 3)
1243 self.assertEqual(pyobj, test_pyobj)
1244 pydict = list_store.get_value(treeiter, 4)
1245 self.assertEqual(pydict, test_pydict)
1246 pylist = list_store.get_value(treeiter, 5)
1247 self.assertEqual(pylist, test_pylist)
1249 bool_1 = list_store.get_value(treeiter, 6)
1250 bool_2 = list_store.get_value(treeiter, 7)
1251 self.assertEqual(bool_1, bool_2)
1252 self.assertTrue(isinstance(bool_1, bool))
1253 self.assertTrue(isinstance(bool_2, bool))
1255 treeiter = list_store.iter_next(treeiter)
1259 self.assertEqual(i, 102)
1261 def test_list_store_sort(self):
1262 def comp1(model, row1, row2, user_data):
1266 # make "m" smaller than anything else
1267 if v1.startswith('m') and not v2.startswith('m'):
1269 if v2.startswith('m') and not v1.startswith('m'):
1271 return (v1 > v2) - (v1 < v2)
1273 list_store = Gtk.ListStore(int, str)
1274 list_store.set_sort_func(2, comp1, None)
1275 list_store.append((1, 'apples'))
1276 list_store.append((3, 'oranges'))
1277 list_store.append((2, 'mango'))
1279 # not sorted yet, should be original order
1280 self.assertEqual([list(i) for i in list_store],
1281 [[1, 'apples'], [3, 'oranges'], [2, 'mango']])
1283 # sort with our custom function
1284 list_store.set_sort_column_id(2, Gtk.SortType.ASCENDING)
1285 self.assertEqual([list(i) for i in list_store],
1286 [[2, 'mango'], [1, 'apples'], [3, 'oranges']])
1288 list_store.set_sort_column_id(2, Gtk.SortType.DESCENDING)
1289 self.assertEqual([list(i) for i in list_store],
1290 [[3, 'oranges'], [1, 'apples'], [2, 'mango']])
1292 def test_list_store_signals(self):
1293 list_store = Gtk.ListStore(int, bool)
1295 def on_row_inserted(list_store, tree_path, tree_iter, signal_list):
1296 signal_list.append('row-inserted')
1298 def on_row_changed(list_store, tree_path, tree_iter, signal_list):
1299 signal_list.append('row-changed')
1302 list_store.connect('row-inserted', on_row_inserted, signals)
1303 list_store.connect('row-changed', on_row_changed, signals)
1305 # adding rows with and without data should only call one signal
1306 list_store.append((0, False))
1307 self.assertEqual(signals, ['row-inserted'])
1311 self.assertEqual(signals, ['row-inserted'])
1314 list_store.prepend((0, False))
1315 self.assertEqual(signals, ['row-inserted'])
1318 list_store.prepend()
1319 self.assertEqual(signals, ['row-inserted'])
1322 list_store.insert(1, (0, False))
1323 self.assertEqual(signals, ['row-inserted'])
1326 list_store.insert(1)
1327 self.assertEqual(signals, ['row-inserted'])
1329 def test_tree_path(self):
1331 p2 = Gtk.TreePath.new_first()
1332 self.assertEqual(p1, p2)
1333 self.assertEqual(str(p1), '0')
1334 p1 = Gtk.TreePath(2)
1335 p2 = Gtk.TreePath.new_from_string('2')
1336 self.assertEqual(p1, p2)
1337 self.assertEqual(str(p1), '2')
1338 p1 = Gtk.TreePath('1:2:3')
1339 p2 = Gtk.TreePath.new_from_string('1:2:3')
1340 self.assertEqual(p1, p2)
1341 self.assertEqual(str(p1), '1:2:3')
1342 p1 = Gtk.TreePath((1, 2, 3))
1343 p2 = Gtk.TreePath.new_from_string('1:2:3')
1344 self.assertEqual(p1, p2)
1345 self.assertEqual(str(p1), '1:2:3')
1346 self.assertTrue(p1 != None)
1347 self.assertFalse(p1 == None)
1348 self.assertTrue(p1 > None)
1349 self.assertTrue(p1 >= None)
1350 self.assertFalse(p1 < None)
1351 self.assertFalse(p1 <= None)
1353 self.assertEqual(tuple(p1), (1, 2, 3))
1355 def test_tree_model(self):
1356 tree_store = Gtk.TreeStore(int, str)
1358 self.assertTrue(tree_store)
1359 self.assertEqual(len(tree_store), 0)
1360 self.assertEqual(tree_store.get_iter_first(), None)
1362 def get_by_index(row, col=None):
1364 return tree_store[row][col]
1366 return tree_store[row]
1368 self.assertRaises(TypeError, get_by_index, None)
1369 self.assertRaises(TypeError, get_by_index, "")
1370 self.assertRaises(TypeError, get_by_index, ())
1372 self.assertRaises(IndexError, get_by_index, "0")
1373 self.assertRaises(IndexError, get_by_index, 0)
1374 self.assertRaises(IndexError, get_by_index, (0,))
1376 self.assertRaises(ValueError, tree_store.get_iter, "0")
1377 self.assertRaises(ValueError, tree_store.get_iter, 0)
1378 self.assertRaises(ValueError, tree_store.get_iter, (0,))
1380 self.assertRaises(ValueError, tree_store.get_iter_from_string, "0")
1382 for row in tree_store:
1383 self.fail("Should not be reached")
1385 class DerivedIntType(int):
1388 class DerivedStrType(str):
1391 for i in range(100):
1392 label = 'this is row #%d' % i
1393 parent = tree_store.append(None, (DerivedIntType(i), DerivedStrType(label),))
1394 self.assertNotEqual(parent, None)
1396 label = 'this is child #%d of node #%d' % (j, i)
1397 child = tree_store.append(parent, (j, label,))
1398 self.assertNotEqual(child, None)
1400 self.assertTrue(tree_store)
1401 self.assertEqual(len(tree_store), 100)
1403 self.assertEqual(tree_store.iter_previous(tree_store.get_iter(0)), None)
1405 for i, row in enumerate(tree_store):
1406 self.assertEqual(row.model, tree_store)
1407 self.assertEqual(row.parent, None)
1409 self.assertEqual(tree_store[i].path, row.path)
1410 self.assertEqual(tree_store[str(i)].path, row.path)
1411 self.assertEqual(tree_store[(i,)].path, row.path)
1413 self.assertEqual(tree_store[i][0], i)
1414 self.assertEqual(tree_store[i][1], "this is row #%d" % i)
1416 aiter = tree_store.get_iter(i)
1417 self.assertEqual(tree_store.get_path(aiter), row.path)
1419 aiter = tree_store.get_iter(str(i))
1420 self.assertEqual(tree_store.get_path(aiter), row.path)
1422 aiter = tree_store.get_iter((i,))
1423 self.assertEqual(tree_store.get_path(aiter), row.path)
1425 self.assertEqual(tree_store.iter_parent(aiter), row.parent)
1427 next = tree_store.iter_next(aiter)
1428 if i < len(tree_store) - 1:
1429 self.assertEqual(tree_store.get_path(next), row.next.path)
1430 self.assertEqual(tree_store.get_path(tree_store.iter_previous(next)),
1431 tree_store.get_path(aiter))
1433 self.assertEqual(next, None)
1435 self.assertEqual(tree_store.iter_n_children(row.iter), 20)
1437 child = tree_store.iter_children(row.iter)
1438 for j, childrow in enumerate(row.iterchildren()):
1439 child_path = tree_store.get_path(child)
1440 self.assertEqual(childrow.path, child_path)
1441 self.assertEqual(childrow.parent.path, row.path)
1442 self.assertEqual(childrow.path, tree_store[child].path)
1443 self.assertEqual(childrow.path, tree_store[child_path].path)
1445 self.assertEqual(childrow[0], tree_store[child][0])
1446 self.assertEqual(childrow[0], j)
1447 self.assertEqual(childrow[1], tree_store[child][1])
1448 self.assertEqual(childrow[1], 'this is child #%d of node #%d' % (j, i))
1450 self.assertRaises(IndexError, get_by_index, child, 2)
1452 tree_store[child][1] = 'this was child #%d of node #%d' % (j, i)
1453 self.assertEqual(childrow[1], 'this was child #%d of node #%d' % (j, i))
1455 nth_child = tree_store.iter_nth_child(row.iter, j)
1456 self.assertEqual(childrow.path, tree_store.get_path(nth_child))
1458 childrow2 = tree_store["%d:%d" % (i, j)]
1459 self.assertEqual(childrow.path, childrow2.path)
1461 childrow2 = tree_store[(i, j,)]
1462 self.assertEqual(childrow.path, childrow2.path)
1464 child = tree_store.iter_next(child)
1466 self.assertEqual(childrow.next.path, tree_store.get_path(child))
1468 self.assertEqual(child, childrow.next)
1469 self.assertEqual(child, None)
1471 self.assertEqual(j, 19)
1473 self.assertEqual(i, 99)
1476 for i in range(-1, -100, -1):
1478 self.assertEqual(tree_store[i][0], i_real)
1481 for j in range(-1, -20, -1):
1483 path = (i_real, j_real,)
1485 self.assertEqual(tree_store[path][-2], j_real)
1487 label = 'this was child #%d of node #%d' % (j_real, i_real)
1488 self.assertEqual(tree_store[path][-1], label)
1490 new_label = 'this still is child #%d of node #%d' % (j_real, i_real)
1491 tree_store[path][-1] = new_label
1492 self.assertEqual(tree_store[path][-1], new_label)
1494 self.assertRaises(IndexError, get_by_index, path, -3)
1496 self.assertRaises(IndexError, get_by_index, -101)
1498 last_row = tree_store[99]
1499 self.assertNotEqual(last_row, None)
1501 for i, childrow in enumerate(last_row.iterchildren()):
1503 self.assertTrue(tree_store.remove(childrow.iter))
1505 self.assertFalse(tree_store.remove(childrow.iter))
1507 self.assertEqual(i, 19)
1509 self.assertEqual(tree_store.iter_n_children(last_row.iter), 0)
1510 for childrow in last_row.iterchildren():
1511 self.fail("Should not be reached")
1513 aiter = tree_store.get_iter(10)
1514 self.assertRaises(TypeError, tree_store.get, aiter, 1, 'a')
1515 self.assertRaises(ValueError, tree_store.get, aiter, 1, -1)
1516 self.assertRaises(ValueError, tree_store.get, aiter, 1, 100)
1517 self.assertEqual(tree_store.get(aiter, 0, 1), (10, 'this is row #10'))
1520 self.assertEqual(len(tree_store), 100)
1521 aiter = tree_store.get_iter(10)
1522 del tree_store[aiter]
1523 self.assertEqual(len(tree_store), 99)
1524 self.assertRaises(TypeError, tree_store.__delitem__, None)
1525 self.assertRaises(IndexError, tree_store.__delitem__, -101)
1526 self.assertRaises(IndexError, tree_store.__delitem__, 101)
1528 def test_tree_model_edit(self):
1529 model = Gtk.ListStore(int, str, float)
1530 model.append([1, "one", -0.1])
1531 model.append([2, "two", -0.2])
1536 self.assertRaises(TypeError, set_row, 3)
1537 self.assertRaises(TypeError, set_row, "three")
1538 self.assertRaises(ValueError, set_row, [])
1539 self.assertRaises(ValueError, set_row, [3, "three"])
1541 model[0] = (3, "three", -0.3)
1543 def test_tree_row_slice(self):
1544 model = Gtk.ListStore(int, str, float)
1545 model.append([1, "one", -0.1])
1547 self.assertEqual([1, "one", -0.1], model[0][:])
1548 self.assertEqual([1, "one"], model[0][:2])
1549 self.assertEqual(["one", -0.1], model[0][1:])
1550 self.assertEqual(["one"], model[0][1:-1])
1551 self.assertEqual([1], model[0][:-2])
1552 self.assertEqual([], model[0][5:])
1553 self.assertEqual([1, -0.1], model[0][0:3:2])
1555 model[0][:] = (2, "two", -0.2)
1556 self.assertEqual([2, "two", -0.2], model[0][:])
1558 model[0][:2] = (3, "three")
1559 self.assertEqual([3, "three", -0.2], model[0][:])
1561 model[0][1:] = ("four", -0.4)
1562 self.assertEqual([3, "four", -0.4], model[0][:])
1564 model[0][1:-1] = ("five",)
1565 self.assertEqual([3, "five", -0.4], model[0][:])
1567 model[0][0:3:2] = (6, -0.6)
1568 self.assertEqual([6, "five", -0.6], model[0][:])
1571 model[0][5:] = ("doesn't", "matter",)
1573 self.assertRaises(ValueError, set_row1)
1576 model[0][:1] = (0, "zero", 0)
1578 self.assertRaises(ValueError, set_row2)
1581 model[0][:2] = ("0", 0)
1583 self.assertRaises(ValueError, set_row3)
1585 def test_tree_view(self):
1586 store = Gtk.ListStore(int, str)
1587 store.append((0, "foo"))
1588 store.append((1, "bar"))
1589 view = Gtk.TreeView()
1590 # FIXME: We can't easily call get_cursor() to make sure this works as
1591 # expected as we need to realize and focus the column; the following
1592 # will raise a Gtk-CRITICAL which we ignore for now
1593 old_mask = GLib.log_set_always_fatal(
1594 GLib.LogLevelFlags.LEVEL_WARNING | GLib.LogLevelFlags.LEVEL_ERROR)
1595 view.set_cursor(store[1].path)
1596 view.set_cursor(str(store[1].path))
1598 view.get_cell_area(store[1].path)
1599 view.get_cell_area(str(store[1].path))
1601 GLib.log_set_always_fatal(old_mask)
1603 def test_tree_view_column(self):
1604 cell = Gtk.CellRendererText()
1605 Gtk.TreeViewColumn(title='This is just a test',
1610 def test_tree_selection(self):
1611 store = Gtk.ListStore(int, str)
1613 store.append((i, "foo"))
1614 view = Gtk.TreeView()
1615 view.set_model(store)
1616 firstpath = store.get_path(store.get_iter_first())
1617 sel = view.get_selection()
1619 sel.select_path(firstpath)
1620 (m, s) = sel.get_selected()
1621 self.assertEqual(m, store)
1622 self.assertEqual(store.get_path(s), firstpath)
1625 (m, s) = sel.get_selected()
1626 self.assertEqual(m, store)
1627 self.assertEqual(store.get_path(s), firstpath)
1629 sel.select_path("0:0")
1630 (m, s) = sel.get_selected()
1631 self.assertEqual(m, store)
1632 self.assertEqual(store.get_path(s), firstpath)
1634 sel.select_path((0, 0))
1635 (m, s) = sel.get_selected()
1636 self.assertEqual(m, store)
1637 self.assertEqual(store.get_path(s), firstpath)
1639 def test_text_buffer(self):
1640 self.assertEqual(Gtk.TextBuffer, overrides.Gtk.TextBuffer)
1641 buffer = Gtk.TextBuffer()
1642 tag = buffer.create_tag('title', font='Sans 18')
1644 self.assertEqual(tag.props.name, 'title')
1645 self.assertEqual(tag.props.font, 'Sans 18')
1647 (start, end) = buffer.get_bounds()
1649 mark = buffer.create_mark(None, start)
1650 self.assertFalse(mark.get_left_gravity())
1652 buffer.set_text('Hello Jane Hello Bob')
1653 (start, end) = buffer.get_bounds()
1654 text = buffer.get_text(start, end, False)
1655 self.assertEqual(text, 'Hello Jane Hello Bob')
1658 (start, end) = buffer.get_bounds()
1659 text = buffer.get_text(start, end, False)
1660 self.assertEqual(text, '')
1662 buffer.insert(end, 'HelloHello')
1663 buffer.insert(end, ' Bob')
1665 cursor_iter = end.copy()
1666 cursor_iter.backward_chars(9)
1667 buffer.place_cursor(cursor_iter)
1668 buffer.insert_at_cursor(' Jane ')
1670 (start, end) = buffer.get_bounds()
1671 text = buffer.get_text(start, end, False)
1672 self.assertEqual(text, 'Hello Jane Hello Bob')
1674 sel = buffer.get_selection_bounds()
1675 self.assertEqual(sel, ())
1676 buffer.select_range(start, end)
1677 sel = buffer.get_selection_bounds()
1678 self.assertTrue(sel[0].equal(start))
1679 self.assertTrue(sel[1].equal(end))
1682 buffer.insert_with_tags(buffer.get_start_iter(), 'HelloHello', tag)
1683 (start, end) = buffer.get_bounds()
1684 self.assertTrue(start.begins_tag(tag))
1685 self.assertTrue(start.has_tag(tag))
1688 buffer.insert_with_tags_by_name(buffer.get_start_iter(), 'HelloHello', 'title')
1689 (start, end) = buffer.get_bounds()
1690 self.assertTrue(start.begins_tag(tag))
1691 self.assertTrue(start.has_tag(tag))
1693 self.assertRaises(ValueError, buffer.insert_with_tags_by_name,
1694 buffer.get_start_iter(), 'HelloHello', 'unknowntag')
1696 def test_text_iter(self):
1697 self.assertEqual(Gtk.TextIter, overrides.Gtk.TextIter)
1698 buffer = Gtk.TextBuffer()
1699 buffer.set_text('Hello Jane Hello Bob')
1700 tag = buffer.create_tag('title', font='Sans 18')
1701 (start, end) = buffer.get_bounds()
1702 start.forward_chars(10)
1703 buffer.apply_tag(tag, start, end)
1704 self.assertTrue(start.begins_tag())
1705 self.assertTrue(end.ends_tag())
1706 self.assertTrue(start.toggles_tag())
1707 self.assertTrue(end.toggles_tag())
1708 start.backward_chars(1)
1709 self.assertFalse(start.begins_tag())
1710 self.assertFalse(start.ends_tag())
1711 self.assertFalse(start.toggles_tag())
1713 def test_buttons(self):
1714 self.assertEqual(Gtk.Button, overrides.Gtk.Button)
1717 button = Gtk.Button()
1718 self.assertTrue(isinstance(button, Gtk.Button))
1719 self.assertTrue(isinstance(button, Gtk.Container))
1720 self.assertTrue(isinstance(button, Gtk.Widget))
1721 button = Gtk.Button(stock=Gtk.STOCK_CLOSE)
1722 self.assertEqual(Gtk.STOCK_CLOSE, button.get_label())
1723 self.assertTrue(button.get_use_stock())
1724 self.assertTrue(button.get_use_underline())
1726 # test Gtk.Button use_stock
1727 button = Gtk.Button(label=Gtk.STOCK_CLOSE, use_stock=True, use_underline=True)
1728 self.assertEqual(Gtk.STOCK_CLOSE, button.get_label())
1729 self.assertTrue(button.get_use_stock())
1730 self.assertTrue(button.get_use_underline())
1732 # test Gtk.LinkButton
1733 self.assertRaises(TypeError, Gtk.LinkButton)
1734 button = Gtk.LinkButton('http://www.Gtk.org', 'Gtk')
1735 self.assertTrue(isinstance(button, Gtk.Button))
1736 self.assertTrue(isinstance(button, Gtk.Container))
1737 self.assertTrue(isinstance(button, Gtk.Widget))
1738 self.assertEqual('http://www.Gtk.org', button.get_uri())
1739 self.assertEqual('Gtk', button.get_label())
1741 def test_inheritance(self):
1742 for name in overrides.Gtk.__all__:
1743 over = getattr(overrides.Gtk, name)
1744 for element in dir(Gtk):
1746 klass = getattr(Gtk, element)
1747 info = klass.__info__
1748 except (NotImplementedError, AttributeError):
1751 # Get all parent classes and interfaces klass inherits from
1752 if isinstance(info, gi.types.ObjectInfo):
1753 classes = list(info.get_interfaces())
1754 parent = info.get_parent()
1755 while parent.get_name() != "Object":
1756 classes.append(parent)
1757 parent = parent.get_parent()
1758 classes = [kl for kl in classes if kl.get_namespace() == "Gtk"]
1763 if kl.get_name() == name:
1764 self.assertTrue(issubclass(klass, over,),
1765 "%r does not inherit from override %r" % (klass, over,))
1767 def test_editable(self):
1768 self.assertEqual(Gtk.Editable, overrides.Gtk.Editable)
1770 # need to use Gtk.Entry because Editable is an interface
1772 pos = entry.insert_text('HeWorld', 0)
1773 self.assertEqual(pos, 7)
1774 pos = entry.insert_text('llo ', 2)
1775 self.assertEqual(pos, 6)
1776 text = entry.get_chars(0, 11)
1777 self.assertEqual('Hello World', text)
1779 def test_label(self):
1780 label = Gtk.Label(label='Hello')
1781 self.assertTrue(isinstance(label, Gtk.Widget))
1782 self.assertEqual(label.get_text(), 'Hello')
1784 def adjustment_check(self, adjustment, value=0.0, lower=0.0, upper=0.0,
1785 step_increment=0.0, page_increment=0.0, page_size=0.0):
1786 self.assertEqual(adjustment.get_value(), value)
1787 self.assertEqual(adjustment.get_lower(), lower)
1788 self.assertEqual(adjustment.get_upper(), upper)
1789 self.assertEqual(adjustment.get_step_increment(), step_increment)
1790 self.assertEqual(adjustment.get_page_increment(), page_increment)
1791 self.assertEqual(adjustment.get_page_size(), page_size)
1793 def test_adjustment(self):
1794 adjustment = Gtk.Adjustment(1, 0, 6, 4, 5, 3)
1795 self.adjustment_check(adjustment, 1, 0, 6, 4, 5, 3)
1797 adjustment = Gtk.Adjustment(1, 0, 6, 4, 5)
1798 self.adjustment_check(adjustment, 1, 0, 6, 4, 5)
1800 adjustment = Gtk.Adjustment(1, 0, 6, 4)
1801 self.adjustment_check(adjustment, 1, 0, 6, 4)
1803 adjustment = Gtk.Adjustment(1, 0, 6)
1804 self.adjustment_check(adjustment, 1, 0, 6)
1806 adjustment = Gtk.Adjustment()
1807 self.adjustment_check(adjustment)
1809 adjustment = Gtk.Adjustment(value=1, lower=0, upper=6,
1810 step_increment=4, page_increment=5, page_size=3)
1811 self.adjustment_check(adjustment, 1, 0, 6, 4, 5, 3)
1813 def test_table(self):
1815 self.assertTrue(isinstance(table, Gtk.Table))
1816 self.assertTrue(isinstance(table, Gtk.Container))
1817 self.assertTrue(isinstance(table, Gtk.Widget))
1818 self.assertEqual(table.get_size(), (1, 1))
1819 self.assertEqual(table.get_homogeneous(), False)
1820 table = Gtk.Table(2, 3)
1821 self.assertEqual(table.get_size(), (2, 3))
1822 self.assertEqual(table.get_homogeneous(), False)
1823 table = Gtk.Table(2, 3, True)
1824 self.assertEqual(table.get_size(), (2, 3))
1825 self.assertEqual(table.get_homogeneous(), True)
1827 # Test PyGTK interface
1828 table = Gtk.Table(rows=3, columns=2)
1829 self.assertEqual(table.get_size(), (3, 2))
1830 # Test using the actual property names
1831 table = Gtk.Table(n_rows=2, n_columns=3, homogeneous=True)
1832 self.assertEqual(table.get_size(), (2, 3))
1833 self.assertEqual(table.get_homogeneous(), True)
1835 label = Gtk.Label(label='Hello')
1836 self.assertTrue(isinstance(label, Gtk.Widget))
1837 table.attach(label, 0, 1, 0, 1)
1838 self.assertEqual(label, table.get_children()[0])
1840 def test_scrolledwindow(self):
1841 sw = Gtk.ScrolledWindow()
1842 self.assertTrue(isinstance(sw, Gtk.ScrolledWindow))
1843 self.assertTrue(isinstance(sw, Gtk.Container))
1844 self.assertTrue(isinstance(sw, Gtk.Widget))
1845 sb = sw.get_hscrollbar()
1846 self.assertEqual(sw.get_hadjustment(), sb.get_adjustment())
1847 sb = sw.get_vscrollbar()
1848 self.assertEqual(sw.get_vadjustment(), sb.get_adjustment())
1850 def test_widget_drag_methods(self):
1851 widget = Gtk.Button()
1853 # here we are not checking functionality, only that the methods exist
1854 # and except the right number of arguments
1856 widget.drag_check_threshold(0, 0, 0, 0)
1858 # drag_dest_ methods
1859 widget.drag_dest_set(Gtk.DestDefaults.DROP, None, Gdk.DragAction.COPY)
1860 widget.drag_dest_add_image_targets()
1861 widget.drag_dest_add_text_targets()
1862 widget.drag_dest_add_uri_targets()
1863 widget.drag_dest_get_track_motion()
1864 widget.drag_dest_set_track_motion(True)
1865 widget.drag_dest_get_target_list()
1866 widget.drag_dest_set_target_list(Gtk.TargetList.new([Gtk.TargetEntry.new('test', 0, 0)]))
1867 widget.drag_dest_unset()
1869 widget.drag_highlight()
1870 widget.drag_unhighlight()
1872 # drag_source_ methods
1873 widget.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, None, Gdk.DragAction.MOVE)
1874 widget.drag_source_add_image_targets()
1875 widget.drag_source_add_text_targets()
1876 widget.drag_source_add_uri_targets()
1877 widget.drag_source_set_icon_name("")
1878 widget.drag_source_set_icon_pixbuf(GdkPixbuf.Pixbuf())
1879 widget.drag_source_set_icon_stock("")
1880 widget.drag_source_get_target_list()
1881 widget.drag_source_set_target_list(Gtk.TargetList.new([Gtk.TargetEntry.new('test', 0, 0)]))
1882 widget.drag_source_unset()
1884 # these methods cannot be called because they require a valid drag on
1885 # a real GdkWindow. So we only check that they exist and are callable.
1886 self.assertTrue(hasattr(widget.drag_dest_set_proxy, '__call__'))
1887 self.assertTrue(hasattr(widget.drag_get_data, '__call__'))
1889 def test_scrollbar(self):
1891 adjustment = Gtk.Adjustment()
1893 hscrollbar = Gtk.HScrollbar()
1894 vscrollbar = Gtk.VScrollbar()
1895 self.assertNotEqual(hscrollbar.props.adjustment, adjustment)
1896 self.assertNotEqual(vscrollbar.props.adjustment, adjustment)
1898 hscrollbar = Gtk.HScrollbar(adjustment)
1899 vscrollbar = Gtk.VScrollbar(adjustment)
1900 self.assertEqual(hscrollbar.props.adjustment, adjustment)
1901 self.assertEqual(vscrollbar.props.adjustment, adjustment)
1903 def test_iconview(self):
1905 iconview = Gtk.IconView()
1906 self.assertEqual(iconview.props.model, None)
1908 model = Gtk.ListStore(str)
1909 iconview = Gtk.IconView(model)
1910 self.assertEqual(iconview.props.model, model)
1912 def test_toolbutton(self):
1914 button = Gtk.ToolButton()
1915 self.assertEqual(button.props.stock_id, None)
1917 button = Gtk.ToolButton('gtk-new')
1918 self.assertEqual(button.props.stock_id, 'gtk-new')
1920 icon = Gtk.Image.new_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.SMALL_TOOLBAR)
1922 button = Gtk.ToolButton(label='mylabel', icon_widget=icon)
1923 self.assertEqual(button.props.label, 'mylabel')
1924 self.assertEqual(button.props.icon_widget, icon)
1926 def test_iconset(self):
1929 pixbuf = GdkPixbuf.Pixbuf()
1932 def test_viewport(self):
1934 vadjustment = Gtk.Adjustment()
1935 hadjustment = Gtk.Adjustment()
1937 viewport = Gtk.Viewport(hadjustment=hadjustment,
1938 vadjustment=vadjustment)
1940 self.assertEqual(viewport.props.vadjustment, vadjustment)
1941 self.assertEqual(viewport.props.hadjustment, hadjustment)
1944 class TestGio(unittest.TestCase):
1946 self.settings = Gio.Settings('org.gnome.test')
1947 # we change the values in the tests, so set them to predictable start
1949 self.settings.reset('test-string')
1950 self.settings.reset('test-array')
1952 def test_file_enumerator(self):
1953 self.assertEqual(Gio.FileEnumerator, overrides.Gio.FileEnumerator)
1954 f = Gio.file_new_for_path("./")
1957 for info in f.enumerate_children("standard::*", 0, None):
1958 iter_info.append(info.get_name())
1961 enumerator = f.enumerate_children("standard::*", 0, None)
1963 info = enumerator.next_file(None)
1966 next_info.append(info.get_name())
1968 self.assertEqual(iter_info, next_info)
1970 def test_gsettings_native(self):
1971 self.assertTrue('test-array' in self.settings.list_keys())
1974 v = self.settings.get_value('test-boolean')
1975 self.assertEqual(v.get_boolean(), True)
1976 self.assertEqual(self.settings.get_boolean('test-boolean'), True)
1978 v = self.settings.get_value('test-string')
1979 self.assertEqual(v.get_string(), 'Hello')
1980 self.assertEqual(self.settings.get_string('test-string'), 'Hello')
1982 v = self.settings.get_value('test-array')
1983 self.assertEqual(v.unpack(), [1, 2])
1985 v = self.settings.get_value('test-tuple')
1986 self.assertEqual(v.unpack(), (1, 2))
1989 self.settings.set_string('test-string', 'World')
1990 self.assertEqual(self.settings.get_string('test-string'), 'World')
1992 self.settings.set_value('test-string', GLib.Variant('s', 'Goodbye'))
1993 self.assertEqual(self.settings.get_string('test-string'), 'Goodbye')
1995 def test_gsettings_constructor(self):
1996 # default constructor uses path from schema
1997 self.assertEqual(self.settings.get_property('path'), '/tests/')
1999 # optional constructor arguments
2000 with_path = Gio.Settings('org.gnome.nopathtest', path='/mypath/')
2001 self.assertEqual(with_path.get_property('path'), '/mypath/')
2002 self.assertEqual(with_path['np-int'], 42)
2004 def test_gsettings_override(self):
2005 # dictionary interface
2006 self.assertEqual(len(self.settings), 4)
2007 self.assertTrue('test-array' in self.settings)
2008 self.assertTrue('test-array' in self.settings.keys())
2009 self.assertFalse('nonexisting' in self.settings)
2010 self.assertFalse(4 in self.settings)
2011 self.assertEqual(bool(self.settings), True)
2014 self.assertEqual(self.settings['test-boolean'], True)
2015 self.assertEqual(self.settings['test-string'], 'Hello')
2016 self.assertEqual(self.settings['test-array'], [1, 2])
2017 self.assertEqual(self.settings['test-tuple'], (1, 2))
2019 self.assertRaises(KeyError, self.settings.__getitem__, 'unknown')
2020 self.assertRaises(KeyError, self.settings.__getitem__, 2)
2023 self.settings['test-string'] = 'Goodbye'
2024 self.assertEqual(self.settings['test-string'], 'Goodbye')
2025 self.settings['test-array'] = [3, 4, 5]
2026 self.assertEqual(self.settings['test-array'], [3, 4, 5])
2028 self.assertRaises(TypeError, self.settings.__setitem__, 'test-string', 1)
2029 self.assertRaises(KeyError, self.settings.__setitem__, 'unknown', 'moo')
2031 def test_gsettings_empty(self):
2032 empty = Gio.Settings('org.gnome.empty', path='/tests/')
2033 self.assertEqual(len(empty), 0)
2034 self.assertEqual(bool(empty), True)
2035 self.assertEqual(empty.keys(), [])