Split signal tests into gui and core tests
Can't use a QApplication and a QCoreApplication in the same process
This commit is contained in:
parent
359c973b42
commit
33c837a48d
7 changed files with 224 additions and 168 deletions
68
tests/signals/multiple_connections_gui_test.py
Normal file
68
tests/signals/multiple_connections_gui_test.py
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
import unittest
|
||||
import random
|
||||
from functools import partial
|
||||
|
||||
from PySide.QtCore import QObject, SIGNAL
|
||||
|
||||
try:
|
||||
from PySide.QtGui import QPushButton, QSpinBox
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
from helper import BasicPySlotCase, UsesQApplication
|
||||
from helper.decorators import requires
|
||||
|
||||
|
||||
def random_gen(count=100, largest=99, lowest=0):
|
||||
for i in range(count):
|
||||
yield random.randint(lowest, largest)
|
||||
|
||||
|
||||
class MultipleSignalConnections(unittest.TestCase):
|
||||
'''Base class for multiple signal connection testing'''
|
||||
|
||||
def run_many(self, sender, signal, emitter, receivers, args=None):
|
||||
"""Utility method to connect a list of receivers to a signal.
|
||||
sender - QObject that will emit the signal
|
||||
signal - string with the signal signature
|
||||
emitter - the callable that will trigger the signal
|
||||
receivers - list of BasicPySlotCase instances
|
||||
args - tuple with the arguments to be sent.
|
||||
"""
|
||||
|
||||
if args is None:
|
||||
args = tuple()
|
||||
|
||||
for rec in receivers:
|
||||
rec.setUp()
|
||||
QObject.connect(sender, SIGNAL(signal), rec.cb)
|
||||
rec.args = tuple(args)
|
||||
|
||||
emitter(*args)
|
||||
|
||||
for rec in receivers:
|
||||
self.assert_(rec.called)
|
||||
|
||||
|
||||
@requires('PySide.QtGui')
|
||||
class QtGuiMultipleSlots(UsesQApplication, MultipleSignalConnections):
|
||||
'''Multiple connections to QtGui signals'''
|
||||
|
||||
def testButtonClick(self):
|
||||
"""Multiple connections to QPushButton.clicked()"""
|
||||
sender = QPushButton('button')
|
||||
receivers = [BasicPySlotCase() for x in range(30)]
|
||||
self.run_many(sender, 'clicked()', sender.click, receivers)
|
||||
|
||||
def testSpinBoxValueChanged(self):
|
||||
"""Multiple connections to QSpinBox.valueChanged(int)"""
|
||||
for test in random_gen(10):
|
||||
sender = QSpinBox()
|
||||
#FIXME if number of receivers if higher than 50, segfaults
|
||||
receivers = [BasicPySlotCase() for x in range(10)]
|
||||
self.run_many(sender, 'valueChanged(int)', sender.setValue,
|
||||
receivers, (test,))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue