from os import listdir, mkdir from os.path import join, isdir, isfile from shutil import rmtree from pytest import fixture, mark from lxml.etree import parse from tiramisu import Config from rougail import template from rougail.config import dtdfilename template_dirs = 'tests/templates' test_ok = [f for f in listdir(template_dirs) if not f.startswith('_')] #test_ok = ['60extra_group'] @fixture(scope="module", params=test_ok) def test_dir(request): return request.param def find_files(dirname: str, root: list, files: set, ) -> None: for filename in listdir(dirname): abs_dirname = join(dirname, filename) root_file = root + [filename] if isdir(join(dirname, filename)): find_files(abs_dirname, root_file, files, ) else: files.add(join(*root_file)) @mark.asyncio async def test_dictionary(test_dir): test_dir = join(template_dirs, test_dir) tmp_dir = join(test_dir, 'tmp') modulepath = test_dir.replace('/', '.') + '.base' mod = __import__(modulepath) for token in modulepath.split(".")[1:]: mod = getattr(mod, token) config = await Config(mod.option_0) await config.property.read_only() funcs_file = join(template_dirs, '../eosfunc/test.py') distrib_dir = join(test_dir, 'tmpl') if isdir(tmp_dir): rmtree(tmp_dir) mkdir(tmp_dir) dest_dir = join(test_dir, 'dest') if isdir(dest_dir): rmtree(dest_dir) mkdir(dest_dir) await template.generate(config, funcs_file, distrib_dir, tmp_dir, dest_dir, ) list_templates = set() if isdir(dest_dir): find_files(dest_dir, [], list_templates, ) list_results = set() if isdir(join(test_dir, 'result')): find_files(join(test_dir, 'result'), [], list_results, ) assert list_templates == list_results for result in list_results: template_file = join(dest_dir, result) if not isfile(template_file): raise Exception(f'{template_file} is not generated') with open(join(test_dir, 'result', result), 'r') as fh: result_file = fh.read() with open(template_file, 'r') as fh: generated_file = fh.read() assert result_file == generated_file rmtree(dest_dir) rmtree(tmp_dir)