diff --git a/pyfisch/tests/sw/fisch-v1-python_bindings.py b/pyfisch/tests/sw/fisch-v1-python_bindings.py deleted file mode 100644 index 43aab60494fbb89dc30f26720a54b6a681230a18..0000000000000000000000000000000000000000 --- a/pyfisch/tests/sw/fisch-v1-python_bindings.py +++ /dev/null @@ -1,122 +0,0 @@ -import unittest -import inspect -import tempfile -import re -import pyfisch_vx_v1 as pyfisch_vx -import random - - -# This is on module level as many unittest frameworks will ignore main -random.seed(1234) - -def get_all_classes(m): - ret = dict() - for name, obj in inspect.getmembers(m): - if (inspect.isclass(obj) and not name.startswith("_") and - str(obj.__class__) == "<class 'pybind11_builtins.pybind11_type'>"): - ret[name] = obj - get_all_classes(obj) - return ret - - -classes = get_all_classes(pyfisch_vx) - -ignored_classes = [pyfisch_vx.ReinitStackEntry] - -class PyBindings(unittest.TestCase): - def instantiate_with_guessed_constructor(self, obj): - """ - Instantiate an object of class `obj`. If it has no default - constructor, try to guess meaningful arguments. - """ - try: - return obj() - except TypeError as error: - # Extract the missing arguments - arg_strs = self.parse_constructor_exception(error.message) - - # Try to construct them and instantiate the test object - arguments = [eval(arg_type)() for arg_type in arg_strs] - return obj(*arguments) - - @staticmethod - def parse_constructor_exception(error_string): - """ - Parse an "Incompatible Constructor" exception and extract the - correct argument types. - - Such an exception might look like this: - - ``` - TypeError: __init__(): incompatible constructor arguments. - The following argument types are supported: - - 1. _pydls.Trigger_mode(arg0: int) - ``` - - :param error_string: Exception message - :type error_string: str - :return: List of the expected argument types - :rtype: list of str - """ - regex = r"(?<=arg\d: ).*?(?=\,|\))" - return re.findall(regex, error_string) - - -def construct_base_checks(): - for name, obj in classes.items(): - def generate_test_function(test_obj): - """ - Generate an "is-constructible" test for a given class. - """ - @unittest.skipIf(obj in ignored_classes, "Ignored") - def test_function(self): - original = self.instantiate_with_guessed_constructor(test_obj) - return test_function - - func = generate_test_function(obj) - func.__name__ = 'test_base_constructible_%s' % name - setattr(PyBindings, func.__name__, func) - - -def construct_derived_checks(): - for name, obj in classes.items(): - def generate_test_function(test_obj): - """ - Generate an "is-constructible" test for an arbitrary derived class of `test_obj`. - """ - - @unittest.skipIf(obj in ignored_classes, "Ignored") - def test_function(self): - class Derived(test_obj): - def __init__(self, *args, **kwargs): - super(Derived, self).__init__(*args, **kwargs) - - # Add new attribute, ensure it hasn't been there before - new_name = "x%d" % random.randint(0, int(2**32-1)) - while hasattr(self, new_name): - new_name = "x%d" % random.randint(0, int(2**32-1)) - new_value = 0xdeadbeef - setattr(self, new_name, new_value) - - Derived.__name__ = "derived_%s" % name - - # pickle needs it in global namespace - globals()[Derived.__name__] = Derived - - # Test it - original = self.instantiate_with_guessed_constructor(Derived) - return test_function - - func = generate_test_function(obj) - func.__name__ = 'test_derived_constructible_%s' % name - setattr(PyBindings, func.__name__, func) - - -# Register tests: has to be done on module level and must not contain "test" -construct_base_checks() -construct_derived_checks() - - -if __name__ == '__main__': - unittest.main() diff --git a/pyfisch/tests/sw/fisch-v1-str_conversion.py b/pyfisch/tests/sw/fisch-v1-str_conversion.py deleted file mode 100644 index be2c634b02f214410eb437d817a4ce9c9ab7822f..0000000000000000000000000000000000000000 --- a/pyfisch/tests/sw/fisch-v1-str_conversion.py +++ /dev/null @@ -1,20 +0,0 @@ -import unittest - -import pyfisch_vx_v1 as fisch - -class StrConversion(unittest.TestCase): - def test_str_conversion(self): - self.assertEqual(str(fisch.JTAGIdCode()), "JTAGIdCode(0x0)") - self.assertEqual(str(fisch.JTAGClockScaler(3)), "JTAGClockScaler(3)") - self.assertEqual(str(fisch.ResetJTAGTap()), "ResetJTAGTap()") - self.assertEqual(str(fisch.OmnibusChipOverJTAG(12)), - "OmnibusChipOverJTAG(0d12 0xc 0b00000000000000000000000000001100)") - self.assertEqual(str(fisch.Omnibus(fisch.Omnibus.Value(12, [True, True, False, True]))), - "Omnibus(0d12 0xc 0b00000000000000000000000000001100, byte_enables: 1101)") - self.assertEqual(str(fisch.JTAGPLLRegister(12)), - "JTAGPLLRegister(0d12 0xc 0b00000000000000000000000000001100)") - self.assertEqual(str(fisch.ResetChip(True)), "ResetChip(true)") - self.assertEqual(str(fisch.Timer()), "Timer()") - -if __name__ == "__main__": - unittest.main()