Changes in src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py [66d4370:3fbd77b] in sasview
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py
r66d4370 r3fbd77b 18 18 from sas.qtgui.Perspectives.Fitting.FittingWidget import * 19 19 from sas.qtgui.Perspectives.Fitting.Constraint import Constraint 20 import sas.qtgui.Utilities.LocalConfig 20 21 21 from sas.qtgui.UnitTesting.TestUtils import QtSignalSpy 22 from sas.qtgui.Perspectives.Fitting.ModelThread import Calc1D23 from sas.qtgui.Perspectives.Fitting.ModelThread import Calc2D24 22 25 23 from sas.qtgui.Plotting.PlotterData import Data1D … … 256 254 self.widget.cbStructureFactor.setCurrentIndex(structure_index) 257 255 258 # We have 4 more rows now256 # We have 3 more param rows now (radius_effective is removed), and a new heading 259 257 self.assertEqual(self.widget._model_model.rowCount(), rowcount+4) 260 258 … … 262 260 self.widget.cbModel.setCurrentIndex(0) 263 261 264 # Observe factor doesn'treset to None265 self.assertEqual(self.widget.cbStructureFactor.currentText(), 'squarewell')262 # Observe factor reset to None 263 self.assertEqual(self.widget.cbStructureFactor.currentText(), STRUCTURE_DEFAULT) 266 264 267 265 # Switch category to structure factor … … 276 274 last_index = self.widget.cbStructureFactor.count() 277 275 self.widget.cbStructureFactor.setCurrentIndex(last_index-1) 278 # Do we have all the rows ?279 self.assertEqual(self.widget._model_model.rowCount(), 4)276 # Do we have all the rows (incl. radius_effective & heading row)? 277 self.assertEqual(self.widget._model_model.rowCount(), 5) 280 278 281 279 # Are the command buttons properly enabled? … … 321 319 Check that the fitting 1D data object is ready 322 320 """ 323 324 if LocalConfig.USING_TWISTED: 325 # Mock the thread creation 326 threads.deferToThread = MagicMock() 327 # Model for theory 328 self.widget.SASModelToQModel("cylinder") 329 # Call the tested method 330 self.widget.calculateQGridForModel() 331 time.sleep(1) 332 # Test the mock 333 self.assertTrue(threads.deferToThread.called) 334 self.assertEqual(threads.deferToThread.call_args_list[0][0][0].__name__, "compute") 335 else: 336 Calc2D.queue = MagicMock() 337 # Model for theory 338 self.widget.SASModelToQModel("cylinder") 339 # Call the tested method 340 self.widget.calculateQGridForModel() 341 time.sleep(1) 342 # Test the mock 343 self.assertTrue(Calc2D.queue.called) 321 # Mock the thread creation 322 threads.deferToThread = MagicMock() 323 # Model for theory 324 self.widget.SASModelToQModel("cylinder") 325 # Call the tested method 326 self.widget.calculateQGridForModel() 327 time.sleep(1) 328 # Test the mock 329 self.assertTrue(threads.deferToThread.called) 330 self.assertEqual(threads.deferToThread.call_args_list[0][0][0].__name__, "compute") 344 331 345 332 def testCalculateResiduals(self): … … 430 417 index = self.widget._poly_model.index(0,0) 431 418 419 #self.widget.show() 420 #QtWidgets.QApplication(sys.argv).exec_() 421 432 422 # Set the checbox 433 423 self.widget._poly_model.item(0,0).setCheckState(2) … … 445 435 self.assertEqual(self.widget.kernel_module.details['radius_bell'][1], 1.0) 446 436 447 #self.widget.show()448 #QtWidgets.QApplication.exec_()449 450 437 # Change the number of points 451 self.assertEqual(self.widget. poly_params['radius_bell.npts'], 35)438 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.npts'), 35) 452 439 self.widget._poly_model.item(0,4).setText("22") 453 self.assertEqual(self.widget. poly_params['radius_bell.npts'], 22)440 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.npts'), 22) 454 441 # try something stupid 455 442 self.widget._poly_model.item(0,4).setText("butt") 456 443 # see that this didn't annoy the control at all 457 self.assertEqual(self.widget. poly_params['radius_bell.npts'], 22)444 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.npts'), 22) 458 445 459 446 # Change the number of sigmas 460 self.assertEqual(self.widget. poly_params['radius_bell.nsigmas'], 3)447 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.nsigmas'), 3) 461 448 self.widget._poly_model.item(0,5).setText("222") 462 self.assertEqual(self.widget. poly_params['radius_bell.nsigmas'], 222)449 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.nsigmas'), 222) 463 450 # try something stupid again 464 451 self.widget._poly_model.item(0,4).setText("beer") 465 452 # no efect 466 self.assertEqual(self.widget. poly_params['radius_bell.nsigmas'], 222)453 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.nsigmas'), 222) 467 454 468 455 def testOnPolyComboIndexChange(self): … … 485 472 self.widget.onPolyComboIndexChange('rectangle', 0) 486 473 # check values 487 self.assertEqual(self.widget. poly_params['radius_bell.npts'], 35)488 self.assertAlmostEqual(self.widget. poly_params['radius_bell.nsigmas'], 1.73205, 5)474 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.npts'), 35) 475 self.assertAlmostEqual(self.widget.kernel_module.getParam('radius_bell.nsigmas'), 1.73205, 5) 489 476 # Change the index 490 477 self.widget.onPolyComboIndexChange('lognormal', 0) 491 478 # check values 492 self.assertEqual(self.widget. poly_params['radius_bell.npts'], 80)493 self.assertEqual(self.widget. poly_params['radius_bell.nsigmas'], 8)479 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.npts'), 80) 480 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.nsigmas'), 8) 494 481 # Change the index 495 482 self.widget.onPolyComboIndexChange('schulz', 0) 496 483 # check values 497 self.assertEqual(self.widget. poly_params['radius_bell.npts'], 80)498 self.assertEqual(self.widget. poly_params['radius_bell.nsigmas'], 8)484 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.npts'), 80) 485 self.assertEqual(self.widget.kernel_module.getParam('radius_bell.nsigmas'), 8) 499 486 500 487 # mock up file load … … 509 496 Test opening of the load file dialog for 'array' polydisp. function 510 497 """ 498 499 # open a non-existent file 511 500 filename = os.path.join("UnitTesting", "testdata_noexist.txt") 501 with self.assertRaises(OSError, msg="testdata_noexist.txt should be a non-existent file"): 502 os.stat(filename) 512 503 QtWidgets.QFileDialog.getOpenFileName = MagicMock(return_value=(filename,'')) 513 504 self.widget.show() … … 525 516 526 517 # good file 518 # TODO: this depends on the working directory being src/sas/qtgui, 519 # TODO: which isn't convenient if you want to run this test suite 520 # TODO: individually 527 521 filename = os.path.join("UnitTesting", "testdata.txt") 522 try: 523 os.stat(filename) 524 except OSError: 525 self.assertTrue(False, "testdata.txt does not exist") 528 526 QtWidgets.QFileDialog.getOpenFileName = MagicMock(return_value=(filename,'')) 529 527 … … 591 589 592 590 # Assure we have the combobox available 593 last_row = self.widget._last_model_row594 func_index = self.widget._model_model.index( last_row-1, 1)591 cbox_row = self.widget._n_shells_row 592 func_index = self.widget._model_model.index(cbox_row, 1) 595 593 self.assertIsInstance(self.widget.lstParams.indexWidget(func_index), QtWidgets.QComboBox) 594 595 # get number of rows before changing shell count 596 last_row = self.widget._model_model.rowCount() 596 597 597 598 # Change the combo box index … … 650 651 self.assertEqual(self.widget.cmdPlot.text(), 'Show Plot') 651 652 653 self.widget.show() 654 652 655 # Set data 653 656 test_data = Data1D(x=[1,2], y=[1,2]) 654 item = QtGui.QStandardItem() 655 updateModelItem(item, test_data, "test") 657 656 658 # Force same data into logic 657 self.widget.data = item 659 self.widget.logic.data = test_data 660 self.widget.data_is_loaded = True 658 661 659 662 # Change the category index so we have a model available … … 701 704 self.widget.close() 702 705 703 def testOnEmptyFit2(self):704 706 test_data = Data2D(image=[1.0, 2.0, 3.0], 705 707 err_image=[0.01, 0.02, 0.03], … … 712 714 item = QtGui.QStandardItem() 713 715 updateModelItem(item, test_data, "test") 714 715 716 # Force same data into logic 716 717 self.widget.data = item … … 730 731 self.widget.close() 731 732 732 def notestOnFit1D(self): 733 734 def testOnFit1D(self): 733 735 """ 734 736 Test the threaded fitting call … … 768 770 self.widget.close() 769 771 770 def notestOnFit2D(self):772 def testOnFit2D(self): 771 773 """ 772 774 Test the threaded fitting call … … 863 865 # Set data 864 866 test_data = Data1D(x=[1,2], y=[1,2]) 865 item = QtGui.QStandardItem() 866 updateModelItem(item, test_data, "test") 867 867 868 # Force same data into logic 868 self.widget.data = item 869 870 # Force same data into logic 869 self.widget.logic.data = test_data 870 self.widget.data_is_loaded = True 871 871 category_index = self.widget.cbCategory.findText('Sphere') 872 873 872 self.widget.cbCategory.setCurrentIndex(category_index) 874 873 self.widget.main_params_to_fit = ['scale'] … … 952 951 # Set data 953 952 test_data = Data1D(x=[1,2], y=[1,2]) 954 item = QtGui.QStandardItem() 955 updateModelItem(item, test_data, "test") 953 956 954 # Force same data into logic 957 self.widget.data = item 955 self.widget.logic.data = test_data 956 self.widget.data_is_loaded = True 958 957 category_index = self.widget.cbCategory.findText("Sphere") 959 958 self.widget.cbCategory.setCurrentIndex(category_index) … … 977 976 # Set data 978 977 test_data = Data1D(x=[1,2], y=[1,2]) 979 item = QtGui.QStandardItem() 980 updateModelItem(item, test_data, "test") 978 981 979 # Force same data into logic 982 self.widget.data = item 980 self.widget.logic.data = test_data 981 self.widget.data_is_loaded = True 983 982 category_index = self.widget.cbCategory.findText("Sphere") 984 983 … … 1027 1026 1028 1027 # Check the model 1029 self.assertEqual(self.widget._model_model.rowCount(), 6)1028 self.assertEqual(self.widget._model_model.rowCount(), 7) 1030 1029 self.assertEqual(self.widget._model_model.columnCount(), 5) 1031 1030 … … 1143 1142 # two rows selected 1144 1143 index1 = self.widget.lstParams.model().index(1, 0, QtCore.QModelIndex()) 1145 index2 = self.widget.lstParams.model().index( 2, 0, QtCore.QModelIndex())1144 index2 = self.widget.lstParams.model().index(3, 0, QtCore.QModelIndex()) 1146 1145 selection_model = self.widget.lstParams.selectionModel() 1147 1146 selection_model.select(index1, selection_model.Select | selection_model.Rows) … … 1179 1178 # several random parameters 1180 1179 self.assertEqual(self.widget.getRowFromName('scale'), 0) 1181 self.assertEqual(self.widget.getRowFromName('length'), 5)1180 self.assertEqual(self.widget.getRowFromName('length'), 6) 1182 1181 1183 1182 def testGetParamNames(self): … … 1216 1215 # Create a constraint object 1217 1216 const = Constraint(parent=None, value=7.0) 1218 row = 21217 row = 3 1219 1218 1220 1219 spy = QtSignalSpy(self.widget, self.widget.constraintAddedSignal) … … 1235 1234 # assign complex constraint now 1236 1235 const = Constraint(parent=None, param='radius', func='5*sld') 1237 row = 41236 row = 5 1238 1237 # call the method tested 1239 1238 self.widget.addConstraintToRow(constraint=const, row=row) … … 1294 1293 self.widget.cbModel.setCurrentIndex(model_index) 1295 1294 1295 row1 = 1 1296 row2 = 5 1297 1298 param1 = "background" 1299 param2 = "radius" 1300 1301 #default_value1 = "0.001" 1302 default_value2 = "20" 1303 1296 1304 # select two rows 1297 row1 = 11298 row2 = 41299 1305 index1 = self.widget.lstParams.model().index(row1, 0, QtCore.QModelIndex()) 1300 1306 index2 = self.widget.lstParams.model().index(row2, 0, QtCore.QModelIndex()) … … 1313 1319 1314 1320 # delete one of the constraints 1315 self.widget.deleteConstraintOnParameter(param= 'background')1321 self.widget.deleteConstraintOnParameter(param=param1) 1316 1322 1317 1323 # see that the other constraint is still present 1318 cons = self.widget.getConstraintForRow( 4) # 4 = radius1319 self.assertEqual(cons.param, "radius")1320 self.assertEqual(cons.value, "20")1324 cons = self.widget.getConstraintForRow(row2) 1325 self.assertEqual(cons.param, param2) 1326 self.assertEqual(cons.value, default_value2) 1321 1327 1322 1328 # kill the other constraint … … 1324 1330 1325 1331 # see that the other constraint is still present 1326 self.assertEqual(self.widget.getConstraintsForModel(), [( 'radius', None)])1332 self.assertEqual(self.widget.getConstraintsForModel(), [(param2, None)]) 1327 1333 1328 1334 def testGetConstraintForRow(self): … … 1344 1350 self.widget.cbModel.setCurrentIndex(model_index) 1345 1351 1352 row1 = 1 1353 row2 = 5 1354 1346 1355 # select two rows 1347 row1 = 11348 row2 = 41349 1356 index1 = self.widget.lstParams.model().index(row1, 0, QtCore.QModelIndex()) 1350 1357 index2 = self.widget.lstParams.model().index(row2, 0, QtCore.QModelIndex()) … … 1356 1363 self.widget.addSimpleConstraint() 1357 1364 1358 con_list = [False, True, False, False, True, False]1365 con_list = [False, True, False, False, False, True, False] 1359 1366 new_list = [] 1360 1367 for row in range(self.widget._model_model.rowCount()): … … 1374 1381 self.widget.cbModel.setCurrentIndex(model_index) 1375 1382 1383 row1 = 1 1384 row2 = 5 1385 1376 1386 # select two rows 1377 row1 = 11378 row2 = 41379 1387 index1 = self.widget.lstParams.model().index(row1, 0, QtCore.QModelIndex()) 1380 1388 index2 = self.widget.lstParams.model().index(row2, 0, QtCore.QModelIndex()) … … 1390 1398 constraint_objects[0].active = False 1391 1399 1392 con_list = [False, False, False, False, True, False]1400 con_list = [False, False, False, False, False, True, False] 1393 1401 new_list = [] 1394 1402 for row in range(self.widget._model_model.rowCount()): … … 1411 1419 self.assertEqual(self.widget.getConstraintsForModel(),[]) 1412 1420 1421 row1 = 1 1422 row2 = 5 1423 1424 param1 = "background" 1425 param2 = "radius" 1426 1427 default_value1 = "0.001" 1428 default_value2 = "20" 1429 1413 1430 # select two rows 1414 row1 = 11415 row2 = 41416 1431 index1 = self.widget.lstParams.model().index(row1, 0, QtCore.QModelIndex()) 1417 1432 index2 = self.widget.lstParams.model().index(row2, 0, QtCore.QModelIndex()) … … 1425 1440 # simple constraints 1426 1441 # self.assertEqual(self.widget.getConstraintsForModel(), [('background', '0.001'), ('radius', '20')]) 1427 cons = self.widget.getConstraintForRow( 1) # 1 - background1428 self.assertEqual(cons.param, "background")1429 self.assertEqual(cons.value, "0.001")1430 cons = self.widget.getConstraintForRow( 4) # 4 = radius1431 self.assertEqual(cons.param, "radius")1432 self.assertEqual(cons.value, "20")1442 cons = self.widget.getConstraintForRow(row1) 1443 self.assertEqual(cons.param, param1) 1444 self.assertEqual(cons.value, default_value1) 1445 cons = self.widget.getConstraintForRow(row2) 1446 self.assertEqual(cons.param, param2) 1447 self.assertEqual(cons.value, default_value2) 1433 1448 1434 1449 objects = self.widget.getConstraintObjectsForModel() 1435 1450 self.assertEqual(len(objects), 2) 1436 self.assertEqual(objects[1].value, '20') 1437 self.assertEqual(objects[0].param, 'background') 1451 self.assertEqual(objects[1].value, default_value2) 1452 self.assertEqual(objects[0].param, param1) 1453 1454 row = 0 1455 param = "scale" 1456 func = "5*sld" 1438 1457 1439 1458 # add complex constraint 1440 const = Constraint(parent=None, param='scale', func='5*sld') 1441 row = 0 1459 const = Constraint(parent=None, param=param, func=func) 1442 1460 self.widget.addConstraintToRow(constraint=const, row=row) 1443 1461 #self.assertEqual(self.widget.getConstraintsForModel(),[('scale', '5*sld'), ('background', '0.001'), ('radius', None)]) 1444 cons = self.widget.getConstraintForRow( 4) # 4 = radius1445 self.assertEqual(cons.param, "radius")1446 self.assertEqual(cons.value, "20")1462 cons = self.widget.getConstraintForRow(row2) 1463 self.assertEqual(cons.param, param2) 1464 self.assertEqual(cons.value, default_value2) 1447 1465 1448 1466 objects = self.widget.getConstraintObjectsForModel() 1449 1467 self.assertEqual(len(objects), 3) 1450 self.assertEqual(objects[0].func, '5*sld')1468 self.assertEqual(objects[0].func, func) 1451 1469 1452 1470 def testReplaceConstraintName(self):
Note: See TracChangeset
for help on using the changeset viewer.