source: sasview/src/sas/qtgui/Perspectives/Invariant/UnitTesting/InvariantDetailsTest.py @ 46ca1f4

Last change on this file since 46ca1f4 was 7c487846, checked in by Piotr Rozyczko <rozyczko@…>, 7 years ago

Fixes to the Invariant perspective

  • Property mode set to 100755
File size: 5.4 KB
Line 
1import sys
2import time
3import numpy
4import logging
5import unittest
6from PyQt5 import QtGui, QtWidgets
7from PyQt5 import QtCore
8from PyQt5.QtTest import QTest
9from PyQt5.QtCore import Qt
10from unittest.mock import MagicMock
11from unittest.mock import patch
12
13from twisted.internet import threads
14
15from sas.qtgui.Perspectives.Invariant.InvariantDetails import DetailsDialog
16from sas.qtgui.Perspectives.Invariant.InvariantUtils import WIDGETS
17
18from sas.qtgui.Utilities.GuiUtils import *
19
20if not QtWidgets.QApplication.instance():
21    app = QtWidgets.QApplication(sys.argv)
22
23BG_COLOR_ERR = 'background-color: rgb(244, 170, 164);'
24
25
26class InvariantDetailsTest(unittest.TestCase):
27    """Test the Invariant Perspective Window"""
28    def setUp(self):
29        """Create the Invariant Details window"""
30
31        self.widget = DetailsDialog(None)
32
33        self.widget._model = QtGui.QStandardItemModel()
34
35        self.widget._model.setItem(WIDGETS.W_INVARIANT, QtGui.QStandardItem(str(10.)))
36
37        self.widget._model.setItem(WIDGETS.W_INVARIANT_ERR, QtGui.QStandardItem(str(0.1)))
38
39        self.widget._model.setItem(WIDGETS.W_ENABLE_LOWQ, QtGui.QStandardItem('true'))
40
41        self.widget._model.setItem(WIDGETS.D_LOW_QSTAR, QtGui.QStandardItem(str(9.)))
42
43        self.widget._model.setItem(WIDGETS.D_LOW_QSTAR_ERR, QtGui.QStandardItem(str(0.03)))
44
45        # # High-Q
46        self.widget._model.setItem(WIDGETS.W_ENABLE_HIGHQ,
47                                   QtGui.QStandardItem('false'))
48        # self._model.item(WIDGETS.D_HIGH_QSTAR)
49        # self._model.item(WIDGETS.D_HIGH_QSTAR_ERR)
50
51    def tearDown(self):
52        """Destroy the Invariant Details window """
53        self.widget.close()
54        self.widget = None
55
56    def testDefaults(self):
57        """Test the GUI in its default state"""
58
59        self.widget.qstar_total = None
60        self.widget.qhigh = None
61        self.widget.qlow = None
62
63        self.widget.progress_low_qstar = 0.0
64        self.widget.progress_high_qstar = 0.0
65        self.widget.progress_qstar = 100.0
66
67        self.widget.warning_msg = "No Details on calculations available...\n"
68
69        self.assertIsInstance(self.widget, QtWidgets.QDialog)
70
71        self.assertEqual(self.widget.progressBarLowQ.minimum(), 0)
72        self.assertEqual(self.widget.progressBarLowQ.maximum(), 100)
73
74        self.assertEqual(self.widget.progressBarData.minimum(), 0)
75        self.assertEqual(self.widget.progressBarData.maximum(), 100)
76
77        self.assertEqual(self.widget.progressBarHighQ.minimum(), 0)
78        self.assertEqual(self.widget.progressBarHighQ.maximum(), 100)
79
80
81        # Tooltips
82        self.assertEqual(self.widget.txtQData.toolTip(), "Invariant in the data set's Q range.")
83
84        self.assertEqual(self.widget.txtQDataErr.toolTip(), "Uncertainty on the invariant from data's range.")
85
86        self.assertEqual(self.widget.txtQLowQ.toolTip(), "Extrapolated invariant from low-Q range.")
87
88        self.assertEqual(self.widget.txtQLowQErr.toolTip(), "Uncertainty on the invariant from low-Q range.")
89
90        self.assertEqual(self.widget.txtQHighQ.toolTip(), "Extrapolated invariant from high-Q range.")
91
92        self.assertEqual(self.widget.txtQHighQErr.toolTip(), "Uncertainty on the invariant from high-Q range.")
93
94    def testOnOK(self):
95        """ Test closing dialog"""
96        okButton = self.widget.cmdOK
97        QTest.mouseClick(okButton, Qt.LeftButton)
98
99    def testShowDialog(self):
100        """ """
101        self.widget.showDialog()
102        # Low Q true
103        self.assertEqual(self.widget.qlow , 9.0)
104
105        self.assertEqual(self.widget.txtQLowQ.text(), '9.0')
106
107        self.assertEqual(self.widget.progress_low_qstar, 90.0)
108
109        self.assertEqual(self.widget.qstar_total, 10.0)
110
111        self.assertEqual(self.widget.txtQData.text(), '10.0')
112
113        self.assertEqual(self.widget.txtQDataErr.text(), '0.1')
114
115        # High Q false
116        self.assertEqual(self.widget.txtQHighQ.text(), '')
117        self.assertEqual(self.widget.txtQHighQErr.text(), '')
118        self.assertEqual(self.widget.progress_high_qstar, 0.0)  #  = 0
119        self.widget.qhigh  # = 0
120
121        # Progressbars
122        self.assertEqual(self.widget.progressBarLowQ.value(), self.widget.progress_low_qstar)
123
124        self.assertEqual(self.widget.progressBarLowQ.value(), self.widget.progress_low_qstar)
125
126        self.assertEqual(self.widget.progressBarHighQ.value(), self.widget.progress_high_qstar)
127
128    # TODO to complete
129    def testCheckValues(self):
130        """ """
131        self.widget.qstart_total = None
132        self.assertEqual(self.widget.checkValues(), "Invariant not calculated.\n")
133
134        self.widget.qstar_total = 0
135        self.assertEqual(self.widget.checkValues(), "Invariant is zero. \n " \
136                          "The calculations are likely to be unreliable!\n")
137
138        self.widget.qstar_total = 10
139        self.widget.progress_qstar = 'error'
140        self.assertIn("Error occurred when computing invariant from data.", self.widget.checkValues())
141
142        self.widget.progress_qstar = 0
143
144        self.widget.progress_low_qstar = 10
145        self.assertEqual(self.widget.checkValues(),
146                         'Extrapolated contribution at Low Q is higher than 5% of the invariant.\nThe sum of all extrapolated contributions is higher than 5% of the invariant.\n')
147
148        self.widget.progress_low_qstar = -1
149        self.assertEqual(self.widget.checkValues(), "Extrapolated contribution at Low Q < 0.\n")
150
151
152if __name__ == "__main__":
153    unittest.main()
Note: See TracBrowser for help on using the repository browser.