"""Testing file 'cli/pre_commit_scripts/check_include_guard.py'."""
import io
import sys
import unittest
from contextlib import redirect_stderr
from pathlib import Path
try:
from cli.pre_commit_scripts import check_include_guard
except ModuleNotFoundError:
sys.path.insert(0, str(Path(__file__).parents[3]))
from cli.pre_commit_scripts import check_include_guard
class TestIncludeGuard(unittest.TestCase):
"""Class to test the functions inside check_include_guard.py"""
@classmethod
def setUpClass(cls):
cls.tests_dir = Path(__file__).parent / Path(__file__).stem
def test_main_c_file(self):
"""Test main function with only .c-file"""
argv = [str(self.tests_dir / "test_file.c")]
result = check_include_guard.main(argv)
self.assertEqual(result, 0)
def test_main_invalid_h_file(self):
"""Test main function with empty .h-file"""
argv = [str(self.tests_dir / "test_file_empty.h")]
err = io.StringIO()
with redirect_stderr(err):
result = check_include_guard.main(argv)
self.assertEqual(result, 4)
file_name = (
"tests/cli/pre_commit_scripts/test_check_include_guard/test_file_empty.h"
)
expected_errs = [
f"{file_name}: #ifndef FOXBMS__TEST_FILE_EMPTY_H_ is missing.",
f"{file_name}: #define FOXBMS__TEST_FILE_EMPTY_H_ is missing.",
f"{file_name}: #endif /* FOXBMS__TEST_FILE_EMPTY_H_ */ is missing.",
f"{file_name}: The pattern needs to be:",
]
for line, expected_err in zip(
err.getvalue().splitlines(), expected_errs, strict=False
):
self.assertIn(expected_err, line)
def test_main_valid_h_file(self):
"""Test main function with valid .h-file"""
argv = [str(self.tests_dir / "test_file_valid.h")]
result = check_include_guard.main(argv)
self.assertEqual(result, 0)
def test_main_invalid_h_file_multiple(self):
"""Test main function with invalid .h-file with one marker twice"""
argv = [str(self.tests_dir / "test_file_multiple.h")]
err = io.StringIO()
with redirect_stderr(err):
result = check_include_guard.main(argv)
self.assertEqual(result, 1)
file_name = (
"tests/cli/pre_commit_scripts/test_check_include_guard/test_file_multiple.h"
)
expected_errs = [
f"{file_name}: #endif /* FOXBMS__TEST_FILE_MULTIPLE_H_ */ occurs more than once.",
]
for line, expected_err in zip(
err.getvalue().splitlines(), expected_errs, strict=False
):
self.assertIn(expected_err, line)
def test_main_invalid_h_file_missing(self):
"""Test main function with invalid .h-file with missing #define statement"""
argv = [str(self.tests_dir / "test_file_invalid_content.h")]
err = io.StringIO()
with redirect_stderr(err):
result = check_include_guard.main(argv)
self.assertEqual(result, 3)
file_name = "tests/cli/pre_commit_scripts/test_check_include_guard/test_file_invalid_content.h"
expected_errs = [
f"{file_name}: #define FOXBMS__TEST_FILE_INVALID_CONTENT_H_ is missing.",
f"{file_name}: markers are not in the correct order.",
f"{file_name}: The pattern needs to be:",
"",
"#ifndef FOXBMS__TEST_FILE_INVALID_CONTENT_H_",
"#define FOXBMS__TEST_FILE_INVALID_CONTENT_H_",
]
for line, expected_err in zip(
err.getvalue().splitlines(), expected_errs, strict=False
):
self.assertIn(expected_err, line)
if __name__ == "__main__":
unittest.main()