Source code for taurus.qt.qtgui.test.base
#!/usr/bin/env python
#############################################################################
##
## This file is part of Taurus
##
## http://taurus-scada.org
##
## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
##
## Taurus is free software: you can redistribute it and/or modify
## it under the terms of the GNU Lesser General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## Taurus is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public License
## along with Taurus. If not, see <http://www.gnu.org/licenses/>.
##
#############################################################################
"""Utilities for creating generic tests for Taurus widgets"""
import taurus.core
from taurus.external import unittest
from taurus.qt.qtgui.application import TaurusApplication
from taurus.test import skipUnlessGui
@skipUnlessGui()
[docs]class BaseWidgetTestCase(object):
'''
A base class for tests that need a widget instance
To use it, simply inherit from BaseWidgetTestCase *and* unittest.TestCase
and provide the following class members:
- _klass (typeobject) the widget class to test (mandatory)
- initargs (list) a list of arguments for the klass init method
(default=[])
- initkwargs (dict) a dict of keyword arguments for the klass init method
(default={})
'''
_klass = None
initargs = []
initkwargs = {}
[docs] def setUp(self):
"""
Preconditions:
- A TaurusApplication must be initialized.
- The widget must be instantiated
"""
unittest.TestCase.setUp(self)
app = TaurusApplication.instance()
if app is None:
app = TaurusApplication([])
self._app = app
if self._klass is not None:
self._widget = self._klass(*self.initargs, **self.initkwargs)
@skipUnlessGui()
[docs]class GenericWidgetTestCase(BaseWidgetTestCase):
'''a base class for testing common cases of arbitrary Taurus widget classes
To use it, simply inherit from GenericWidgetTestCase *and* unittest.TestCase
and provide the following class members:
- _klass (typeobject) the widget class to test (mandatory)
- initargs (list) a list of arguments for the klass init method
(default=[])
- initkwargs (dict) a dict of keyword arguments for the klass init method
(default={})
- modelnames (list) a list of model names which the widget should be able
to handle (default=[])
'''
modelnames = []
[docs] def setUp(self):
"""
Preconditions:
- Those from :class:`BaseWidgetTestCase`
- A list of models corresponding to the modelnames list
should be created without using the widget being tested
(e.g. by using taurusManager.findObject()).
None should be used as a placeholder when a model cannot be created
for a given modelname.
"""
#Make sure the basics are taken care of (QApplication, etc)
BaseWidgetTestCase.setUp(self)
#construct a list of models corresponding to the test model names
# provided by the widget
taurusManager = taurus.core.TaurusManager()
self._models = []
for n in self.modelnames:
if not n:
# an empty string or None are "valid" modelnames which should
# lead to a reset in the model
self._models.append(None)
else:
try:
# note, an unsupported model name will result in a None,
# which will be caught later on
model = taurusManager.findObject(n)
except:
model = None
self._models.append(model)
[docs] def test00_Instantiation(self):
'''Check that the widget instantiates correctly'''
self.assertIsInstance(self._widget, self._klass)
[docs] def test10_SetModelsSequentially(self):
'''Check that we can set several models sequentially'''
for name, model in zip(self.modelnames, self._models):
self._widget.setModel(name)
modelobj = self._widget.getModelObj()
if model is None and name:
# the modelname is not supported by the manager (we cannot test
# it apart from the fact that setModel does not raise an
# exception
continue
else:
self.assertIs(modelobj, model,
'failed to set model "%s" for %s' %
(name, self._klass.__name__))
# def test10_ModelProperty(self):
# pass
if __name__ == "__main__":
from taurus.qt.qtgui.display import TaurusLabel
class TaurusLabelTest(GenericWidgetTestCase, unittest.TestCase):
_klass = TaurusLabel
modelnames = ['sys/tg_test/1/wave', '', 'eval://1', None]
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TaurusLabelTest)
unittest.TextTestRunner(descriptions=True, verbosity=2).run(suite)
#unittest.main()
#TaurusLabelTest().run()