rougail-output-doc/tests/test_load.py

104 lines
3.4 KiB
Python
Raw Permalink Normal View History

2024-07-10 21:27:48 +02:00
from pytest import fixture # , raises
from pathlib import Path
from ruamel.yaml import YAML
from rougail import RougailConfig
from rougail.output_doc import RougailOutputDoc
from .custom import CustomOption
dico_dirs = Path('../rougail/tests/dictionaries')
test_ok = set()
excludes = set([
'60_5family_dynamic_unknown_suffix',
'60_5family_dynamic_variable_outside_sub_suffix',
])
for test in dico_dirs.iterdir():
if (test / 'tiramisu').is_dir() and test.name not in excludes:
test_ok.add(test)
test_ok = list(test_ok)
test_ok.sort()
# test_ok = [dico_dirs / '60_0family_dynamic_variable_suffix']
@fixture(scope="module", params=test_ok)
def test_dir(request):
return request.param
def _test_dictionaries(test_dir, output, namespace):
rougailconfig = RougailConfig.copy()
rougailconfig['step.output'] = 'doc'
rougailconfig['doc.output_format'] = output
rougailconfig['functions_files'] = [str(dico_dirs.parent / 'eosfunc' / 'test.py')]
# rougailconfig['tiramisu_cache'] = "cache.py"
dirs = [str(test_dir / 'dictionaries' / 'rougail')]
subfolder = test_dir / 'dictionaries' / 'rougail2'
if subfolder.is_dir():
dirs.append(str(subfolder))
rougailconfig['main_dictionaries'] = dirs
if namespace:
rougailconfig['main_namespace'] = 'Rougail'
else:
rougailconfig['main_namespace'] = None
extra_dictionaries = {}
extras = list((test_dir / 'dictionaries').iterdir())
extras.sort()
for extra in extras:
if extra.name in ['rougail', 'rougail2']:
continue
if extra.is_dir():
extra_dictionaries[extra.name] = [str(extra)]
if extra_dictionaries:
rougailconfig['extra_dictionaries'] = extra_dictionaries
rougailconfig['custom_types']['custom'] = CustomOption
inventory = RougailOutputDoc(rougailconfig=rougailconfig)
doc = inventory.formater.header()
yaml = YAML()
len_subdir = len(str(dico_dirs)) + 1
if extra_dictionaries:
all_dirs = [[rougailconfig['main_dictionaries']], rougailconfig['extra_dictionaries'].values()]
else:
all_dirs = [[rougailconfig['main_dictionaries']]]
for r in all_dirs:
for dirs in r:
for d in dirs:
for f in Path(d).iterdir():
if f.name.endswith('.yml') or f.name.endswith('.yaml'):
doc += inventory.formater.title(str(f)[len_subdir:].split('/', 1)[-1], 1)
with f.open(encoding="utf8") as file_fh:
objects = yaml.load(file_fh)
doc += inventory.formater.yaml(objects)
doc += inventory.gen_doc()
if namespace:
name = 'base'
else:
name = 'no_namespace'
doc_file = Path('tests') / 'docs' / name / (test_dir.name + {'github': '.md', 'asciidoc': '.adoc'}.get(output))
with doc_file.open('w') as docfh:
docfh.write(doc)
def test_dictionaries_github(test_dir):
_test_dictionaries(test_dir, 'github', True)
def test_dictionaries_asciidoc(test_dir):
_test_dictionaries(test_dir, 'asciidoc', True)
def test_dictionaries_github_no_namespace(test_dir):
if (test_dir / 'force_namespace').is_file():
return
_test_dictionaries(test_dir, 'github', False)
def test_dictionaries_asciidoc_no_namespace(test_dir):
if (test_dir / 'force_namespace').is_file():
return
_test_dictionaries(test_dir, 'asciidoc', False)