3
from dbus.types import Double
5
from landscape.lib import bpickle
6
from landscape.lib.bpickle_dbus import install, uninstall, dumps_utf8string
9
original = dict(bpickle.dumps_table)
12
class DBusBPickleExtensionsTest(unittest.TestCase):
15
# Mutate the original object back to the original version
16
# because rebinding it will cause bizarre failures.
17
bpickle.dumps_table.clear()
18
bpickle.dumps_table.update(original)
20
def test_install(self):
22
Installing bpickle extensions for DBus types should add to the
23
existing table. Existing bpickle mappings shouldn't be
27
self.assertNotEquals(original, bpickle.dumps_table)
28
pre = set(original.iteritems())
29
post = set(bpickle.dumps_table.iteritems())
30
self.assertTrue(pre.issubset(post))
32
def test_uninstall(self):
34
Uninstalling bpickle extensions for DBus types should remove
35
whatever was added during installation. Extensions installed
36
by external components should not be affected by this
40
self.assertFalse(object in bpickle.dumps_table)
41
bpickle.dumps_table[object] = lambda obj: None
44
pre = set(original.iteritems())
45
post = set(bpickle.dumps_table.iteritems())
46
self.assertTrue(pre.issubset(post))
47
self.assertTrue(object in bpickle.dumps_table)
48
self.assertTrue(len(original)+1, len(bpickle.dumps_table))
50
def test_dumps_utf8string(self):
52
Dumping a L{dbus.types.UTF8String} should produce the same
53
bpickle output as would be produced for a C{unicode} value.
56
from dbus.types import UTF8String
58
value = UTF8String("")
59
self.assertEquals(dumps_utf8string(value), "u0:")
60
value = UTF8String("Charlie!")
61
self.assertEquals(dumps_utf8string(value), "u8:Charlie!")
65
def test_dumps_double(self):
67
Dumping and restoring a L{dbus.types.Double} should result in the
72
value = Double(480.0, variant_level=1)
75
self.assertAlmostEquals(bpickle.loads(bpickle.dumps(value)), 480.0)