source: sasview/src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingPerspectiveTest.py @ 676f137

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalc
Last change on this file since 676f137 was 676f137, checked in by Piotr Rozyczko <rozyczko@…>, 6 years ago

Initial version of the C&S widget

  • Property mode set to 100644
File size: 5.0 KB
Line 
1import sys
2import unittest
3import webbrowser
4
5from PyQt5 import QtGui
6from PyQt5 import QtWidgets
7from PyQt5 import QtTest
8from PyQt5 import QtCore
9from unittest.mock import MagicMock
10
11# set up import paths
12import sas.qtgui.path_prepare
13
14# Local
15import sas.qtgui.Utilities.GuiUtils as GuiUtils
16from sas.qtgui.Plotting.PlotterData import Data1D
17from sas.qtgui.Perspectives.Fitting.FittingPerspective import FittingWindow
18
19if not QtWidgets.QApplication.instance():
20    app = QtWidgets.QApplication(sys.argv)
21
22class FittingPerspectiveTest(unittest.TestCase):
23    '''Test the Fitting Perspective'''
24    def setUp(self):
25        class dummy_manager(object):
26            def communicator(self):
27                return GuiUtils.Communicate()
28            def communicate(self):
29                return GuiUtils.Communicate()
30
31        '''Create the perspective'''
32        self.widget = FittingWindow(dummy_manager())
33
34    def tearDown(self):
35        '''Destroy the perspective'''
36        self.widget.close()
37        self.widget = None
38
39    def testDefaults(self):
40        '''Test the GUI in its default state'''
41        self.assertIsInstance(self.widget, QtWidgets.QWidget)
42        self.assertIn("Fit panel", self.widget.windowTitle())
43        self.assertEqual(self.widget.optimizer, "Levenberg-Marquardt")
44        self.assertEqual(len(self.widget.tabs), 1)
45        self.assertEqual(self.widget.maxIndex, 1)
46        self.assertEqual(self.widget.maxCSIndex, 0)
47        self.assertEqual(self.widget.getTabName(), "FitPage1")
48
49    def testAddTab(self):
50        '''Add a tab and test it'''
51
52        # Add an empty tab
53        self.widget.addFit(None)
54        self.assertEqual(len(self.widget.tabs), 2)
55        self.assertEqual(self.widget.getTabName(), "FitPage2")
56        self.assertEqual(self.widget.maxIndex, 2)
57        # Add an empty batch tab
58        self.widget.addFit(None, is_batch=True)
59        self.assertEqual(len(self.widget.tabs), 3)
60        self.assertEqual(self.widget.getTabName(2), "BatchPage3")
61        self.assertEqual(self.widget.maxIndex, 3)
62
63    def testAddCSTab(self):
64        ''' Add a constraint/simult tab'''
65        self.widget.addConstraintTab()
66        self.assertEqual(len(self.widget.tabs), 2)
67        self.assertEqual(self.widget.getCSTabName(), "Const. & Simul. Fit1")
68        self.assertEqual(self.widget.maxCSIndex, 1)
69
70    def testResetTab(self):
71        ''' Remove data from last tab'''
72        self.assertEqual(len(self.widget.tabs), 1)
73        self.assertEqual(self.widget.getTabName(), "FitPage1")
74        self.assertEqual(self.widget.maxIndex, 1)
75
76        # Attempt to remove the last tab
77        self.widget.resetTab(0)
78
79        # see that the tab didn't disappear, just changed the name/id
80        self.assertEqual(len(self.widget.tabs), 1)
81        self.assertEqual(self.widget.getTabName(), "FitPage2")
82        self.assertEqual(self.widget.maxIndex, 2)
83
84        # Now, add data
85        data = Data1D(x=[1,2], y=[1,2])
86        GuiUtils.dataFromItem = MagicMock(return_value=data)
87        item = QtGui.QStandardItem("test")
88        self.widget.setData([item])
89        # Assert data is on widget
90        self.assertEqual(len(self.widget.tabs[0].all_data), 1)
91        # Reset the tab
92        self.widget.resetTab(0)
93        # See that the tab contains data no more
94        self.assertEqual(len(self.widget.tabs[0].all_data), 0)
95
96    def testCloseTab(self):
97        '''Delete a tab and test'''
98        # Add an empty tab
99        self.widget.addFit(None)
100
101        # Remove the original tab
102        self.widget.tabCloses(1)
103        self.assertEqual(len(self.widget.tabs), 1)
104        self.assertEqual(self.widget.maxIndex, 2)
105        self.assertEqual(self.widget.getTabName(), "FitPage2")
106
107        # Attemtp to remove the last tab
108        self.widget.tabCloses(1)
109        # The tab should still be there
110        self.assertEqual(len(self.widget.tabs), 1)
111        self.assertEqual(self.widget.maxIndex, 3)
112        self.assertEqual(self.widget.getTabName(), "FitPage3")
113
114    def testAllowBatch(self):
115        '''Assure the perspective allows multiple datasets'''
116        self.assertTrue(self.widget.allowBatch())
117
118    def testSetData(self):
119        ''' Assure that setting data is correct'''
120        with self.assertRaises(AssertionError):
121            self.widget.setData(None)
122
123        with self.assertRaises(AttributeError):
124            self.widget.setData("BOOP")
125
126        # Mock the datafromitem() call from FittingWidget
127        data = Data1D(x=[1,2], y=[1,2])
128        GuiUtils.dataFromItem = MagicMock(return_value=data)
129
130        item = QtGui.QStandardItem("test")
131        self.widget.setData([item])
132
133        # First tab should accept data
134        self.assertEqual(len(self.widget.tabs), 1)
135
136        # Add another set of data
137        self.widget.setData([item])
138
139        # Now we should have two tabs
140        self.assertEqual(len(self.widget.tabs), 2)
141
142        # Add two more items in a list
143        self.widget.setData([item, item])
144
145        # Check for 4 tabs
146        self.assertEqual(len(self.widget.tabs), 4)
147
148
149if __name__ == "__main__":
150    unittest.main()
Note: See TracBrowser for help on using the repository browser.