2024-12-23 20:54:52 +01:00
|
|
|
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 = [
|
2025-01-04 11:44:09 +01:00
|
|
|
# "16_6exists_family",
|
2024-12-23 20:54:52 +01:00
|
|
|
]
|
|
|
|
|
|
|
|
test_ok = get_structures_list(excludes)
|
2025-01-04 11:44:09 +01:00
|
|
|
# test_ok = [Path('../rougail-tests/structures/16_6exists_family')]
|
2024-12-23 20:54:52 +01:00
|
|
|
|
|
|
|
|
|
|
|
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
|
2025-02-10 09:46:31 +01:00
|
|
|
generated_output = RougailOutput(config, rougailconfig=rougailconfig).run()[1]
|
2024-12-23 20:54:52 +01:00
|
|
|
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}'
|