summaryrefslogtreecommitdiff
path: root/tests/test_overrides_glib.py
diff options
context:
space:
mode:
authorMartin Pitt <martinpitt@gnome.org>2012-09-03 07:57:01 +0200
committerMartin Pitt <martinpitt@gnome.org>2012-09-03 07:57:01 +0200
commit2d8f48f4ff56bb75985136452b50b75895258608 (patch)
tree43f58482f79497cc2812c6771ba320dbfaaf208f /tests/test_overrides_glib.py
parent1223358e2c558dd7ac3300126f989054ec5a5b3f (diff)
downloadpygobject-2d8f48f4ff56bb75985136452b50b75895258608.tar.gz
Split test_overrides.py
Split the huge test_overrides.py into separate files for gdk, gtk, gio, glib, and pango. Further split the monolithic classes for Gtk and Gio into several ones. https://bugzilla.gnome.org/show_bug.cgi?id=683188
Diffstat (limited to 'tests/test_overrides_glib.py')
-rw-r--r--tests/test_overrides_glib.py445
1 files changed, 445 insertions, 0 deletions
diff --git a/tests/test_overrides_glib.py b/tests/test_overrides_glib.py
new file mode 100644
index 00000000..2fee7e1a
--- /dev/null
+++ b/tests/test_overrides_glib.py
@@ -0,0 +1,445 @@
+# -*- Mode: Python; py-indent-offset: 4 -*-
+# vim: tabstop=4 shiftwidth=4 expandtab
+
+import unittest
+
+import gi
+from gi.repository import GLib
+from compathelper import _long
+
+
+class TestGVariant(unittest.TestCase):
+ def test_create(self):
+ # simple values
+
+ variant = GLib.Variant('i', 42)
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertEqual(variant.get_int32(), 42)
+
+ variant = GLib.Variant('s', '')
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertEqual(variant.get_string(), '')
+
+ variant = GLib.Variant('s', 'hello')
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertEqual(variant.get_string(), 'hello')
+
+ # boxed variant
+ variant = GLib.Variant('v', GLib.Variant('i', 42))
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertTrue(isinstance(variant.get_variant(), GLib.Variant))
+ self.assertEqual(variant.get_type_string(), 'v')
+ self.assertEqual(variant.get_variant().get_type_string(), 'i')
+ self.assertEqual(variant.get_variant().get_int32(), 42)
+
+ variant = GLib.Variant('v', GLib.Variant('v', GLib.Variant('i', 42)))
+ self.assertEqual(variant.get_type_string(), 'v')
+ self.assertEqual(variant.get_variant().get_type_string(), 'v')
+ self.assertEqual(variant.get_variant().get_variant().get_type_string(), 'i')
+ self.assertEqual(variant.get_variant().get_variant().get_int32(), 42)
+
+ # tuples
+
+ variant = GLib.Variant('()', ())
+ self.assertEqual(variant.get_type_string(), '()')
+ self.assertEqual(variant.n_children(), 0)
+
+ variant = GLib.Variant('(i)', (3,))
+ self.assertEqual(variant.get_type_string(), '(i)')
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertEqual(variant.n_children(), 1)
+ self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
+ self.assertEqual(variant.get_child_value(0).get_int32(), 3)
+
+ variant = GLib.Variant('(ss)', ('mec', 'mac'))
+ self.assertEqual(variant.get_type_string(), '(ss)')
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
+ self.assertEqual(variant.get_child_value(0).get_string(), 'mec')
+ self.assertEqual(variant.get_child_value(1).get_string(), 'mac')
+
+ # nested tuples
+ variant = GLib.Variant('((si)(ub))', (('hello', -1), (42, True)))
+ self.assertEqual(variant.get_type_string(), '((si)(ub))')
+ self.assertEqual(variant.unpack(), (('hello', -1), (_long(42), True)))
+
+ # dictionaries
+
+ variant = GLib.Variant('a{si}', {})
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertEqual(variant.get_type_string(), 'a{si}')
+ self.assertEqual(variant.n_children(), 0)
+
+ variant = GLib.Variant('a{si}', {'': 1, 'key1': 2, 'key2': 3})
+ self.assertEqual(variant.get_type_string(), 'a{si}')
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(2), GLib.Variant))
+ self.assertEqual(variant.unpack(), {'': 1, 'key1': 2, 'key2': 3})
+
+ # nested dictionaries
+ variant = GLib.Variant('a{sa{si}}', {})
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertEqual(variant.get_type_string(), 'a{sa{si}}')
+ self.assertEqual(variant.n_children(), 0)
+
+ d = {'': {'': 1, 'keyn1': 2},
+ 'key1': {'key11': 11, 'key12': 12}}
+ variant = GLib.Variant('a{sa{si}}', d)
+ self.assertEqual(variant.get_type_string(), 'a{sa{si}}')
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertEqual(variant.unpack(), d)
+
+ # arrays
+
+ variant = GLib.Variant('ai', [])
+ self.assertEqual(variant.get_type_string(), 'ai')
+ self.assertEqual(variant.n_children(), 0)
+
+ variant = GLib.Variant('ai', [1, 2])
+ self.assertEqual(variant.get_type_string(), 'ai')
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
+ self.assertEqual(variant.get_child_value(0).get_int32(), 1)
+ self.assertEqual(variant.get_child_value(1).get_int32(), 2)
+
+ variant = GLib.Variant('as', [])
+ self.assertEqual(variant.get_type_string(), 'as')
+ self.assertEqual(variant.n_children(), 0)
+
+ variant = GLib.Variant('as', [''])
+ self.assertEqual(variant.get_type_string(), 'as')
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
+ self.assertEqual(variant.get_child_value(0).get_string(), '')
+
+ variant = GLib.Variant('as', ['hello', 'world'])
+ self.assertEqual(variant.get_type_string(), 'as')
+ self.assertTrue(isinstance(variant, GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant))
+ self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant))
+ self.assertEqual(variant.get_child_value(0).get_string(), 'hello')
+ self.assertEqual(variant.get_child_value(1).get_string(), 'world')
+
+ # nested arrays
+ variant = GLib.Variant('aai', [])
+ self.assertEqual(variant.get_type_string(), 'aai')
+ self.assertEqual(variant.n_children(), 0)
+
+ variant = GLib.Variant('aai', [[]])
+ self.assertEqual(variant.get_type_string(), 'aai')
+ self.assertEqual(variant.n_children(), 1)
+ self.assertEqual(variant.get_child_value(0).n_children(), 0)
+
+ variant = GLib.Variant('aai', [[1, 2], [3, 4, 5]])
+ self.assertEqual(variant.get_type_string(), 'aai')
+ self.assertEqual(variant.unpack(), [[1, 2], [3, 4, 5]])
+
+ #
+ # complex types
+ #
+
+ variant = GLib.Variant('(as)', ([],))
+ self.assertEqual(variant.get_type_string(), '(as)')
+ self.assertEqual(variant.n_children(), 1)
+ self.assertEqual(variant.get_child_value(0).n_children(), 0)
+
+ variant = GLib.Variant('(as)', ([''],))
+ self.assertEqual(variant.get_type_string(), '(as)')
+ self.assertEqual(variant.n_children(), 1)
+ self.assertEqual(variant.get_child_value(0).n_children(), 1)
+ self.assertEqual(variant.get_child_value(0).get_child_value(0).get_string(), '')
+
+ variant = GLib.Variant('(as)', (['hello'],))
+ self.assertEqual(variant.get_type_string(), '(as)')
+ self.assertEqual(variant.n_children(), 1)
+ self.assertEqual(variant.get_child_value(0).n_children(), 1)
+ self.assertEqual(variant.get_child_value(0).get_child_value(0).get_string(), 'hello')
+
+ obj = {'a1': (1, True), 'a2': (2, False)}
+ variant = GLib.Variant('a{s(ib)}', obj)
+ self.assertEqual(variant.get_type_string(), 'a{s(ib)}')
+ self.assertEqual(variant.unpack(), obj)
+
+ obj = {'a1': (1, GLib.Variant('b', True)), 'a2': (2, GLib.Variant('y', 255))}
+ variant = GLib.Variant('a{s(iv)}', obj)
+ self.assertEqual(variant.get_type_string(), 'a{s(iv)}')
+ self.assertEqual(variant.unpack(), {'a1': (1, True), 'a2': (2, 255)})
+
+ obj = (1, {'a': {'a1': True, 'a2': False},
+ 'b': {'b1': False},
+ 'c': {}
+ },
+ 'foo')
+ variant = GLib.Variant('(ia{sa{sb}}s)', obj)
+ self.assertEqual(variant.get_type_string(), '(ia{sa{sb}}s)')
+ self.assertEqual(variant.unpack(), obj)
+
+ obj = {"frequency": GLib.Variant('t', 738000000),
+ "hierarchy": GLib.Variant('i', 0),
+ "bandwidth": GLib.Variant('x', 8),
+ "code-rate-hp": GLib.Variant('d', 2.0 / 3.0),
+ "constellation": GLib.Variant('s', "QAM16"),
+ "guard-interval": GLib.Variant('u', 4)}
+ variant = GLib.Variant('a{sv}', obj)
+ self.assertEqual(variant.get_type_string(), 'a{sv}')
+ self.assertEqual(variant.unpack(),
+ {"frequency": 738000000,
+ "hierarchy": 0,
+ "bandwidth": 8,
+ "code-rate-hp": 2.0 / 3.0,
+ "constellation": "QAM16",
+ "guard-interval": 4
+ })
+
+ def test_create_errors(self):
+ # excess arguments
+ self.assertRaises(TypeError, GLib.Variant, 'i', 42, 3)
+ self.assertRaises(TypeError, GLib.Variant, '(i)', (42, 3))
+
+ # not enough arguments
+ self.assertRaises(TypeError, GLib.Variant, '(ii)', (42,))
+
+ # data type mismatch
+ self.assertRaises(TypeError, GLib.Variant, 'i', 'hello')
+ self.assertRaises(TypeError, GLib.Variant, 's', 42)
+ self.assertRaises(TypeError, GLib.Variant, '(ss)', 'mec', 'mac')
+ self.assertRaises(TypeError, GLib.Variant, '(s)', 'hello')
+
+ # unimplemented data type
+ self.assertRaises(NotImplementedError, GLib.Variant, 'Q', 1)
+
+ def test_unpack(self):
+ # simple values
+ res = GLib.Variant.new_int32(-42).unpack()
+ self.assertEqual(res, -42)
+
+ res = GLib.Variant.new_uint64(34359738368).unpack()
+ self.assertEqual(res, 34359738368)
+
+ res = GLib.Variant.new_boolean(True).unpack()
+ self.assertEqual(res, True)
+
+ res = GLib.Variant.new_object_path('/foo/Bar').unpack()
+ self.assertEqual(res, '/foo/Bar')
+
+ # variant
+ res = GLib.Variant('v', GLib.Variant.new_int32(-42)).unpack()
+ self.assertEqual(res, -42)
+
+ GLib.Variant('v', GLib.Variant('v', GLib.Variant('i', 42)))
+ self.assertEqual(res, -42)
+
+ # tuple
+ res = GLib.Variant.new_tuple(GLib.Variant.new_int32(-1),
+ GLib.Variant.new_string('hello')).unpack()
+ self.assertEqual(res, (-1, 'hello'))
+
+ # array
+ vb = GLib.VariantBuilder.new(gi._gi.variant_type_from_string('ai'))
+ vb.add_value(GLib.Variant.new_int32(-1))
+ vb.add_value(GLib.Variant.new_int32(3))
+ res = vb.end().unpack()
+ self.assertEqual(res, [-1, 3])
+
+ # dictionary
+ res = GLib.Variant('a{si}', {'key1': 1, 'key2': 2}).unpack()
+ self.assertEqual(res, {'key1': 1, 'key2': 2})
+
+ def test_iteration(self):
+ # array index access
+ vb = GLib.VariantBuilder.new(gi._gi.variant_type_from_string('ai'))
+ vb.add_value(GLib.Variant.new_int32(-1))
+ vb.add_value(GLib.Variant.new_int32(3))
+ v = vb.end()
+
+ self.assertEqual(len(v), 2)
+ self.assertEqual(v[0], -1)
+ self.assertEqual(v[1], 3)
+ self.assertEqual(v[-1], 3)
+ self.assertEqual(v[-2], -1)
+ self.assertRaises(IndexError, v.__getitem__, 2)
+ self.assertRaises(IndexError, v.__getitem__, -3)
+ self.assertRaises(ValueError, v.__getitem__, 'a')
+
+ # array iteration
+ self.assertEqual([x for x in v], [-1, 3])
+ self.assertEqual(list(v), [-1, 3])
+
+ # tuple index access
+ v = GLib.Variant.new_tuple(GLib.Variant.new_int32(-1),
+ GLib.Variant.new_string('hello'))
+ self.assertEqual(len(v), 2)
+ self.assertEqual(v[0], -1)
+ self.assertEqual(v[1], 'hello')
+ self.assertEqual(v[-1], 'hello')
+ self.assertEqual(v[-2], -1)
+ self.assertRaises(IndexError, v.__getitem__, 2)
+ self.assertRaises(IndexError, v.__getitem__, -3)
+ self.assertRaises(ValueError, v.__getitem__, 'a')
+
+ # tuple iteration
+ self.assertEqual([x for x in v], [-1, 'hello'])
+ self.assertEqual(tuple(v), (-1, 'hello'))
+
+ # dictionary index access
+ vsi = GLib.Variant('a{si}', {'key1': 1, 'key2': 2})
+ vis = GLib.Variant('a{is}', {1: 'val1', 5: 'val2'})
+
+ self.assertEqual(len(vsi), 2)
+ self.assertEqual(vsi['key1'], 1)
+ self.assertEqual(vsi['key2'], 2)
+ self.assertRaises(KeyError, vsi.__getitem__, 'unknown')
+
+ self.assertEqual(len(vis), 2)
+ self.assertEqual(vis[1], 'val1')
+ self.assertEqual(vis[5], 'val2')
+ self.assertRaises(KeyError, vsi.__getitem__, 3)
+
+ # dictionary iteration
+ self.assertEqual(set(vsi.keys()), set(['key1', 'key2']))
+ self.assertEqual(set(vis.keys()), set([1, 5]))
+
+ # string index access
+ v = GLib.Variant('s', 'hello')
+ self.assertEqual(len(v), 5)
+ self.assertEqual(v[0], 'h')
+ self.assertEqual(v[4], 'o')
+ self.assertEqual(v[-1], 'o')
+ self.assertEqual(v[-5], 'h')
+ self.assertRaises(IndexError, v.__getitem__, 5)
+ self.assertRaises(IndexError, v.__getitem__, -6)
+
+ # string iteration
+ self.assertEqual([x for x in v], ['h', 'e', 'l', 'l', 'o'])
+
+ def test_split_signature(self):
+ self.assertEqual(GLib.Variant.split_signature('()'), [])
+
+ self.assertEqual(GLib.Variant.split_signature('s'), ['s'])
+
+ self.assertEqual(GLib.Variant.split_signature('as'), ['as'])
+
+ self.assertEqual(GLib.Variant.split_signature('(s)'), ['s'])
+
+ self.assertEqual(GLib.Variant.split_signature('(iso)'), ['i', 's', 'o'])
+
+ self.assertEqual(GLib.Variant.split_signature('(s(ss)i(ii))'),
+ ['s', '(ss)', 'i', '(ii)'])
+
+ self.assertEqual(GLib.Variant.split_signature('(as)'), ['as'])
+
+ self.assertEqual(GLib.Variant.split_signature('(s(ss)iaiaasa(ii))'),
+ ['s', '(ss)', 'i', 'ai', 'aas', 'a(ii)'])
+
+ self.assertEqual(GLib.Variant.split_signature('(a{iv}(ii)((ss)a{s(ss)}))'),
+ ['a{iv}', '(ii)', '((ss)a{s(ss)})'])
+
+ def test_hash(self):
+ v1 = GLib.Variant('s', 'somestring')
+ v2 = GLib.Variant('s', 'somestring')
+ v3 = GLib.Variant('s', 'somestring2')
+
+ self.assertTrue(v2 in set([v1, v3]))
+ self.assertTrue(v2 in frozenset([v1, v3]))
+ self.assertTrue(v2 in {v1: '1', v3: '2'})
+
+ def test_compare(self):
+ # Check if identical GVariant are equal
+
+ def assert_equal(vtype, value):
+ self.assertEqual(GLib.Variant(vtype, value), GLib.Variant(vtype, value))
+
+ def assert_not_equal(vtype1, value1, vtype2, value2):
+ self.assertNotEqual(GLib.Variant(vtype1, value1), GLib.Variant(vtype2, value2))
+
+ numbers = ['y', 'n', 'q', 'i', 'u', 'x', 't', 'h', 'd']
+ for num in numbers:
+ assert_equal(num, 42)
+ assert_not_equal(num, 42, num, 41)
+ assert_not_equal(num, 42, 's', '42')
+
+ assert_equal('s', 'something')
+ assert_not_equal('s', 'something', 's', 'somethingelse')
+ assert_not_equal('s', 'something', 'i', 1234)
+
+ assert_equal('g', 'dustybinqhogx')
+ assert_not_equal('g', 'dustybinqhogx', 'g', 'dustybin')
+ assert_not_equal('g', 'dustybinqhogx', 'i', 1234)
+
+ assert_equal('o', '/dev/null')
+ assert_not_equal('o', '/dev/null', 'o', '/dev/zero')
+ assert_not_equal('o', '/dev/null', 'i', 1234)
+
+ assert_equal('(s)', ('strtuple',))
+ assert_not_equal('(s)', ('strtuple',), '(s)', ('strtuple2',))
+
+ assert_equal('a{si}', {'str': 42})
+ assert_not_equal('a{si}', {'str': 42}, 'a{si}', {'str': 43})
+
+ assert_equal('v', GLib.Variant('i', 42))
+ assert_not_equal('v', GLib.Variant('i', 42), 'v', GLib.Variant('i', 43))
+
+ def test_bool(self):
+ # Check if the GVariant bool matches the unpacked Pythonic bool
+
+ def assert_equals_bool(vtype, value):
+ self.assertEqual(bool(GLib.Variant(vtype, value)), bool(value))
+
+ # simple values
+ assert_equals_bool('b', True)
+ assert_equals_bool('b', False)
+
+ numbers = ['y', 'n', 'q', 'i', 'u', 'x', 't', 'h', 'd']
+ for number in numbers:
+ assert_equals_bool(number, 0)
+ assert_equals_bool(number, 1)
+
+ assert_equals_bool('s', '')
+ assert_equals_bool('g', '')
+ assert_equals_bool('s', 'something')
+ assert_equals_bool('o', '/dev/null')
+ assert_equals_bool('g', 'dustybinqhogx')
+
+ # arrays
+ assert_equals_bool('ab', [True])
+ assert_equals_bool('ab', [False])
+ for number in numbers:
+ assert_equals_bool('a' + number, [])
+ assert_equals_bool('a' + number, [0])
+ assert_equals_bool('as', [])
+ assert_equals_bool('as', [''])
+ assert_equals_bool('ao', [])
+ assert_equals_bool('ao', ['/'])
+ assert_equals_bool('ag', [])
+ assert_equals_bool('ag', [''])
+ assert_equals_bool('aai', [[]])
+
+ # tuples
+ assert_equals_bool('()', ())
+ for number in numbers:
+ assert_equals_bool('(' + number + ')', (0,))
+ assert_equals_bool('(s)', ('',))
+ assert_equals_bool('(o)', ('/',))
+ assert_equals_bool('(g)', ('',))
+ assert_equals_bool('(())', ((),))
+
+ # dictionaries
+ assert_equals_bool('a{si}', {})
+ assert_equals_bool('a{si}', {'': 0})
+
+ # complex types, always True
+ assert_equals_bool('(as)', ([],))
+ assert_equals_bool('a{s(i)}', {'': (0,)})
+
+ # variant types, recursive unpacking
+ assert_equals_bool('v', GLib.Variant('i', 0))
+ assert_equals_bool('v', GLib.Variant('i', 1))
+
+ def test_repr(self):
+ v = GLib.Variant('(is)', (1, 'somestring'))
+ self.assertEqual(str(v), "(1, 'somestring')")
+ self.assertEqual(repr(v), "GLib.Variant('(is)', (1, 'somestring'))")