From 4ec63e5c2061e0abccda9edccecab1b7e6781f95 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Thu, 5 Mar 2026 16:07:53 +0000 Subject: [PATCH] tests: Drop use of testscenarios I have never really liked this library, and its use is no longer necessary now that unittest.TestCase provides the subTest helper. While we're here, we also remove coverage from requirements (it's over required for the coverage job) and organise dependencies alphabetically. Change-Id: Ie9d6f62005523c697f409f978b09510ff681a634 Signed-off-by: Stephen Finucane --- cliff/tests/test_commandmanager.py | 89 ++++++++++++++---------------- test-requirements.txt | 8 +-- tox.ini | 3 + 3 files changed, 47 insertions(+), 53 deletions(-) diff --git a/cliff/tests/test_commandmanager.py b/cliff/tests/test_commandmanager.py index 53ff464d..e0cbfbde 100644 --- a/cliff/tests/test_commandmanager.py +++ b/cliff/tests/test_commandmanager.py @@ -12,68 +12,63 @@ from unittest import mock -import testscenarios # type: ignore - from cliff import command from cliff import commandmanager from cliff.tests import base from cliff.tests import utils -load_tests = testscenarios.load_tests_apply_scenarios - - class TestLookupAndFind(base.TestBase): scenarios = [ - ('one-word', {'argv': ['one']}), - ('two-words', {'argv': ['two', 'words']}), - ('three-words', {'argv': ['three', 'word', 'command']}), + ('one-word', ['one']), + ('two-words', ['two', 'words']), + ('three-words', ['three', 'word', 'command']), ] - argv: list[str] - def test(self): - mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) - cmd, name, remaining = mgr.find_command(self.argv) - self.assertTrue(cmd) - self.assertEqual(' '.join(self.argv), name) - self.assertFalse(remaining) + for scenario, argv in self.scenarios: + with self.subTest(scenario, argv=argv): + mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) + cmd, name, remaining = mgr.find_command(argv) + self.assertTrue(cmd) + self.assertEqual(' '.join(argv), name) + self.assertFalse(remaining) class TestLookupWithRemainder(base.TestBase): scenarios = [ - ('one', {'argv': ['one', '--opt']}), - ('two', {'argv': ['two', 'words', '--opt']}), - ('three', {'argv': ['three', 'word', 'command', '--opt']}), + ('one', ['one', '--opt']), + ('two', ['two', 'words', '--opt']), + ('three', ['three', 'word', 'command', '--opt']), ] - argv: list[str] - def test(self): - mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) - cmd, name, remaining = mgr.find_command(self.argv) - self.assertTrue(cmd) - self.assertEqual(['--opt'], remaining) + for scenario, argv in self.scenarios: + with self.subTest(scenario, argv=argv): + mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) + cmd, name, remaining = mgr.find_command(argv) + self.assertTrue(cmd) + self.assertEqual(['--opt'], remaining) class TestFindInvalidCommand(base.TestBase): scenarios = [ - ('no-such-command', {'argv': ['a', '-b']}), - ('no-command-given', {'argv': ['-b']}), + ('no-such-command', ['a', '-b']), + ('no-command-given', ['-b']), ] - argv: list[str] - def test(self): - mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) - try: - mgr.find_command(self.argv) - except ValueError as err: - # make sure err include 'a' when ['a', '-b'] - self.assertIn(self.argv[0], str(err)) - self.assertIn('-b', str(err)) - else: - self.fail('expected a failure') + for scenario, argv in self.scenarios: + with self.subTest(scenario, argv=argv): + mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) + try: + mgr.find_command(argv) + except ValueError as err: + # make sure err include 'a' when ['a', '-b'] + self.assertIn(argv[0], str(err)) + self.assertIn('-b', str(err)) + else: + self.fail('expected a failure') class TestFindUnknownCommand(base.TestBase): @@ -247,19 +242,19 @@ class TestLegacyCommand(base.TestBase): class TestLookupAndFindPartialName(base.TestBase): scenarios = [ - ('one-word', {'argv': ['o']}), - ('two-words', {'argv': ['t', 'w']}), - ('three-words', {'argv': ['t', 'w', 'c']}), + ('one-word', ['o']), + ('two-words', ['t', 'w']), + ('three-words', ['t', 'w', 'c']), ] - argv: list[str] - def test(self): - mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) - cmd, name, remaining = mgr.find_command(self.argv) - self.assertTrue(cmd) - self.assertEqual(' '.join(self.argv), name) - self.assertFalse(remaining) + for scenario, argv in self.scenarios: + with self.subTest(scenario, argv=argv): + mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) + cmd, name, remaining = mgr.find_command(argv) + self.assertTrue(cmd) + self.assertEqual(' '.join(argv), name) + self.assertFalse(remaining) class TestIsModuleIgnored(base.TestBase): diff --git a/test-requirements.txt b/test-requirements.txt index 73c83992..6de45b83 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,10 +1,6 @@ -stestr>=1.0.0 # Apache-2.0 -testtools>=2.2.0 # MIT -testscenarios>=0.4 # Apache-2.0/BSD fixtures>=3.0.0 # Apache-2.0/BSD - -coverage>=5.0 # Apache-2.0 - # sphinx is required in test-requirements in addition to doc/requirements # because there is a sphinx extension that has tests sphinx>=5.0.0 # BSD +stestr>=1.0.0 # Apache-2.0 +testtools>=2.2.0 # MIT diff --git a/tox.ini b/tox.ini index 0c6c0621..9300f2b7 100644 --- a/tox.ini +++ b/tox.ini @@ -60,6 +60,9 @@ deps = commands = sphinx-build -W -b html doc/source doc/build/html [testenv:cover] +deps = + {[testenv]deps} + coverage>=5.0 setenv = {[testenv]setenv} PYTHON=coverage run --source cliff --parallel-mode