aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libpyside/signalmanager.cpp5
-rw-r--r--tests/signals/pysignal_test.py56
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):