Merge utils.signals into utils.debug

This commit is contained in:
Florian Bruhin 2014-06-23 07:11:15 +02:00
parent 6aff5fd374
commit 5996651a2f
5 changed files with 66 additions and 115 deletions

View File

@ -23,7 +23,7 @@ from functools import partial
from PyQt5.QtCore import QObject from PyQt5.QtCore import QObject
from qutebrowser.utils.signals import dbg_signal from qutebrowser.utils.debug import dbg_signal
from qutebrowser.widgets.webview import WebView from qutebrowser.widgets.webview import WebView
from qutebrowser.utils.log import signals as logger from qutebrowser.utils.log import signals as logger

View File

@ -27,6 +27,14 @@ from PyQt5.QtWidgets import QStyle, QFrame
import qutebrowser.utils.debug as debug import qutebrowser.utils.debug as debug
class FakeSignal:
"""Fake pyqtSignal stub which uses a mock to see if it was called."""
def __init__(self, name='fake'):
self.signal = '2{}(int, int)'.format(name)
class QEnumKeyTests(TestCase): class QEnumKeyTests(TestCase):
"""Tests for qenum_key.""" """Tests for qenum_key."""
@ -45,5 +53,33 @@ class QEnumKeyTests(TestCase):
self.assertEqual(key, 'Sunken') self.assertEqual(key, 'Sunken')
class TestDebug(TestCase):
"""Test signal debug output functions."""
def setUp(self):
self.signal = FakeSignal()
def test_signal_name(self):
"""Test signal_name()."""
self.assertEqual(debug.signal_name(self.signal), 'fake')
def test_dbg_signal(self):
"""Test dbg_signal()."""
self.assertEqual(debug.dbg_signal(self.signal, [23, 42]),
'fake(23, 42)')
def test_dbg_signal_eliding(self):
"""Test eliding in dbg_signal()."""
self.assertEqual(debug.dbg_signal(self.signal,
[12345678901234567890123]),
'fake(1234567890123456789\u2026)')
def test_dbg_signal_newline(self):
"""Test dbg_signal() with a newline."""
self.assertEqual(debug.dbg_signal(self.signal, ['foo\nbar']),
'fake(foo bar)')
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -1,63 +0,0 @@
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et
# Copyright 2014 Florian Bruhin (The Compiler) <mail@qutebrowser.org>
#
# This file is part of qutebrowser.
#
# qutebrowser is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# qutebrowser is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
# pylint: disable=missing-docstring
"""Tests for signal utils."""
import unittest
from unittest import TestCase
import qutebrowser.utils.signals as sigutils
class FakeSignal:
"""Fake pyqtSignal stub which uses a mock to see if it was called."""
def __init__(self, name='fake'):
self.signal = '2{}(int, int)'.format(name)
class TestDebug(TestCase):
"""Test signal debug output functions."""
def setUp(self):
self.signal = FakeSignal()
def test_signal_name(self):
self.assertEqual(sigutils.signal_name(self.signal), 'fake')
def test_dbg_signal(self):
self.assertEqual(sigutils.dbg_signal(self.signal, [23, 42]),
'fake(23, 42)')
def test_dbg_signal_eliding(self):
self.assertEqual(sigutils.dbg_signal(self.signal,
[12345678901234567890123]),
'fake(1234567890123456789\u2026)')
def test_dbg_signal_newline(self):
self.assertEqual(sigutils.dbg_signal(self.signal, ['foo\nbar']),
'fake(foo bar)')
if __name__ == '__main__':
unittest.main()

View File

@ -19,12 +19,14 @@
"""Utilities used for debugging.""" """Utilities used for debugging."""
import re
import sys import sys
import types import types
from functools import wraps from functools import wraps
from PyQt5.QtCore import pyqtRemoveInputHook, QEvent, QCoreApplication from PyQt5.QtCore import pyqtRemoveInputHook, QEvent, QCoreApplication
from qutebrowser.utils.misc import elide
from qutebrowser.utils.log import misc as logger from qutebrowser.utils.log import misc as logger
@ -146,3 +148,30 @@ def qenum_key(base, value):
if isinstance(obj, klass) and obj == value: if isinstance(obj, klass) and obj == value:
return name return name
return None return None
def signal_name(sig):
"""Get a cleaned up name of a signal.
Args:
sig: The pyqtSignal
Return:
The cleaned up signal name.
"""
m = re.match(r'[0-9]+(.*)\(.*\)', sig.signal)
return m.group(1)
def dbg_signal(sig, args):
"""Get a string representation of a signal for debugging.
Args:
sig: A pyqtSignal.
args: The arguments as list of strings.
Return:
A human-readable string representation of signal/args.
"""
argstr = ', '.join([elide(str(a).replace('\n', ' '), 20) for a in args])
return '{}({})'.format(signal_name(sig), argstr)

View File

@ -1,51 +0,0 @@
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
# Copyright 2014 Florian Bruhin (The Compiler) <mail@qutebrowser.org>
#
# This file is part of qutebrowser.
#
# qutebrowser is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# qutebrowser is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
"""Utilities regarding signals."""
import re
from qutebrowser.utils.misc import elide
def signal_name(sig):
"""Get a cleaned up name of a signal.
Args:
sig: The pyqtSignal
Return:
The cleaned up signal name.
"""
m = re.match(r'[0-9]+(.*)\(.*\)', sig.signal)
return m.group(1)
def dbg_signal(sig, args):
"""Get a string representation of a signal for debugging.
Args:
sig: A pyqtSignal.
args: The arguments as list of strings.
Return:
A human-readable string representation of signal/args.
"""
argstr = ', '.join([elide(str(a).replace('\n', ' '), 20) for a in args])
return '{}({})'.format(signal_name(sig), argstr)