source: sasview/src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingUtilitiesTest.py @ 29eb947

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 29eb947 was 7248d75d, checked in by Piotr Rozyczko <rozyczko@…>, 7 years ago

More unit tests for fitting perspective components - SASVIEW-499

  • Property mode set to 100755
File size: 7.0 KB
Line 
1import sys
2import unittest
3from PyQt4 import QtGui
4
5from UnitTesting.TestUtils import WarningTestNotImplemented
6#from sasmodels.sasview_model import load_standard_models
7from sasmodels import generate
8from sasmodels import modelinfo
9
10# Tested module
11from sas.qtgui.Perspectives.Fitting import FittingUtilities
12
13class FittingUtilitiesTest(unittest.TestCase):
14    '''Test the Fitting Utilities functions'''
15    def setUp(self):
16        '''Empty'''
17        pass
18
19    def tearDown(self):
20        '''Empty'''
21        pass
22
23    def testReplaceShellName(self):
24        """
25        Test the utility function for string manipulation
26        """
27        param_name = "test [123]"
28        value = "replaced"
29        result = FittingUtilities.replaceShellName(param_name, value)
30       
31        self.assertEqual(result, "test replaced")
32
33        # Assert!
34        param_name = "no brackets"
35        with self.assertRaises(AssertionError):
36            result = FittingUtilities.replaceShellName(param_name, value)
37
38       
39    def testGetIterParams(self):
40        """
41        Assure the right multishell parameters are returned
42        """
43        # Use a single-shell parameter
44        model_name = "barbell"
45        kernel_module = generate.load_kernel_module(model_name)
46        barbell_parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
47
48        params = FittingUtilities.getIterParams(barbell_parameters)
49        # returns empty list
50        self.assertEqual(params, [])
51
52        # Use a multi-shell parameter
53        model_name = "core_multi_shell"
54        kernel_module = generate.load_kernel_module(model_name)
55        multishell_parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
56
57        params = FittingUtilities.getIterParams(multishell_parameters)
58        # returns a non-empty list
59        self.assertNotEqual(params, [])
60        self.assertIn('sld', str(params))
61        self.assertIn('thickness', str(params))
62
63    def testGetMultiplicity(self):
64        """
65        Assure more multishell parameters are evaluated correctly
66        """
67        # Use a single-shell parameter
68        model_name = "barbell"
69        kernel_module = generate.load_kernel_module(model_name)
70        barbell_parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
71
72        param_name, param_length = FittingUtilities.getMultiplicity(barbell_parameters)
73        # returns nothing
74        self.assertEqual(param_name, "")
75        self.assertEqual(param_length, 0)
76
77        # Use a multi-shell parameter
78        model_name = "core_multi_shell"
79        kernel_module = generate.load_kernel_module(model_name)
80        multishell_parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
81
82        param_name, param_length = FittingUtilities.getMultiplicity(multishell_parameters)
83
84        self.assertEqual(param_name, "n")
85        self.assertEqual(param_length, 10)
86
87    def testAddParametersToModel(self):
88        """
89        Checks the QModel update from Sasmodel parameters
90        """
91        # Use a single-shell parameter
92        model_name = "barbell"
93        kernel_module = generate.load_kernel_module(model_name)
94        barbell_parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
95
96        model = QtGui.QStandardItemModel()
97
98        FittingUtilities.addParametersToModel(barbell_parameters, model)
99
100        # Test the resulting model
101        self.assertEqual(model.rowCount(), 5)
102        self.assertTrue(model.item(0).isCheckable())
103        self.assertEqual(model.item(0).text(), "sld")
104        self.assertEqual(model.item(1).text(), "sld_solvent")
105
106        # Use a multi-shell parameter to see that the method includes shell params
107        model_name = "core_multi_shell"
108        kernel_module = generate.load_kernel_module(model_name)
109        multi_parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
110
111        model = QtGui.QStandardItemModel()
112
113        FittingUtilities.addParametersToModel(multi_parameters, model)
114
115        # Test the resulting model
116        self.assertEqual(model.rowCount(), 5)
117        self.assertTrue(model.item(0).isCheckable())
118        self.assertEqual(model.item(0).text(), "sld_core")
119        self.assertFalse(model.item(3).hasChildren())
120        self.assertEqual(model.item(1).text(), "radius")
121        self.assertEqual(model.item(2).text(), "sld_solvent")
122        self.assertEqual(model.item(3).text(), "sld1")
123
124        self.assertEqual(model.item(4).text(), "thickness1")
125        self.assertTrue(model.item(4).hasChildren())
126
127    def testAddSimpleParametersToModel(self):
128        """
129        Checks the QModel update from Sasmodel parameters - no polydisp
130        """
131        # Use a multi-shell parameter to see that the method doesn't include shells
132        model_name = "core_multi_shell"
133        kernel_module = generate.load_kernel_module(model_name)
134        multi_parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
135
136        model = QtGui.QStandardItemModel()
137
138        FittingUtilities.addParametersToModel(multi_parameters, model)
139
140        # Test the resulting model
141        self.assertEqual(model.rowCount(), 5)
142        self.assertTrue(model.item(0).isCheckable())
143        self.assertEqual(model.item(0).text(), "sld_core")
144        self.assertEqual(model.item(1).text(), "radius")
145
146    def testAddCheckedListToModel(self):
147        """
148        Test for inserting a checkboxed item into a QModel
149        """
150        model = QtGui.QStandardItemModel()
151        params = ["row1", "row2", "row3"]
152
153        FittingUtilities.addCheckedListToModel(model, params)
154
155        # Check the model
156        self.assertEqual(model.rowCount(), 1)
157        self.assertTrue(model.item(0).isCheckable())
158        self.assertEqual(model.item(0, 0).text(), params[0])
159        self.assertEqual(model.item(0, 1).text(), params[1])
160        self.assertEqual(model.item(0, 2).text(), params[2])
161
162    def testAddShellsToModel(self):
163        """
164        Test for inserting a list of QItems into a model
165        """
166        # Use a multi-shell parameter to see that the method doesn't include shells
167        model_name = "core_multi_shell"
168        kernel_module = generate.load_kernel_module(model_name)
169        multi_parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
170
171        model = QtGui.QStandardItemModel()
172
173        index = 2
174        FittingUtilities.addShellsToModel(multi_parameters, model, index)
175        # There should be index*len(multi_parameters) new rows
176        self.assertEqual(model.rowCount(), 4)
177
178        model = QtGui.QStandardItemModel()
179        index = 5
180        FittingUtilities.addShellsToModel(multi_parameters, model, index)
181        self.assertEqual(model.rowCount(), 10)
182       
183        self.assertEqual(model.item(1).child(0).text(), "Polydispersity")
184        self.assertEqual(model.item(1).child(0).child(0).text(), "Distribution")
185        self.assertEqual(model.item(1).child(0).child(0,1).text(), "40.0")
186
187if __name__ == "__main__":
188    unittest.main()
Note: See TracBrowser for help on using the repository browser.