diff options
Diffstat (limited to 'tests/test_mainwindow.py')
-rw-r--r-- | tests/test_mainwindow.py | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/tests/test_mainwindow.py b/tests/test_mainwindow.py new file mode 100644 index 00000000..323a257f --- /dev/null +++ b/tests/test_mainwindow.py @@ -0,0 +1,150 @@ +# vim: set fileencoding=utf-8 : +from argparse import Namespace +import logging +logger = logging.getLogger(name=__name__) + +import sys +import unittest + +# black magic XXX ?? +import sip +sip.setapi('QVariant', 2) + +from PyQt4 import QtGui +from PyQt4.QtTest import QTest +from PyQt4.QtCore import Qt + +from eip_client import eipcmainwindow, conductor + + +class MainWindowTest(unittest.TestCase): + """ + Test our mainwindow GUI + """ + + ################################################## + # FIXME + # To be moved to BaseEIPTestCase + + def setUp(self): + '''Create the GUI''' + self.app = QtGui.QApplication(sys.argv) + opts = Namespace(config=None, + debug=False) + self.win = eipcmainwindow.EIPCMainWindow(opts) + + def tearDown(self): + """ + cleanup + """ + # we have to delete references, otherwise + # we get nice segfaults :) + del(self.win) + del(self.app) + + ################################################## + + def test_system_has_systray(self): + """ + does this system has a systray? + not the application response to that. + """ + self.assertEqual( + self.win.trayIcon.isSystemTrayAvailable(), + True) + + def test_defaults(self): + """ + test that the defaults are those expected + """ + self.assertEqual(self.win.windowTitle(), "EIP") + #self.assertEqual(self.win.durationSpinBox.value(), 15) + #logger.debug('durationSpinBox: %s' % self.win.durationSpinBox.value()) + + def test_main_window_has_conductor_instance(self): + """ + test main window instantiates conductor class + """ + self.assertEqual(hasattr(self.win, 'conductor'), True) + self.assertEqual(isinstance(self.win.conductor, + conductor.EIPConductor), True) + + # Let's roll... let's test serious things + # ... better to have a different TestCase for this? + # plan is: + # 1) we signal to the app that we are running from the + # testrunner -- so it knows, just in case :P + # 2) we init the conductor with the default-for-testrunner + # options -- like getting a fake-output client script + # that mocks openvpn output to stdout. + # 3) we check that the important things work as they + # expected for the output of the binaries. + # XXX TODO: + # get generic helper methods for the base testcase class. + # mock_good_output + # mock_bad_output + # check_status + + def test_connected_status_good_output(self): + """ + check we get 'connected' state after mocked \ +good output from the fake openvpn process. + """ + self.mock_good_output() + # wait? + self.check_state('connected') + + def test_unrecoverable_status_bad_output(self): + """ + check we get 'unrecoverable' state after + mocked bad output from the fake openvpn process. + """ + self.mock_bad_output() + self.check_state('unrecoverable') + + def test_icon_reflects_state(self): + """ + test that the icon changes after an injection + of a change-of-state event. + """ + self.mock_status_change('connected') + # icon == connectedIcon + # examine: QSystemtrayIcon.MessageIcon ?? + self.mock_status_change('disconnected') + # ico == disconnectedIcon + self.mock_status_change('connecting') + # icon == connectingIcon + + def test_status_signals_are_working(self): + """ + test that status-change signals are being triggered + """ + #??? + pass + + + # sample tests below... to be removed + + #def test_show_message_button_does_show_message(self): + #""" + #test that clicking on main window button shows message + #""" + # FIXME + #ok_show = self.win.showMessageButton + #trayIcon = self.win.trayIcon + # fake left click + #QTest.mouseClick(ok_show, Qt.LeftButton) + # how to assert that message has been shown? + #import ipdb;ipdb.set_trace() + + + #def test_do_fallback_if_not_systray(self): + #""" + #test that we do whatever we decide to do + #when we detect no systray. + #what happens with unity?? + #""" + #pass + +if __name__ == "__main__": + unittest.main() |