blob: e27ee1ed9c176bd6e34c1179644bc778404d5c32 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
'''Helper classes and functions'''
import os
import unittest
from random import randint
from PySide.QtCore import QCoreApplication, QTimer
try:
from PySide.QtGui import QApplication
except ImportError:
has_gui = False
else:
has_gui = True
def adjust_filename(filename, orig_mod_filename):
dirpath = os.path.dirname(os.path.abspath(orig_mod_filename))
return os.path.join(dirpath, filename)
class BasicPySlotCase(object):
'''Base class that tests python slots and signal emissions.
Python slots are defined as any callable passed to QObject.connect().
'''
def setUp(self):
self.called = False
def tearDown(self):
try:
del self.args
except:
pass
def cb(self, *args):
'''Simple callback with arbitrary arguments.
The test function must setup the 'args' attribute with a sequence
containing the arguments expected to be received by this slot.
Currently only a single connection is supported.
'''
if tuple(self.args) == args:
self.called = True
else:
raise ValueError('Invalid arguments for callback')
_instance = None
_timed_instance = None
if has_gui:
class UsesQApplication(unittest.TestCase):
'''Helper class to provide QApplication instances'''
qapplication = True
def setUp(self):
'''Creates the QApplication instance'''
# Simple way of making instance a singleton
super(UsesQApplication, self).setUp()
global _instance
if _instance is None:
_instance = QApplication([])
self.app = _instance
def tearDown(self):
'''Deletes the reference owned by self'''
del self.app
super(UsesQApplication, self).tearDown()
class TimedQApplication(unittest.TestCase):
'''Helper class with timed QApplication exec loop'''
def setUp(self, timeout=100):
'''Setups this Application.
timeout - timeout in milisseconds'''
global _timed_instance
if _timed_instance is None:
_timed_instance = QApplication([])
self.app = _timed_instance
QTimer.singleShot(timeout, self.app.quit)
def tearDown(self):
'''Delete resources'''
del self.app
_core_instance = None
class UsesQCoreApplication(unittest.TestCase):
'''Helper class for test cases that require an QCoreApplication
Just connect or call self.exit_app_cb. When called, will ask
self.app to exit.
'''
def setUp(self):
'''Set up resources'''
global _core_instance
if _core_instance is None:
_core_instance = QCoreApplication([])
self.app = _core_instance
def tearDown(self):
'''Release resources'''
del self.app
def exit_app_cb(self):
'''Quits the application'''
self.app.exit(0)
def random_string(size=5):
'''Generate random string with the given size'''
return ''.join(map(chr, [randint(33, 126) for x in range(size)]))
|