rougail-output-doc/tests/test_load.py

153 lines
6 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import warnings
from json import dumps, loads
from pytest import fixture # , raises
from pathlib import Path
from contextlib import chdir
from rougail import Rougail
from rougail.output_doc import RougailOutputDoc as RougailOutput
from rougail_tests.utils import get_structures_list, get_rougail_config, get_values_for_config
HERE = Path(__file__).parent
excludes = []
excludes = [
'60_5family_dynamic_unknown_suffix',
'60_5family_dynamic_variable_outside_sub_suffix',
]
test_ok = get_structures_list(excludes)
# test_ok = [HERE.parent.parent / "rougail-tests" / "structures" / "60_5family_dynamic_calc_description"]
os.environ['COLUMNS'] = '80'
def idfn(fixture_value):
return fixture_value.name
@fixture(scope="module", params=test_ok, ids=idfn)
def test_dir(request):
return request.param
EXT = {'github': 'md', 'asciidoc': 'adoc', 'json': 'json', 'console': 'sh', 'gitlab': 'gitlab.md', "html": "html"}
#EXT = {'console': 'sh'}
def gen_cases(ext_name):
# if ext_name != "json":
# yield [False, True, True, False]
# return
for without_family in [False, True]:
for comment in [False, True]:
for examples in [False, True]:
if comment and not examples:
continue
if examples and ext_name == "json":
continue
if without_family and examples:
continue
for changelog in [False, True]:
if changelog and examples:
continue
if not without_family and changelog:
continue
if changelog and ext_name == "json":
continue
yield without_family, comment, examples, changelog
def _test_structural_files(test_dir, namespace):
with chdir(HERE):
rougailconfig = get_rougail_config(test_dir, namespace, relative_to=HERE)
if not rougailconfig:
return
rougailconfig['tiramisu_cache'] = 'p.py'
##################################
rougailconfig['step.output'] = 'doc'
doc = None
for ext_name, ext in EXT.items():
rougailconfig['doc.contents'] = []
rougailconfig['doc.output_format'] = ext_name
for without_family, comment, examples, changelog in gen_cases(ext_name):
# print(f"ext_name: {ext_name}, without_family: {without_family}, comment: {comment}, examples: {examples}, changelog: {changelog}")
if changelog:
rougailconfig["doc.contents"] = ["changelog"]
rougailconfig["doc.previous_json_file"] = str(HERE / "empty" / "out.json")
# FIXME
rougailconfig['doc.without_family'] = True
elif examples:
rougailconfig['doc.contents'] = ['example']
if comment:
rougailconfig["doc.comment_examples"] = True
else:
rougailconfig["doc.comment_examples"] = False
else:
rougailconfig['doc.contents'] = ['variables']
if without_family:
rougailconfig['doc.without_family'] = True
else:
rougailconfig['doc.without_family'] = False
if doc is None:
with warnings.catch_warnings(record=True) as rougail_wn:
warnings.simplefilter("always", UserWarning)
rougail = Rougail(rougailconfig)
config = rougail.run()
doc = RougailOutput(config, rougailconfig=rougailconfig)
with warnings.catch_warnings(record=True) as wn:
warnings.simplefilter("always", UserWarning)
generated_output = doc.run()[1]
warns = [str(w.message) for w in rougail_wn]
for w in wn:
m = str(w.message)
if m not in warns:
warns.append(m)
##################################
dir_name = 'test'
if namespace:
dir_name += '_namespace'
elif (test_dir / 'force_namespace').is_file():
continue
##################################
if examples:
dir_name += '_examples'
if comment:
dir_name += '_comment'
if without_family:
dir_name += '_without_family'
test_file = test_dir.name
if changelog:
test_file += ".changelog"
##################################
output_file = HERE / 'results' / dir_name / (test_file + "." + ext)
# print('====', output_file)
if not output_file.is_file():
if not output_file.parent.is_dir():
output_file.parent.mkdir()
with output_file.open('w') as outfh:
outfh.write(generated_output)
with output_file.open() as outfh:
attented_output = outfh.read()
assert generated_output == attented_output, f'filename {output_file}'
#
output_file = HERE / 'results' / dir_name / ("warnings_" + test_dir.name)
if not output_file.is_file():
if not output_file.parent.is_dir():
output_file.parent.mkdir()
with output_file.open('w') as outfh:
outfh.write(dumps(warns))
with output_file.open() as outfh:
attented_output = loads(outfh.read())
assert warns == attented_output, f'filename {output_file}'
def test_structural_files(test_dir):
_test_structural_files(test_dir, False)
def test_no_namespace_structural_files(test_dir):
_test_structural_files(test_dir, True)