utils.debug: Add a broken qflags_key.
This commit is contained in:
parent
318805a088
commit
837b2b386e
@ -73,6 +73,49 @@ class QEnumKeyTests(unittest.TestCase):
|
|||||||
# FIXME maybe this should return the right thing anyways?
|
# FIXME maybe this should return the right thing anyways?
|
||||||
debug.qenum_key(Qt, Qt.Alignment(int(Qt.AlignLeft)))
|
debug.qenum_key(Qt, Qt.Alignment(int(Qt.AlignLeft)))
|
||||||
|
|
||||||
|
|
||||||
|
class QFlagsKeyTests(unittest.TestCase):
|
||||||
|
|
||||||
|
@unittest.skip('FIXME')
|
||||||
|
def test_single(self):
|
||||||
|
"""Test with single value."""
|
||||||
|
flags = debug.qflags_key(Qt, Qt.AlignTop)
|
||||||
|
self.assertEqual(flags, 'AlignTop')
|
||||||
|
|
||||||
|
@unittest.skip('FIXME')
|
||||||
|
def test_multiple(self):
|
||||||
|
"""Test with multiple values."""
|
||||||
|
flags = debug.qflags_key(Qt, Qt.AlignLeft | Qt.AlignTop)
|
||||||
|
self.assertEqual(flags, 'AlignLeft|AlignTop')
|
||||||
|
|
||||||
|
def test_combined(self):
|
||||||
|
"""Test with a combined value."""
|
||||||
|
flags = debug.qflags_key(Qt, Qt.AlignCenter)
|
||||||
|
self.assertEqual(flags, 'AlignHCenter|AlignVCenter')
|
||||||
|
|
||||||
|
@unittest.skip('FIXME')
|
||||||
|
def test_add_base(self):
|
||||||
|
"""Test with add_base=True."""
|
||||||
|
flags = debug.qflags_key(Qt, Qt.AlignTop, add_base=True)
|
||||||
|
self.assertEqual(flags, 'Qt.AlignTop')
|
||||||
|
|
||||||
|
def test_int_noklass(self):
|
||||||
|
"""Test passing an int without explicit klass given."""
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
debug.qflags_key(Qt, 42)
|
||||||
|
|
||||||
|
@unittest.skip('FIXME')
|
||||||
|
def test_int(self):
|
||||||
|
"""Test passing an int with explicit klass given."""
|
||||||
|
flags = debug.qflags_key(Qt, 0x0021, klass=Qt.Alignment)
|
||||||
|
self.assertEqual(flags, 'AlignLeft|AlignTop')
|
||||||
|
|
||||||
|
def test_unknown(self):
|
||||||
|
"""Test passing an unknown value."""
|
||||||
|
flags = debug.qflags_key(Qt, 0x1100, klass=Qt.Alignment)
|
||||||
|
self.assertEqual(flags, '0x0100|0x1000')
|
||||||
|
|
||||||
|
|
||||||
class TestDebug(unittest.TestCase):
|
class TestDebug(unittest.TestCase):
|
||||||
|
|
||||||
"""Test signal debug output functions."""
|
"""Test signal debug output functions."""
|
||||||
|
@ -167,6 +167,44 @@ def qenum_key(base, value, add_base=False, klass=None):
|
|||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def qflags_key(base, value, add_base=False, klass=None):
|
||||||
|
"""Convert a Qt QFlags value to its keys as string.
|
||||||
|
|
||||||
|
Note: Passing a combined value (such as Qt.AlignCenter) will get the names
|
||||||
|
for the individual bits (e.g. Qt.AlignVCenter | Qt.AlignHCenter). FIXME
|
||||||
|
|
||||||
|
Args:
|
||||||
|
base: The object the flags are in, e.g. QtCore.Qt
|
||||||
|
value: The value to get.
|
||||||
|
add_base: Whether the base should be added to the printed names.
|
||||||
|
klass: The flags class the value belongs to.
|
||||||
|
If None, the class will be auto-guessed.
|
||||||
|
|
||||||
|
Return:
|
||||||
|
The keys associated with the flags as a '|' separated string if they
|
||||||
|
could be found. Hex values as a string if not.
|
||||||
|
"""
|
||||||
|
if klass is None:
|
||||||
|
# We have to store klass here because it will be lost when iterating
|
||||||
|
# over the bits.
|
||||||
|
klass = value.__class__
|
||||||
|
if klass == int:
|
||||||
|
raise TypeError("Can't guess enum class of an int!")
|
||||||
|
bits = []
|
||||||
|
names = []
|
||||||
|
mask = 0x01
|
||||||
|
value = int(value)
|
||||||
|
while mask < value:
|
||||||
|
if value & mask:
|
||||||
|
bits.append(mask)
|
||||||
|
mask <<= 1
|
||||||
|
for bit in bits:
|
||||||
|
# We have to re-convert to an enum type here or we'll sometimes get an
|
||||||
|
# empty string back.
|
||||||
|
names.append(qenum_key(base, klass(bit), add_base))
|
||||||
|
return '|'.join(names)
|
||||||
|
|
||||||
|
|
||||||
def signal_name(sig):
|
def signal_name(sig):
|
||||||
"""Get a cleaned up name of a signal.
|
"""Get a cleaned up name of a signal.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user