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
RevLine 
[2162fa0]1import sys
2import unittest
[811bec1]3import webbrowser
[2162fa0]4
[53c771e]5from PyQt5 import QtGui
6from PyQt5 import QtWidgets
7from PyQt5 import QtTest
8from PyQt5 import QtCore
[7fb471d]9from unittest.mock import MagicMock
[2162fa0]10
[811bec1]11# set up import paths
12import sas.qtgui.path_prepare
13
[2162fa0]14# Local
[83eb5208]15import sas.qtgui.Utilities.GuiUtils as GuiUtils
[dc5ef15]16from sas.qtgui.Plotting.PlotterData import Data1D
[811bec1]17from sas.qtgui.Perspectives.Fitting.FittingPerspective import FittingWindow
[2162fa0]18
[53c771e]19if not QtWidgets.QApplication.instance():
20    app = QtWidgets.QApplication(sys.argv)
[2162fa0]21
22class FittingPerspectiveTest(unittest.TestCase):
[811bec1]23    '''Test the Fitting Perspective'''
[2162fa0]24    def setUp(self):
[811bec1]25        class dummy_manager(object):
26            def communicator(self):
27                return GuiUtils.Communicate()
28            def communicate(self):
29                return GuiUtils.Communicate()
[2162fa0]30
[811bec1]31        '''Create the perspective'''
32        self.widget = FittingWindow(dummy_manager())
[2162fa0]33
34    def tearDown(self):
[811bec1]35        '''Destroy the perspective'''
[b9c4c1e1]36        self.widget.close()
[2162fa0]37        self.widget = None
38
39    def testDefaults(self):
[811bec1]40        '''Test the GUI in its default state'''
[53c771e]41        self.assertIsInstance(self.widget, QtWidgets.QWidget)
[811bec1]42        self.assertIn("Fit panel", self.widget.windowTitle())
[1bc27f1]43        self.assertEqual(self.widget.optimizer, "Levenberg-Marquardt")
[811bec1]44        self.assertEqual(len(self.widget.tabs), 1)
45        self.assertEqual(self.widget.maxIndex, 1)
[676f137]46        self.assertEqual(self.widget.maxCSIndex, 0)
47        self.assertEqual(self.widget.getTabName(), "FitPage1")
[811bec1]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)
[676f137]55        self.assertEqual(self.widget.getTabName(), "FitPage2")
[811bec1]56        self.assertEqual(self.widget.maxIndex, 2)
[0e4d87c]57        # Add an empty batch tab
58        self.widget.addFit(None, is_batch=True)
59        self.assertEqual(len(self.widget.tabs), 3)
[676f137]60        self.assertEqual(self.widget.getTabName(2), "BatchPage3")
[0e4d87c]61        self.assertEqual(self.widget.maxIndex, 3)
62
[676f137]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
[0e4d87c]70    def testResetTab(self):
71        ''' Remove data from last tab'''
72        self.assertEqual(len(self.widget.tabs), 1)
[676f137]73        self.assertEqual(self.widget.getTabName(), "FitPage1")
[0e4d87c]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)
[676f137]81        self.assertEqual(self.widget.getTabName(), "FitPage2")
[0e4d87c]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)
[811bec1]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)
[676f137]105        self.assertEqual(self.widget.getTabName(), "FitPage2")
[811bec1]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)
[377ade1]111        self.assertEqual(self.widget.maxIndex, 3)
[676f137]112        self.assertEqual(self.widget.getTabName(), "FitPage3")
[811bec1]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
[2155824]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
[2162fa0]148
149if __name__ == "__main__":
150    unittest.main()
Note: See TracBrowser for help on using the repository browser.