def test_guess_signature_dbus_types(self):
     aeq = self.assertEqual
     from _dbus_bindings import Message
     gs = Message.guess_signature
     aeq(gs(types.Dictionary({'a':'b'})), 'a{ss}')
     aeq(gs(types.Dictionary({'a':'b'}, signature='sv')), 'a{sv}')
     aeq(gs(types.Dictionary({}, signature='iu')), 'a{iu}')
     aeq(gs(types.Array([types.Int32(1)])), 'ai')
     aeq(gs(types.Array([types.Int32(1)], signature='u')), 'au')
def _get_dbus_types(s: str) -> List[Type]:
    signature = Signature(s)
    out = []
    for entry in signature:
        if entry in _DBUS_PRIMITIVES:
            if entry == "y":
                raise TypeError(
                    "dbus.Byte cannot be instantiated with default value! "
                    "Use ByteArray ('ay') or UInt16 ('q') instead."
                )
            out.append(_DBUS_PRIMITIVES[entry])
        # FIXME: DBus container types get instantiated here instead of in _instantiate.
        elif entry.startswith("("):
            defaults = _instantiate(_get_dbus_types(entry[1:-1]))
            out.append(dtype.Struct(defaults, signature=entry[1:-1]))
        elif entry.startswith("a{"):
            out.append(dtype.Dictionary(signature=entry[2:-1]))
        elif entry.startswith("a"):
            out.append(dtype.Array(signature=entry[1:]))

    return out
 def test_Dictionary(self):
     self.assertEqual(types.Dictionary({'foo':'bar'}), {'foo':'bar'})
     self.assertEqual(types.Dictionary({}, variant_level=2), {})
     self.assertEqual(types.Dictionary({}, variant_level=2).variant_level, 2)