rougail-output-formatter/tests/test_load.py

101 lines
3.9 KiB
Python

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()
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}'