diff options
-rw-r--r-- | libpyside/signalmanager.cpp | 5 | ||||
-rw-r--r-- | tests/signals/pysignal_test.py | 56 |
2 files changed, 54 insertions, 7 deletions
diff --git a/libpyside/signalmanager.cpp b/libpyside/signalmanager.cpp index 3e5e3c07c..9cdcca1f6 100644 --- a/libpyside/signalmanager.cpp +++ b/libpyside/signalmanager.cpp @@ -59,7 +59,8 @@ struct PyObjectWrapper { PyObject* m_me; - PyObjectWrapper(PyObject* me) : m_me(me) {} + PyObjectWrapper(const PyObjectWrapper &other) : m_me(other.m_me) {} + PyObjectWrapper(PyObject* me) : m_me(me) { Py_INCREF(m_me); } PyObjectWrapper() : m_me(Py_None) {} operator PyObject*() const { return m_me; } }; @@ -310,7 +311,7 @@ bool SignalManager::emitSignal(QObject* source, const char* signal, PyObject* ar else return emitNormalSignal(source, signalIndex, signal, args, argTypes); } - qWarning() << "Signal" << signal << "not found, probably a typo or you are emitting a dynamic signal that has never been used in a connection until now."; + qDebug() << "Signal" << signal << "not found, probably a typo or you are emitting a dynamic signal that has never been used in a connection until now."; return false; } diff --git a/tests/signals/pysignal_test.py b/tests/signals/pysignal_test.py index 5d4b09feb..7bb89a04e 100644 --- a/tests/signals/pysignal_test.py +++ b/tests/signals/pysignal_test.py @@ -1,6 +1,6 @@ import unittest -from PySide.QtCore import QObject, SIGNAL, SLOT +from PySide.QtCore import QObject, SIGNAL, SLOT, Qt try: from PySide.QtGui import QSpinBox, QApplication, QWidget @@ -18,18 +18,64 @@ class Dummy(QObject): def callDummy(self): self.emit(SIGNAL("dummy(PyObject)"), "PyObject") + def callDummy2(self): + lst = [] + lst.append("item1") + lst.append("item2") + lst.append("item3") + self.emit(SIGNAL("dummy2(PyObject, PyObject)"), "PyObject0", lst) -class PyObjectType(unittest.TestCase): + +class PyObjectType(UsesQApplication): def mySlot(self, arg): self.assertEqual(arg, "PyObject") self.called = True + self.callCount += 1 - def testType(self): - self.called = False + def mySlot2(self, arg0, arg1): + self.assertEqual(arg0, "PyObject0") + self.assertEqual(arg1[0], "item1") + self.assertEqual(arg1[1], "item2") + self.assertEqual(arg1[2], "item3") + self.callCount += 1 + if self.running: + self.app.quit() + + def setUp(self): + super(PyObjectType, self).setUp() + self.callCount = 0 + self.running = False + + def testWithOneArg(self): o = Dummy() o.connect(SIGNAL("dummy(PyObject)"), self.mySlot) o.callDummy() - self.assert_(self.called) + self.assertEqual(self.callCount, 1) + + def testWithTwoArg(self): + o = Dummy() + o.connect(SIGNAL("dummy2(PyObject,PyObject)"), self.mySlot2) + o.callDummy2() + self.assertEqual(self.callCount, 1) + + def testAsyncSignal(self): + self.called = False + self.running = True + o = Dummy() + o.connect(SIGNAL("dummy2(PyObject,PyObject)"), self.mySlot2, Qt.QueuedConnection) + o.callDummy2() + self.app.exec_() + self.assertEqual(self.callCount, 1) + + def testTwice(self): + self.called = False + self.running = True + o = Dummy() + o.connect(SIGNAL("dummy2(PyObject,PyObject)"), self.mySlot2, Qt.QueuedConnection) + o.callDummy2() + o.callDummy2() + self.app.exec_() + self.assertEqual(self.callCount, 2) class PythonSigSlot(unittest.TestCase): def setUp(self): |