import os import pytest import tempfile import checksymbolslib.file as m def test_get_list_of_files_in_the_repo(): all_files = m.get_list_of_files_in_the_repo() assert 'Makefile' in all_files assert 'package/Config.in' in all_files assert len(all_files) > 1000 get_list_of_files_to_process = [ ('unknown file type', ['a/file/Config.in', 'another/file.mk', 'unknown/file/type'], ['a/file/Config.in', 'another/file.mk']), ('runtime test infra fixtures', ['a/file/Config.in', 'support/testing/a/broken/Config.in', 'another/file.mk'], ['a/file/Config.in', 'another/file.mk']), ] @pytest.mark.parametrize('testname,all_files,expected', get_list_of_files_to_process) def test_get_list_of_files_to_process(testname, all_files, expected): files_to_process = m.get_list_of_files_to_process(all_files) assert files_to_process == expected get_list_of_filenames_with_pattern = [ ('ignored directories', ['a/file/Config.in', 'support/testing/a/broken/file/Config.in', 'not/found.mk', 'another/file.mk'], ['a/file/Config.in', 'not/found.mk', 'another/file.mk'], 'file', ['support/testing/a/broken/file/Config.in']), ('processed files', ['a/file/Config.in', 'not/found.mk', 'another/file.mk'], [], 'file', ['a/file/Config.in', 'another/file.mk']), ('case sensitive', ['a/file/Config.in', 'not/found.mk', 'another/file.mk'], [], 'FILE', []), ('or', ['a/file/Config.in', 'not/found.mk', 'another/file.mk'], [], 'file|FILE', ['a/file/Config.in', 'another/file.mk']), ('complex regexp', ['a/file/Config.in', 'not/found.mk', 'another/file.mk'], [], '^n[oO]+t.*mk$', ['not/found.mk']), ] @pytest.mark.parametrize('testname,all_files,files_to_process,pattern,expected', get_list_of_filenames_with_pattern) def test_get_list_of_filenames_with_pattern(testname, all_files, files_to_process, pattern, expected): files_to_process = m.get_list_of_filenames_with_pattern(all_files, files_to_process, pattern) assert files_to_process == expected read_file = [ ('indent', 'file1', ' content1\n' '\t# comment1', [[1, ' content1\n'], [2, '\t# comment1']]), ('trailing space', 'file2', 'content2 \n' '# comment2\t\n', [[1, 'content2 \n'], [2, '# comment2\t\n']]), ('empty line', 'file3', '\n' '\n', [[1, '\n'], [2, '\n']]), ('missing newline at EOF', 'file4', '\n' ' text\t', [[1, '\n'], [2, ' text\t']]), ] @pytest.mark.parametrize('testname,filename,content,,expected', read_file) def test_read_file(testname, filename, content, expected): with tempfile.TemporaryDirectory(suffix='-checksymbolslib-test-file') as workdir: full_filename = os.path.join(workdir, filename) with open(full_filename, 'wb') as f: f.write(content.encode()) read_file_content = m.read_file(full_filename) assert read_file_content == expected cleanup_file_content = [ ('empty file', [], []), ('empty line', [[5, '\n']], [[5, '']]), ('trailing space', [[3, ' \n']], [[3, ' ']]), ('trailing tab', [[3, '\t\n']], [[3, '\t']]), ('1 continuation', [[1, 'foo \\\n'], [2, 'bar\n']], [[1, 'foo bar']]), ('2 continuations', [[1, 'foo \\\n'], [2, 'bar \\\n'], [3, 'baz\n']], [[1, 'foo bar baz']]), ] @pytest.mark.parametrize('testname,file_content_raw,expected', cleanup_file_content) def test_cleanup_file_content(testname, file_content_raw, expected): cleaned_up_content = m.cleanup_file_content(file_content_raw) assert cleaned_up_content == expected