Ignore:
Timestamp:
Jun 21, 2016 8:07:33 AM (8 years ago)
Author:
Piotr Rozyczko <piotr.rozyczko@…>
Branches:
ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc
Children:
f82ab8c
Parents:
1042dba
Message:

More main window items, system close, update checker, doc viewer etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/UnitTesting/GuiManagerTest.py

    r5032ea68 r9e426c1  
    11import sys 
     2import subprocess 
    23import unittest 
     4import webbrowser 
     5import logging 
    36 
    47from PyQt4.QtGui import * 
    58from PyQt4.QtTest import QTest 
    69from PyQt4.QtCore import * 
     10from PyQt4.QtWebKit import * 
    711from mock import MagicMock 
    812 
     
    1014from GuiManager import GuiManager 
    1115from UI.MainWindowUI import MainWindow 
     16from UnitTesting.TestUtils import QtSignalSpy 
    1217 
    1318app = QApplication(sys.argv) 
     
    5661        pass 
    5762 
     63    def testQuitApplication(self): 
     64        """ 
     65        Test that the custom exit method is called on shutdown 
     66        """ 
     67        # Must mask sys.exit, otherwise the whole testing process stops. 
     68        sys.exit = MagicMock() 
     69 
     70        # Say No to the close dialog 
     71        QMessageBox.question = MagicMock(return_value=QMessageBox.No) 
     72 
     73        # Open, then close the manager 
     74        self.manager.quitApplication() 
     75 
     76        # See that the MessageBox method got called 
     77        self.assertTrue(QMessageBox.question.called) 
     78        # sys.exit() not called this time 
     79        self.assertFalse(sys.exit.called) 
     80 
     81        # Say Yes to the close dialog 
     82        QMessageBox.question = MagicMock(return_value=QMessageBox.Yes) 
     83 
     84        # Open, then close the manager 
     85        self.manager.quitApplication() 
     86 
     87        # See that the MessageBox method got called 
     88        self.assertTrue(QMessageBox.question.called) 
     89        # Also, sys.exit() called 
     90        self.assertTrue(sys.exit.called) 
     91 
     92    def testCheckUpdate(self): 
     93        """ 
     94        Tests the SasView website version polling 
     95        """ 
     96        self.manager.processVersion = MagicMock() 
     97        version = {'update_url'  : 'http://www.sasview.org/sasview.latestversion',  
     98                   'version'     : '3.1.2', 
     99                   'download_url': 'https://github.com/SasView/sasview/releases'} 
     100        self.manager.checkUpdate() 
     101 
     102        self.manager.processVersion.assert_called_with(version) 
     103 
     104        pass 
     105 
     106    def testProcessVersion(self): 
     107        """ 
     108        Tests the version checker logic 
     109        """ 
     110        # 1. version = 0.0.0 
     111        version_info = {u'version' : u'0.0.0'} 
     112        spy_status_update = QtSignalSpy(self.manager, self.manager.communicate.statusBarUpdateSignal) 
     113 
     114        self.manager.processVersion(version_info) 
     115 
     116        self.assertEqual(spy_status_update.count(), 1) 
     117        message = 'Could not connect to the application server. Please try again later.' 
     118        self.assertIn(message, str(spy_status_update.signal(index=0))) 
     119 
     120        # 2. version < LocalConfig.__version__ 
     121        version_info = {u'version' : u'0.0.1'} 
     122        spy_status_update = QtSignalSpy(self.manager, self.manager.communicate.statusBarUpdateSignal) 
     123 
     124        self.manager.processVersion(version_info) 
     125 
     126        self.assertEqual(spy_status_update.count(), 1) 
     127        message = 'You have the latest version of SasView' 
     128        self.assertIn(message, str(spy_status_update.signal(index=0))) 
     129 
     130        # 3. version > LocalConfig.__version__ 
     131        version_info = {u'version' : u'999.0.0'} 
     132        spy_status_update = QtSignalSpy(self.manager, self.manager.communicate.statusBarUpdateSignal) 
     133        webbrowser.open = MagicMock() 
     134 
     135        self.manager.processVersion(version_info) 
     136 
     137        self.assertEqual(spy_status_update.count(), 1) 
     138        message = 'Version 999.0.0 is available!' 
     139        self.assertIn(message, str(spy_status_update.signal(index=0))) 
     140 
     141        webbrowser.open.assert_called_with("https://github.com/SasView/sasview/releases") 
     142 
     143        # 4. version > LocalConfig.__version__ and standalone 
     144        version_info = {u'version' : u'999.0.0'} 
     145        spy_status_update = QtSignalSpy(self.manager, self.manager.communicate.statusBarUpdateSignal) 
     146        webbrowser.open = MagicMock() 
     147 
     148        self.manager.processVersion(version_info, standalone=True) 
     149 
     150        self.assertEqual(spy_status_update.count(), 1) 
     151        message = 'See the help menu to download it' 
     152        self.assertIn(message, str(spy_status_update.signal(index=0))) 
     153 
     154        self.assertFalse(webbrowser.open.called) 
     155 
     156        # 5. couldn't load version 
     157        version_info = {} 
     158        logging.error = MagicMock() 
     159        spy_status_update = QtSignalSpy(self.manager, self.manager.communicate.statusBarUpdateSignal) 
     160 
     161        self.manager.processVersion(version_info) 
     162 
     163        # Retrieve and compare arguments of the mocked call 
     164        message = "guiframe: could not get latest application version number" 
     165        args, _ = logging.error.call_args 
     166        self.assertIn(message, args[0]) 
     167 
     168        # Check the signal message 
     169        message = 'Could not connect to the application server.' 
     170        self.assertIn(message, str(spy_status_update.signal(index=0))) 
     171 
    58172    def testActions(self): 
    59173        """ 
     
    66180        """ 
    67181        # Mock the system file open method 
    68         QFileDialog.getOpenFileName = MagicMock(return_value=None) 
     182        QFileDialog.getOpenFileNames = MagicMock(return_value=None) 
    69183 
    70184        # invoke the action 
     185        self.manager.actionLoadData() 
    71186 
    72187        # Test the getOpenFileName() dialog called once 
    73         #self.assertTrue(QtGui.QFileDialog.getOpenFileName.called) 
    74         #QtGui.QFileDialog.getOpenFileName.assert_called_once() 
     188        self.assertTrue(QFileDialog.getOpenFileNames.called) 
    75189         
    76  
    77     # test each action separately 
     190    def testActionDocumentation(self): 
     191        """ 
     192        Menu Help/Documentation 
     193        """ 
     194        #Mock the QWebView method 
     195        QWebView.show = MagicMock() 
     196 
     197        # Assure the filename is correct 
     198        self.assertIn("index.html", self.manager._helpLocation) 
     199 
     200        # Invoke the action 
     201        self.manager.actionDocumentation() 
     202 
     203        # Check if show() got called 
     204        self.assertTrue(QWebView.show.called) 
     205 
     206    def testActionTutorial(self): 
     207        """ 
     208        Menu Help/Tutorial 
     209        """ 
     210        # Mock subprocess.Popen 
     211        subprocess.Popen = MagicMock() 
     212 
     213        tested_location = self.manager._tutorialLocation 
     214 
     215        # Assure the filename is correct 
     216        self.assertIn("Tutorial.pdf", tested_location) 
     217 
     218        # Invoke the action 
     219        self.manager.actionTutorial() 
     220 
     221        # Check if popen() got called 
     222        self.assertTrue(subprocess.Popen.called) 
     223 
     224        #Check the popen() call arguments 
     225        subprocess.Popen.assert_called_with([tested_location], shell=True) 
     226 
     227    def testActionAcknowledge(self): 
     228        """ 
     229        Menu Help/Acknowledge 
     230        """ 
     231        pass 
     232 
     233    def testActionCheck_for_update(self): 
     234        """ 
     235        Menu Help/Check for update 
     236        """ 
     237        # Just make sure checkUpdate is called. 
     238        self.manager.checkUpdate = MagicMock() 
     239 
     240        self.manager.actionCheck_for_update() 
     241 
     242        self.assertTrue(self.manager.checkUpdate.called) 
     243              
    78244        
    79245if __name__ == "__main__": 
Note: See TracChangeset for help on using the changeset viewer.