diff --git a/ipatests/pytest.ini b/ipatests/pytest.ini index ed462c37a..d4ff3f00d 100644 --- a/ipatests/pytest.ini +++ b/ipatests/pytest.ini @@ -7,6 +7,7 @@ [pytest] python_classes = test_ Test addopts = --doctest-modules + -p ipatests.pytest_plugins.declarative # Ignore files for doc tests. # TODO: ideally, these should all use __name__=='__main__' guards --ignore=setup.py diff --git a/ipatests/pytest_plugins/__init__.py b/ipatests/pytest_plugins/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ipatests/pytest_plugins/declarative.py b/ipatests/pytest_plugins/declarative.py new file mode 100644 index 000000000..1c24cf93d --- /dev/null +++ b/ipatests/pytest_plugins/declarative.py @@ -0,0 +1,47 @@ +# Authors: +# Petr Viktorin +# +# Copyright (C) 2014 Red Hat +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +"""Pytest plugin for Declarative tests""" + + +def pytest_generate_tests(metafunc): + """Generates Declarative tests""" + if 'declarative_test_definition' in metafunc.fixturenames: + name = metafunc.cls.__name__ + tests = [] + descriptions = [] + for i, test in enumerate(metafunc.cls.tests): + if callable(test): + description = '%d: %s' % ( + i, + test.__name__, # test is not a dict. pylint: disable=E1103 + ) + else: + description = '%d: %s: %s' % (i, + test['command'][0], + test.get('desc', '')) + test = dict(test) + test['nice'] = description + tests.append(test) + descriptions.append(description) + metafunc.parametrize( + ['index', 'declarative_test_definition'], + enumerate(tests), + ids=descriptions, + ) diff --git a/ipatests/test_xmlrpc/xmlrpc_test.py b/ipatests/test_xmlrpc/xmlrpc_test.py index ee6d55e17..03c5b5bd6 100644 --- a/ipatests/test_xmlrpc/xmlrpc_test.py +++ b/ipatests/test_xmlrpc/xmlrpc_test.py @@ -278,27 +278,15 @@ class Declarative(XMLRPC_test): print e pass - def test_generator(self): - """ - Iterate through tests. + def test_command(self, index, declarative_test_definition): + """Run an individual test - nose reports each one as a seperate test. + The arguments are provided by the pytest plugin. """ - name = self.__class__.__name__ - for (i, test) in enumerate(self.tests): - if callable(test): - func = lambda: test(self) - nice = '%s[%d]: call %s: %s' % ( - name, i, test.__name__, test.__doc__ - ) - func.description = nice - else: - nice = '%s[%d]: %s: %s' % ( - name, i, test['command'][0], test.get('desc', '') - ) - func = lambda: self.check(nice, **test) - func.description = nice - yield (func,) + if callable(declarative_test_definition): + declarative_test_definition(self) + else: + self.check(**declarative_test_definition) def check(self, nice, desc, command, expected, extra_check=None): (cmd, args, options) = command