1 | import sys |
---|
2 | import unittest |
---|
3 | |
---|
4 | from PyQt4 import QtGui |
---|
5 | from PyQt4 import QtTest |
---|
6 | from PyQt4 import QtCore |
---|
7 | from mock import MagicMock |
---|
8 | |
---|
9 | # set up import paths |
---|
10 | import sas.qtgui.path_prepare |
---|
11 | |
---|
12 | # Local |
---|
13 | from sas.qtgui.GuiUtils import * |
---|
14 | from sas.qtgui.Perspectives.Fitting.FittingWidget import * |
---|
15 | #from sas.qtgui.Perspectives.Fitting.FittingWidget import FittingWidget |
---|
16 | from sas.sasgui.guiframe.dataFitting import Data1D |
---|
17 | |
---|
18 | app = QtGui.QApplication(sys.argv) |
---|
19 | |
---|
20 | class dummy_manager(object): |
---|
21 | def communicate(self): |
---|
22 | return Communicate() |
---|
23 | |
---|
24 | class FittingWidgetTest(unittest.TestCase): |
---|
25 | """Test the fitting widget GUI""" |
---|
26 | |
---|
27 | def setUp(self): |
---|
28 | """Create the GUI""" |
---|
29 | self.widget = FittingWidget(dummy_manager()) |
---|
30 | |
---|
31 | def tearDown(self): |
---|
32 | """Destroy the GUI""" |
---|
33 | self.widget.close() |
---|
34 | self.widget = None |
---|
35 | |
---|
36 | def testDefaults(self): |
---|
37 | """Test the GUI in its default state""" |
---|
38 | self.assertIsInstance(self.widget, QtGui.QWidget) |
---|
39 | self.assertEqual(self.widget.windowTitle(), "Fitting") |
---|
40 | self.assertEqual(self.widget.sizePolicy().Policy(), QtGui.QSizePolicy.Fixed) |
---|
41 | self.assertIsInstance(self.widget.lstParams.model(), QtGui.QStandardItemModel) |
---|
42 | self.assertIsInstance(self.widget.lstPoly.model(), QtGui.QStandardItemModel) |
---|
43 | self.assertIsInstance(self.widget.lstMagnetic.model(), QtGui.QStandardItemModel) |
---|
44 | self.assertFalse(self.widget.cbModel.isEnabled()) |
---|
45 | self.assertFalse(self.widget.cbStructureFactor.isEnabled()) |
---|
46 | self.assertFalse(self.widget.cmdFit.isEnabled()) |
---|
47 | self.assertTrue(self.widget.acceptsData()) |
---|
48 | self.assertFalse(self.widget.data_is_loaded) |
---|
49 | |
---|
50 | def testSelectCategory(self): |
---|
51 | """ |
---|
52 | Test if model categories have been loaded properly |
---|
53 | """ |
---|
54 | fittingWindow = self.widget |
---|
55 | |
---|
56 | #Test loading from json categories |
---|
57 | category_list = fittingWindow.master_category_dict.keys() |
---|
58 | |
---|
59 | for category in category_list: |
---|
60 | self.assertNotEqual(fittingWindow.cbCategory.findText(category),-1) |
---|
61 | |
---|
62 | #Test what is current text in the combobox |
---|
63 | self.assertEqual(fittingWindow.cbCategory.currentText(), CATEGORY_DEFAULT) |
---|
64 | |
---|
65 | def testWidgetWithData(self): |
---|
66 | """ |
---|
67 | Test the instantiation of the widget with initial data |
---|
68 | """ |
---|
69 | data = Data1D(x=[1,2], y=[1,2]) |
---|
70 | GuiUtils.dataFromItem = MagicMock(return_value=data) |
---|
71 | item = QtGui.QStandardItem("test") |
---|
72 | |
---|
73 | widget_with_data = FittingWidget(dummy_manager(), data=[data], id=3) |
---|
74 | |
---|
75 | self.assertEqual(widget_with_data.data, data) |
---|
76 | self.assertTrue(widget_with_data.data_is_loaded) |
---|
77 | self.assertTrue(widget_with_data.cmdFit.isEnabled()) |
---|
78 | self.assertFalse(widget_with_data.acceptsData()) |
---|
79 | |
---|
80 | def notestSelectModel(self): |
---|
81 | """ |
---|
82 | Test if models have been loaded properly |
---|
83 | :return: |
---|
84 | """ |
---|
85 | fittingWindow = self.widget |
---|
86 | |
---|
87 | #Test loading from json categories |
---|
88 | model_list = fittingWindow.master_category_dict["Cylinder"] |
---|
89 | self.assertTrue(['cylinder', True] in model_list) |
---|
90 | self.assertTrue(['core_shell_cylinder', True] in model_list) |
---|
91 | self.assertTrue(['barbell', True] in model_list) |
---|
92 | self.assertTrue(['core_shell_bicelle', True] in model_list) |
---|
93 | self.assertTrue(['flexible_cylinder', True] in model_list) |
---|
94 | self.assertTrue(['flexible_cylinder_elliptical', True] in model_list) |
---|
95 | self.assertTrue(['pearl_necklace', True] in model_list) |
---|
96 | self.assertTrue(['capped_cylinder', True] in model_list) |
---|
97 | self.assertTrue(['elliptical_cylinder', True] in model_list) |
---|
98 | self.assertTrue(['pringle', True] in model_list) |
---|
99 | self.assertTrue(['hollow_cylinder', True] in model_list) |
---|
100 | self.assertTrue(['core_shell_bicelle_elliptical', True] in model_list) |
---|
101 | self.assertTrue(['stacked_disks', True] in model_list) |
---|
102 | |
---|
103 | #Test for existence in combobox |
---|
104 | self.assertNotEqual(fittingWindow.cbModel.findText("cylinder"),-1) |
---|
105 | self.assertNotEqual(fittingWindow.cbModel.findText("core_shell_cylinder"),-1) |
---|
106 | self.assertNotEqual(fittingWindow.cbModel.findText("barbell"),-1) |
---|
107 | self.assertNotEqual(fittingWindow.cbModel.findText("core_shell_bicelle"),-1) |
---|
108 | self.assertNotEqual(fittingWindow.cbModel.findText("flexible_cylinder"),-1) |
---|
109 | self.assertNotEqual(fittingWindow.cbModel.findText("flexible_cylinder_elliptical"),-1) |
---|
110 | self.assertNotEqual(fittingWindow.cbModel.findText("pearl_necklace"),-1) |
---|
111 | self.assertNotEqual(fittingWindow.cbModel.findText("capped_cylinder"),-1) |
---|
112 | self.assertNotEqual(fittingWindow.cbModel.findText("elliptical_cylinder"),-1) |
---|
113 | self.assertNotEqual(fittingWindow.cbModel.findText("pringle"),-1) |
---|
114 | self.assertNotEqual(fittingWindow.cbModel.findText("hollow_cylinder"),-1) |
---|
115 | self.assertNotEqual(fittingWindow.cbModel.findText("core_shell_bicelle_elliptical"),-1) |
---|
116 | self.assertNotEqual(fittingWindow.cbModel.findText("stacked_disks"),-1) |
---|
117 | |
---|
118 | |
---|
119 | def testSelectPolydispersity(self): |
---|
120 | """ |
---|
121 | Test if models have been loaded properly |
---|
122 | :return: |
---|
123 | """ |
---|
124 | fittingWindow = self.widget |
---|
125 | |
---|
126 | #Test loading from json categories |
---|
127 | fittingWindow.setModelModel("cylinder") |
---|
128 | pd_index = fittingWindow.lstPoly.model().index(0,0) |
---|
129 | self.assertEqual(str(pd_index.data().toString()), "Distribution of radius") |
---|
130 | pd_index = fittingWindow.lstPoly.model().index(1,0) |
---|
131 | self.assertEqual(str(pd_index.data().toString()), "Distribution of length") |
---|
132 | |
---|
133 | def testSelectStructureFactor(self): |
---|
134 | """ |
---|
135 | Test if structure factors have been loaded properly |
---|
136 | :return: |
---|
137 | """ |
---|
138 | fittingWindow = self.widget |
---|
139 | |
---|
140 | #Test for existence in combobox |
---|
141 | self.assertNotEqual(fittingWindow.cbStructureFactor.findText("stickyhardsphere"),-1) |
---|
142 | self.assertNotEqual(fittingWindow.cbStructureFactor.findText("hayter_msa"),-1) |
---|
143 | self.assertNotEqual(fittingWindow.cbStructureFactor.findText("squarewell"),-1) |
---|
144 | self.assertNotEqual(fittingWindow.cbStructureFactor.findText("hardsphere"),-1) |
---|
145 | |
---|
146 | #Test what is current text in the combobox |
---|
147 | self.assertTrue(fittingWindow.cbCategory.currentText(), "None") |
---|
148 | |
---|
149 | def testSignals(self): |
---|
150 | """ |
---|
151 | Test the widget exmitted signals |
---|
152 | """ |
---|
153 | pass |
---|
154 | |
---|
155 | def testSelectCategory(self): |
---|
156 | """ |
---|
157 | Assure proper behaviour on changing category |
---|
158 | """ |
---|
159 | pass |
---|
160 | |
---|
161 | def testSelectModel(self): |
---|
162 | """ |
---|
163 | Assure proper behaviour on changing model |
---|
164 | """ |
---|
165 | pass |
---|
166 | |
---|
167 | def testSelectFactor(self): |
---|
168 | """ |
---|
169 | Assure proper behaviour on changing structure factor |
---|
170 | """ |
---|
171 | pass |
---|
172 | |
---|
173 | def testReadCategoryInfo(self): |
---|
174 | """ |
---|
175 | Check the category file reader |
---|
176 | """ |
---|
177 | pass |
---|
178 | |
---|
179 | def testGetIterParams(self): |
---|
180 | """ |
---|
181 | Assure the right multishell parameters are returned |
---|
182 | """ |
---|
183 | pass |
---|
184 | |
---|
185 | def testGetMultiplicity(self): |
---|
186 | """ |
---|
187 | Assure more multishell parameters are evaluated correctly |
---|
188 | """ |
---|
189 | pass |
---|
190 | |
---|
191 | def testAddCheckedListToModel(self): |
---|
192 | """ |
---|
193 | Test for utility function |
---|
194 | """ |
---|
195 | pass |
---|
196 | |
---|
197 | def testUpdateParamsFromModel(self): |
---|
198 | """ |
---|
199 | Checks the sasmodel parameter update from QModel items |
---|
200 | """ |
---|
201 | pass |
---|
202 | |
---|
203 | def testComputeDataRange(self): |
---|
204 | """ |
---|
205 | Tests the data range calculator on Data1D/Data2D |
---|
206 | """ |
---|
207 | pass |
---|
208 | |
---|
209 | def testAddParametersToModel(self): |
---|
210 | """ |
---|
211 | Checks the QModel update from Sasmodel parameters |
---|
212 | """ |
---|
213 | pass |
---|
214 | |
---|
215 | def testAddSimpleParametersToModel(self): |
---|
216 | """ |
---|
217 | Checks the QModel update from Sasmodel parameters - no polydisp |
---|
218 | """ |
---|
219 | pass |
---|
220 | |
---|
221 | def testCreateDefault1dData(self): |
---|
222 | """ |
---|
223 | Tests the default 1D set |
---|
224 | """ |
---|
225 | pass |
---|
226 | |
---|
227 | def testCreateDefault2dData(self): |
---|
228 | """ |
---|
229 | Tests the default 2D set |
---|
230 | """ |
---|
231 | pass |
---|
232 | |
---|
233 | def testCreateTheoryIndex(self): |
---|
234 | """ |
---|
235 | Test the data->QIndex conversion |
---|
236 | """ |
---|
237 | pass |
---|
238 | |
---|
239 | def testCalculate1DForModel(self): |
---|
240 | """ |
---|
241 | Check that the fitting 1D data object is ready |
---|
242 | """ |
---|
243 | pass |
---|
244 | |
---|
245 | def testCalculate2DForModel(self): |
---|
246 | """ |
---|
247 | Check that the fitting 2D data object is ready |
---|
248 | """ |
---|
249 | pass |
---|
250 | |
---|
251 | def testComplete1D(self): |
---|
252 | """ |
---|
253 | Check that a new 1D plot is generated |
---|
254 | """ |
---|
255 | pass |
---|
256 | |
---|
257 | def testComplete2D(self): |
---|
258 | """ |
---|
259 | Check that a new 2D plot is generated |
---|
260 | """ |
---|
261 | pass |
---|
262 | |
---|
263 | def testReplaceShellName(self): |
---|
264 | """ |
---|
265 | Test the utility function for string manipulation |
---|
266 | """ |
---|
267 | pass |
---|
268 | |
---|
269 | def testSetPolyModel(self): |
---|
270 | """ |
---|
271 | Test the polydispersity model setup |
---|
272 | """ |
---|
273 | pass |
---|
274 | |
---|
275 | def testSetMagneticModel(self): |
---|
276 | """ |
---|
277 | Test the magnetic model setup |
---|
278 | """ |
---|
279 | pass |
---|
280 | |
---|
281 | def testAddExtraShells(self): |
---|
282 | """ |
---|
283 | Test how the extra shells are presented |
---|
284 | """ |
---|
285 | pass |
---|
286 | |
---|
287 | def testModifyShellsInList(self): |
---|
288 | """ |
---|
289 | Test the additional rows added by modifying the shells combobox |
---|
290 | """ |
---|
291 | pass |
---|
292 | |
---|
293 | |
---|
294 | if __name__ == "__main__": |
---|
295 | unittest.main() |
---|