from pytest import fixture # , raises from pathlib import Path from rougail import Rougail from rougail.output_formatter import RougailOutputFormatter as RougailOutput from rougail_tests.utils import get_structures_list, get_rougail_config, config_to_dict excludes = [ # "16_6exists_family", ] test_ok = get_structures_list(excludes) # test_ok = [Path('../rougail-tests/structures/16_6exists_family')] def idfn(fixture_value): return fixture_value.name @fixture(scope="module", params=test_ok, ids=idfn) def test_dir(request): return request.param def get_output_director(namespace): return Path(__file__).parent / 'results' def _test_structural_files(file_name, namespace, rougailconfig): ################################## rougailconfig['step.output'] = 'formatter' ################################## config = None generated_output = RougailOutput(config, rougailconfig=rougailconfig).run()[1] output_file = get_output_director(namespace) / file_name.parent.parent.name / file_name.parent.name / file_name.name if not output_file.is_file(): if not output_file.parent.is_dir(): output_file.parent.mkdir(parents=True) output_file.write_text(file_name.read_text()) # with output_file.open('w') as fh: # print('===', generated_output) # fh.write(generated_output) with output_file.open() as outfh: attented_output = outfh.read() assert generated_output == attented_output, f'filename {output_file}' def test_structural_files_formatter(test_dir): namespace = False rougailconfig = get_rougail_config(test_dir, namespace) if not rougailconfig: return dirs = rougailconfig['main_dictionaries'] for dir_name in dirs: for file_name in Path(dir_name).iterdir(): if file_name.suffix in [".yml", ".yaml"]: rougailconfig["main_dictionaries"] = [str(file_name)] _test_structural_files(file_name, namespace, rougailconfig) def test_structural_files_formatter_namespace(test_dir): namespace = True rougailconfig = get_rougail_config(test_dir, namespace) if not rougailconfig: return for dir_name in rougailconfig['main_dictionaries']: for file_name in Path(dir_name).iterdir(): if file_name.suffix in [".yml", ".yaml"]: rougailconfig["main_dictionaries"] = [str(file_name)] _test_structural_files(file_name, namespace, rougailconfig) for namespace, dirs_name in rougailconfig['extra_dictionaries'].items(): rougailconfig["main_namespace"] = namespace for dir_name in dirs_name: for file_name in Path(dir_name).iterdir(): if file_name.suffix in [".yml", ".yaml"]: rougailconfig["main_dictionaries"] = [str(file_name)] _test_structural_files(file_name, namespace, rougailconfig) def test_structural_files_formatter_load(test_dir): namespace = True rougailconfig = get_rougail_config(test_dir, namespace) if not rougailconfig: return output_director = get_output_director(namespace) / test_dir.name if not output_director.is_dir(): return rougail = Rougail(rougailconfig) config = rougail.run() before_config_dict = dict(config_to_dict(config.value.get())) # rougailconfig['main_dictionaries'] = [str(output_director / Path(dirpath).name) for dirpath in rougailconfig["main_dictionaries"]] extra_dictionaries = {} for ns, dirpaths in rougailconfig['extra_dictionaries'].items(): extra_dictionaries[ns] = [str(output_director / Path(dirpath).name) for dirpath in dirpaths] rougailconfig['extra_dictionaries'] = extra_dictionaries rougail = Rougail(rougailconfig) config = rougail.run() after_config_dict = dict(config_to_dict(config.value.get())) assert before_config_dict == after_config_dict, f'directory {test_dir}'