From: Stefan Metzmacher Date: Mon, 20 Apr 2020 18:00:51 +0000 (+0200) Subject: python/tests: add DynamicTestCase setUpDynamicTestCases() infrastructure X-Git-Tag: samba-4.12.10~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=62f7642b073839f38fbbb4e97f6d15f672090444;p=thirdparty%2Fsamba.git python/tests: add DynamicTestCase setUpDynamicTestCases() infrastructure This can be used in order to run a sepcific test (coded just once) with an autogenerated set of arguments. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14531 Pair-Programmed-With: Douglas Bagnall Signed-off-by: Stefan Metzmacher Signed-off-by: Douglas Bagnall (cherry picked from commit 80347deb544b38be6c6814e5d1b82e48ebe83fd1) --- diff --git a/python/samba/tests/__init__.py b/python/samba/tests/__init__.py index 3f22eaa1c94..9d5128bab0e 100644 --- a/python/samba/tests/__init__.py +++ b/python/samba/tests/__init__.py @@ -63,10 +63,37 @@ BINDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), HEXDUMP_FILTER = bytearray([x if ((len(repr(chr(x))) == 3) and (x < 127)) else ord('.') for x in range(256)]) +def DynamicTestCase(cls): + cls.setUpDynamicTestCases() + return cls class TestCase(unittest.TestCase): """A Samba test case.""" + @classmethod + def generate_dynamic_test(cls, fnname, suffix, *args): + """ + fnname is something like "test_dynamic_sum" + suffix is something like "1plus2" + argstr could be (1, 2) + + This would generate a test case called + "test_dynamic_sum_1plus2(self)" that + calls + self._test_dynamic_sum_with_args(1, 2) + """ + def fn(self): + getattr(self, "_%s_with_args" % fnname)(*args) + setattr(cls, "%s_%s" % (fnname, suffix), fn) + + @classmethod + def setUpDynamicTestCases(cls): + """This can be implemented in order to call cls.generate_dynamic_test() + In order to implement autogenerated testcase permutations. + """ + msg = "%s needs setUpDynamicTestCases() if @DynamicTestCase is used!" % (cls) + raise Exception(msg) + def setUp(self): super(TestCase, self).setUp() test_debug_level = os.getenv("TEST_DEBUG_LEVEL")