diff options
Diffstat (limited to 'gr-utils/python/modtool/tests/test_modtool.py')
-rw-r--r-- | gr-utils/python/modtool/tests/test_modtool.py | 323 |
1 files changed, 0 insertions, 323 deletions
diff --git a/gr-utils/python/modtool/tests/test_modtool.py b/gr-utils/python/modtool/tests/test_modtool.py deleted file mode 100644 index 89b665d0bd..0000000000 --- a/gr-utils/python/modtool/tests/test_modtool.py +++ /dev/null @@ -1,323 +0,0 @@ -# -# Copyright 2018, 2019 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# SPDX-License-Identifier: GPL-3.0-or-later -# -# -""" The file for testing the gr-modtool scripts """ - -from __future__ import print_function -from __future__ import absolute_import -from __future__ import unicode_literals - -import shutil -import tempfile -import unittest -import warnings -from os import path -try: - from pylint.epylint import py_run - skip_pylint_test = False -except: - skip_pylint_test = True - -from modtool.core import ModToolNewModule -from modtool.core import ModToolAdd -from modtool.core import ModToolDisable -from modtool.core import ModToolException -from modtool.core import ModToolMakeYAML -from modtool.core import ModToolRename -from modtool.core import ModToolRemove - -class TestModToolCore(unittest.TestCase): - """ The tests for the modtool core """ - def __init__(self, *args, **kwargs): - super(TestModToolCore, self).__init__(*args, **kwargs) - self.f_add = False - self.f_newmod = False - self.srcdir = path.abspath(path.join(path.dirname(path.realpath(__file__)), '../templates/gr-newmod')) - - @classmethod - def setUpClass(cls): - """ create a temporary directory """ - cls.test_dir = tempfile.mkdtemp() - - @classmethod - def tearDownClass(cls): - """ remove the directory after the test """ - shutil.rmtree(cls.test_dir) - - def setUp(self): - """ create a new module and block before every test """ - try: - warnings.simplefilter("ignore", ResourceWarning) - args = {'module_name':'howto', - 'directory': self.test_dir, - 'srcdir': self.srcdir} - ModToolNewModule(**args).run() - except (TypeError, ModToolException): - self.f_newmod = True - else: - try: - args = {'blockname':'square_ff', 'block_type':'general', - 'lang':'cpp', 'directory': self.test_dir + '/gr-howto', - 'add_python_qa': True} - ModToolAdd(**args).run() - except (TypeError, ModToolException): - self.f_add = True - - def tearDown(self): - """ removes the created module """ - # Required, else the new-module directory command - # in setup will throw exception after first test - ## cannot remove if directory is not created - if not self.f_newmod: - rmdir = self.test_dir + '/gr-howto' - shutil.rmtree(rmdir) - - def test_newmod(self): - """ Tests for the API function newmod """ - ## Tests for proper exceptions ## - test_dict = { 'directory': self.test_dir, - 'srcdir': self.srcdir} - # module name not specified - self.assertRaises(ModToolException, ModToolNewModule(**test_dict).run) - test_dict['module_name'] = 'howto' - # expected module_name as a string instead of dict - self.assertRaises(TypeError, ModToolNewModule(test_dict).run) - # directory already exists - # will not be raised if the command in setup failed - self.assertRaises(ModToolException, ModToolNewModule(**test_dict).run) - - ## Some tests for checking the created directory, sub-directories and files ## - test_dict['module_name'] = 'test' - ModToolNewModule(**test_dict).run() - module_dir = path.join(self.test_dir, 'gr-test') - self.assertTrue(path.isdir(module_dir)) - self.assertTrue(path.isdir(path.join(module_dir, 'lib'))) - self.assertTrue(path.isdir(path.join(module_dir, 'python'))) - self.assertTrue(path.isdir(path.join(module_dir, 'include'))) - self.assertTrue(path.isdir(path.join(module_dir, 'docs'))) - self.assertTrue(path.isdir(path.join(module_dir, 'cmake'))) - self.assertTrue(path.isdir(path.join(module_dir, 'swig'))) - self.assertTrue(path.exists(path.join(module_dir, 'CMakeLists.txt'))) - - ## The check for object instantiation ## - test_obj = ModToolNewModule(srcdir = self.srcdir) - # module name not specified - with self.assertRaises(ModToolException) as context_manager: - test_obj.run() - test_obj.info['modname'] = 'howto' - test_obj.directory = self.test_dir - # directory already exists - self.assertRaises(ModToolException, test_obj.run) - test_obj.info['modname'] = 'test1' - test_obj.run() - self.assertTrue(path.isdir(self.test_dir+'/gr-test1')) - self.assertTrue(path.isdir(self.test_dir+'/gr-test1/lib')) - self.assertTrue(path.exists(self.test_dir+'/gr-test1/CMakeLists.txt')) - - @unittest.skipIf(skip_pylint_test, 'pylint dependency missing, skip test') - def test_pylint_newmod(self): - """ Pylint tests for API function newmod """ - module_dir = path.join(self.test_dir, 'gr-test') - ## pylint tests ## - python_dir = path.join(module_dir, 'python') - py_module = path.join(python_dir, 'mul_ff.py') - (pylint_stdout, pylint_stderr) = py_run(py_module+' --errors-only --disable=E0602', return_std=True) - print(pylint_stdout.getvalue(), end='') - py_module = path.join(python_dir, 'qa_mul_ff.py') - (pylint_stdout, pylint_stderr) = py_run(py_module+' --errors-only', return_std=True) - print(pylint_stdout.getvalue(), end='') - - def test_add(self): - """ Tests for the API function add """ - ## skip tests if newmod command wasn't successful - if self.f_newmod: - raise unittest.SkipTest("setUp for API function 'add' failed") - module_dir = path.join(self.test_dir, 'gr-howto') - ## Tests for proper exceptions ## - test_dict = {} - test_dict['directory'] = module_dir - # missing blockname, block_type, lang - self.assertRaises(ModToolException, ModToolAdd(**test_dict).run) - test_dict['blockname'] = 'add_ff' - # missing arguments block_type, lang - self.assertRaises(ModToolException, ModToolAdd(**test_dict).run) - test_dict['block_type'] = 'general' - # missing argument lang - self.assertRaises(ModToolException, ModToolAdd(**test_dict).run) - test_dict['lang'] = 'cxx' - # incorrect language - self.assertRaises(ModToolException, ModToolAdd(**test_dict).run) - test_dict['lang'] = 'cpp' - test_dict['add_cpp_qa'] = 'Wrong' - # boolean is expected for add_cpp_qa - self.assertRaises(ModToolException, ModToolAdd(**test_dict).run) - test_dict['add_cpp_qa'] = True - test_dict['block_type'] = 'generaleee' - # incorrect block type - self.assertRaises(ModToolException, ModToolAdd(**test_dict).run) - test_dict['block_type'] = 'general' - test_dict['skip_lib'] = 'fail' - # boolean value is expected for skip_lib, fails in instantiation - self.assertRaises(ModToolException, ModToolAdd(**test_dict).run) - test_dict['skip_lib'] = True - # missing relevant subdir - self.assertRaises(ModToolException, ModToolAdd(**test_dict).run) - - ## Some tests for checking the created directory, sub-directories and files ## - test_dict['skip_lib'] = False - ModToolAdd(**test_dict).run() - self.assertTrue(path.exists(path.join(module_dir, 'lib', 'qa_add_ff.cc'))) - self.assertTrue(path.exists(path.join(module_dir, 'lib', 'add_ff_impl.cc'))) - self.assertTrue(path.exists(path.join(module_dir, 'grc', 'howto_add_ff.block.yml'))) - self.assertTrue(path.exists(path.join(module_dir, 'include', 'howto', 'add_ff.h'))) - - ## The check for object instantiation ## - test_obj = ModToolAdd() - test_obj.dir = module_dir - # missing blocktype, lang, blockname - self.assertRaises(ModToolException, test_obj.run) - test_obj.info['blocktype'] = 'general' - # missing lang, blockname - self.assertRaises(ModToolException, test_obj.run) - test_obj.info['lang'] = 'python' - test_obj.info['blockname'] = 'mul_ff' - test_obj.add_py_qa = True - test_obj.run() - self.assertTrue(path.exists(path.join(module_dir, 'python', 'mul_ff.py'))) - self.assertTrue(path.exists(path.join(module_dir, 'python', 'qa_mul_ff.py'))) - self.assertTrue(path.exists(path.join(module_dir, 'grc', 'howto_mul_ff.block.yml'))) - - @unittest.skipIf(skip_pylint_test, 'pylint dependency missing, skip test') - def test_pylint_add(self): - """ Pylint tests for API function add """ - ## skip tests if newmod command wasn't successful - if self.f_newmod: - raise unittest.SkipTest("setUp for API function 'add' failed") - module_dir = path.join(self.test_dir, 'gr-howto') - - ## The check for object instantiation ## - test_obj = ModToolAdd() - test_obj.dir = module_dir - # missing blocktype, lang, blockname - self.assertRaises(ModToolException, test_obj.run) - test_obj.info['blocktype'] = 'general' - # missing lang, blockname - self.assertRaises(ModToolException, test_obj.run) - test_obj.info['lang'] = 'python' - test_obj.info['blockname'] = 'mul_ff' - test_obj.add_py_qa = True - test_obj.run() - self.assertTrue(path.exists(path.join(module_dir, 'python', 'mul_ff.py'))) - self.assertTrue(path.exists(path.join(module_dir, 'python', 'qa_mul_ff.py'))) - - ## pylint tests ## - python_dir = path.join(module_dir, 'python') - py_module = path.join(python_dir, 'mul_ff.py') - (pylint_stdout, pylint_stderr) = py_run(py_module+' --errors-only --disable=E0602', return_std=True) - print(pylint_stdout.getvalue(), end='') - py_module = path.join(python_dir, 'qa_mul_ff.py') - (pylint_stdout, pylint_stderr) = py_run(py_module+' --errors-only', return_std=True) - print(pylint_stdout.getvalue(), end='') - - def test_rename(self): - """ Tests for the API function rename """ - if self.f_newmod or self.f_add: - raise unittest.SkipTest("setUp for API function 'rename' failed") - - module_dir = path.join(self.test_dir, 'gr-howto') - test_dict = {} - test_dict['directory'] = module_dir - # Missing 2 arguments blockname, new_name - self.assertRaises(ModToolException, ModToolRename(**test_dict).run) - test_dict['blockname'] = 'square_ff' - # Missing argument new_name - self.assertRaises(ModToolException, ModToolRename(**test_dict).run) - test_dict['new_name'] = '//#' - # Invalid new block name! - self.assertRaises(ModToolException, ModToolRename(**test_dict).run) - test_dict['new_name'] = None - # New Block name not specified - self.assertRaises(ModToolException, ModToolRename(**test_dict).run) - - ## Some tests for checking the renamed files ## - test_dict['new_name'] = 'div_ff' - ModToolRename(**test_dict).run() - self.assertTrue(path.exists(path.join(module_dir, 'lib', 'div_ff_impl.h'))) - self.assertTrue(path.exists(path.join(module_dir, 'lib', 'div_ff_impl.cc'))) - self.assertTrue(path.exists(path.join(module_dir, 'python', 'qa_div_ff.py'))) - self.assertTrue(path.exists(path.join(module_dir, 'grc', 'howto_div_ff.block.yml'))) - - ## The check for object instantiation ## - test_obj = ModToolRename() - test_obj.info['oldname'] = 'div_ff' - test_obj.info['newname'] = 'sub_ff' - test_obj.run() - self.assertTrue(path.exists(path.join(module_dir, 'lib', 'sub_ff_impl.h'))) - self.assertTrue(path.exists(path.join(module_dir, 'lib', 'sub_ff_impl.cc'))) - self.assertTrue(path.exists(path.join(module_dir, 'python', 'qa_sub_ff.py'))) - self.assertTrue(path.exists(path.join(module_dir, 'grc', 'howto_sub_ff.block.yml'))) - - def test_remove(self): - """ Tests for the API function remove """ - if self.f_newmod or self.f_add: - raise unittest.SkipTest("setUp for API function 'remove' failed") - module_dir = path.join(self.test_dir, 'gr-howto') - test_dict = {} - # missing argument blockname - self.assertRaises(ModToolException, ModToolRename(**test_dict).run) - test_dict['directory'] = module_dir - self.assertRaises(ModToolException, ModToolRename(**test_dict).run) - - ## Some tests to check blocks are not removed with different blocknames ## - test_dict['blockname'] = 'div_ff' - ModToolRemove(**test_dict).run() - self.assertTrue(path.exists(path.join(module_dir, 'lib', 'square_ff_impl.h'))) - self.assertTrue(path.exists(path.join(module_dir, 'lib', 'square_ff_impl.cc'))) - self.assertTrue(path.exists(path.join(module_dir, 'python', 'qa_square_ff.py'))) - self.assertTrue(path.exists(path.join(module_dir, 'grc', 'howto_square_ff.block.yml'))) - - ## Some tests for checking the non-existence of removed files ## - test_dict['blockname'] = 'square_ff' - ModToolRemove(**test_dict).run() - self.assertTrue(not path.exists(path.join(module_dir, 'lib', 'square_ff_impl.h'))) - self.assertTrue(not path.exists(path.join(module_dir, 'lib', 'square_ff_impl.cc'))) - self.assertTrue(not path.exists(path.join(module_dir, 'python', 'qa_square_ff.py'))) - self.assertTrue(not path.exists(path.join(module_dir, 'grc', 'howto_square_ff.block.yml'))) - - def test_makeyaml(self): - """ Tests for the API function makeyaml """ - if self.f_newmod or self.f_add: - raise unittest.SkipTest("setUp for API function 'makeyaml' failed") - module_dir = path.join(self.test_dir, 'gr-howto') - test_dict = {} - # missing argument blockname - self.assertRaises(ModToolException, ModToolMakeYAML(**test_dict).run) - test_dict['directory'] = module_dir - self.assertRaises(ModToolException, ModToolMakeYAML(**test_dict).run) - - ## Some tests to check if the command reuns ## - test_dict['blockname'] = 'square_ff' - ModToolMakeYAML(**test_dict).run() - - def test_disable(self): - """ Tests for the API function disable """ - if self.f_newmod or self.f_add: - raise unittest.SkipTest("setUp for API function 'disable' failed") - module_dir = path.join(self.test_dir, 'gr-howto') - test_dict = {} - # missing argument blockname - self.assertRaises(ModToolException, ModToolDisable(**test_dict).run) - test_dict['directory'] = module_dir - self.assertRaises(ModToolException, ModToolDisable(**test_dict).run) - - ## Some tests to check if the command reuns ## - test_dict['blockname'] = 'square_ff' - ModToolDisable(**test_dict).run() - -if __name__ == '__main__': - unittest.main() |