1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 """Base classes for the GUI tests."""
25
26
27 from math import pi
28 from os import sep
29 import Queue
30 from shutil import rmtree
31 from tempfile import mktemp, mkdtemp
32 from unittest import TestCase
33 import wx
34
35
36 import dep_check
37
38
39 from data import Relax_data_store; ds = Relax_data_store()
40 from data.gui import Gui
41 from generic_fns.reset import reset
42 from prompt.interpreter import exec_script
43 from relax_errors import RelaxError
44 from relax_io import delete
45 from status import Status; status = Status()
46 from user_functions.data import Uf_info; uf_info = Uf_info()
47
48
49 from gui.interpreter import Interpreter; interpreter = Interpreter()
50 from gui.wizard import Wiz_window
51 from gui.uf_objects import Uf_storage; uf_store = Uf_storage()
52
53
55 """The GUI test base class."""
56
58 """Set up the test case class for the system tests."""
59
60
61 super(GuiTestCase, self).__init__(methodName)
62
63
64 self._skip_type = 'gui'
65
66
67 self.app = wx.GetApp()
68
69
70 self._gui_launch = False
71 if self.app != None:
72 self._gui_launch = True
73
74
76 """Execute the given user function.
77
78 @keyword uf_name: The name of the user function.
79 @type uf_name: str
80 """
81
82
83 if 'uf_name' not in kargs:
84 raise RelaxError("The user function name argument 'uf_name' has not been supplied.")
85
86
87 uf_name = kargs.pop('uf_name')
88
89
90 uf_data = uf_info.get_uf(uf_name)
91
92
93 for i in range(len(args)):
94
95 name = uf_data.kargs[i]['name']
96
97
98 if name in kargs:
99 raise RelaxError("The argument '%s' clashes with the %s keyword argument of '%s'." % (arg[i], name, kargs[name]))
100
101
102 kargs[name] = args[i]
103
104
105 for i in range(len(uf_data.kargs)):
106
107 arg = uf_data.kargs[i]
108
109
110 if arg['name'] in kargs:
111 continue
112
113
114 kargs[arg['name']] = arg['default']
115
116
117 for i in range(len(uf_data.kargs)):
118
119 arg = uf_data.kargs[i]
120
121
122 if arg['arg_type'] == 'dir' and arg['name'] in kargs:
123
124 for j in range(len(uf_data.kargs)):
125 if uf_data.kargs[j]['arg_type'] == 'file sel':
126 file_sel_name = uf_data.kargs[j]['name']
127
128
129 if file_sel_name in kargs and kargs[arg['name']]:
130 kargs[file_sel_name] = kargs[arg['name']] + sep + kargs[file_sel_name]
131
132
133 kargs.pop(arg['name'])
134
135
136 uf = uf_store[uf_name]
137
138
139 status.gui_uf_force_sync = True
140
141
142 uf(**kargs)
143
144
145 uf.wizard._ok()
146
147
148 status.gui_uf_force_sync = False
149
150
152 """Check that no exception has occurred."""
153
154
155 try:
156
157 index, exc = status.exception_queue.get(block=False)
158
159
160 self.fail()
161
162
163 except Queue.Empty:
164 pass
165
166
168 """Execute a GUI script within the GUI test framework.
169
170 @param script: The full path of the script to execute.
171 @type script: str
172 """
173
174
175 space = locals()
176
177
178 space.update({'pi': pi})
179
180
181 exec_script(script, space)
182
183
185 """Set up for all the functional tests."""
186
187
188 ds.tmpfile = mktemp()
189
190
191 ds.tmpdir = mkdtemp()
192
193
194 if not self._gui_launch:
195 self.app = wx.App(redirect=False)
196
197
198 if dep_check.wx_module:
199 from gui.relax_gui import Main
200
201
202 self.app.gui = Main(parent=None, id=-1, title="")
203
204
206 """Default tearDown operation - delete temp directories and files and reset relax."""
207
208
209 wx.Yield()
210
211
212 if hasattr(ds, 'tmpdir'):
213
214 rmtree(ds.tmpdir)
215
216
217 del ds.tmpdir
218
219
220 if hasattr(self, 'tmpdir'):
221
222 rmtree(self.tmpdir)
223
224
225 del self.tmpdir
226
227
228 if hasattr(ds, 'tmpfile'):
229
230 delete(ds.tmpfile, fail=False)
231
232
233 del ds.tmpfile
234
235
236 if hasattr(self, 'tmpfile'):
237
238 delete(self.tmpfile, fail=False)
239
240
241 del self.tmpfile
242
243
244 self.app.gui.analysis.delete_all()
245
246
247 reset()
248
249
250 status._setup_observers()
251
252
253 windows = ['pipe_editor', 'relax_prompt', 'results_viewer', 'spin_viewer']
254 for window in windows:
255 if hasattr(self.app.gui, window):
256
257 win_obj = getattr(self.app.gui, window)
258
259
260 win_obj.Destroy()
261
262
263 delattr(self.app.gui, window)
264
265
266 wx.Yield()
267