rougail/tests/test_1_flattener.py

125 lines
3.3 KiB
Python

from lxml import etree
from os.path import isfile, join, isdir
from pytest import fixture, raises
from os import listdir
from json import load
from rougail import objspace, annotator
from rougail.xml_compare import xml_compare
from rougail.error import DictConsistencyError
from rougail.config import dtdfilename, variable_namespace
destfile = '/tmp/test.xml'
dico_dirs = 'tests/flattener_dicos'
test_ok = set()
test_raise = set()
for test in listdir(dico_dirs):
if isdir(join(dico_dirs, test)):
if isdir(join(dico_dirs, test, 'result')):
test_ok.add(test)
elif test != '__pycache__':
test_raise.add(test)
excludes = set([])
test_ok -= excludes
test_raise -= excludes
#test_ok = ['11multi_disabled_if_in_filelist']
#test_raise = []
test_ok = list(test_ok)
test_raise = list(test_raise)
test_ok.sort()
test_raise.sort()
@fixture(scope="module", params=test_ok)
def test_dir(request):
return request.param
@fixture(scope="module", params=test_raise)
def test_dir_error(request):
return request.param
def compare_xml(exported_xmlfile, expected_xmlfile):
exported_document = etree.parse(exported_xmlfile).getroot()
expected_document = etree.parse(expected_xmlfile).getroot()
try:
assert xml_compare(exported_document, expected_document)
except AssertionError as err:
print()
print('Le dictionnaire exporte :')
print()
print(etree.tostring(exported_document, pretty_print=True, encoding="UTF-8").decode())
print()
print('Le dictionnaire attendu :')
print()
print(etree.tostring(expected_document, pretty_print=True, encoding="UTF-8").decode())
raise err
def launch_flattener(test_dir, test_ok=False):
debug = False
#debug = True
eolobj = objspace.CreoleObjSpace(dtdfilename)
dirs = [test_dir]
subfolder = join(test_dir, 'subfolder')
if isdir(subfolder):
dirs.append(subfolder)
eolobj.create_or_populate_from_xml(variable_namespace, dirs)
subfolder = join(test_dir, 'extra_dirs', 'extra')
if isdir(subfolder):
eolobj.create_or_populate_from_xml('extra', [subfolder])
subfolder = join(test_dir, 'extra_dirs', 'extra1')
if isdir(subfolder):
eolobj.create_or_populate_from_xml('extra1', [subfolder])
eosfunc = join(dico_dirs, '../eosfunc/test.py')
eolobj.space_visitor(eosfunc)
eolobj.save(destfile)
result_file = join(test_dir, 'result/00-base.xml')
if isfile(result_file):
if debug:
eolobj.save(result_file)
compare_xml(destfile, result_file)
elif test_ok:
raise Exception(f'no test found for {test_dir}')
def fake_traduc(txt):
return txt
def setup_module(module):
module.traduc_ori = objspace._
objspace._ = fake_traduc
annotator._ = fake_traduc
objspace.ServiceAnnotator = getattr(annotator, 'ServiceAnnotator')
def teardown_module(module):
objspace._ = module.traduc_ori
annotator._ = module.traduc_ori
def test_dictionary(test_dir):
test_dir = join(dico_dirs, test_dir)
launch_flattener(test_dir, True)
def test_error_dictionary(test_dir_error):
test_dir = join(dico_dirs, test_dir_error)
with raises(DictConsistencyError):
launch_flattener(test_dir)
def test_no_dtd():
with raises(IOError):
eolobj = objspace.CreoleObjSpace('notexists.dtd')