from lxml import etree from os import getcwd 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 Config dico_dirs = 'tests/dictionaries' test_ok = set() test_raise = set() for test in listdir(dico_dirs): if isdir(join(dico_dirs, test)): if isdir(join(dico_dirs, test, 'tiramisu')): test_ok.add(test) elif test != '__pycache__': test_raise.add(test) excludes = set([]) #excludes = set(['01base_file_utfchar']) test_ok -= excludes test_raise -= excludes #test_ok = ['10leadership_autoleader'] #test_raise = [] ORI_DIR = getcwd() debug = False #debug = True 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): eolobj = objspace.CreoleObjSpace(Config['dtdfilename']) dirs = [test_dir] subfolder = join(test_dir, 'subfolder') if isdir(subfolder): dirs.append(subfolder) eolobj.create_or_populate_from_xml(Config['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') Config['patch_dir'] = join(test_dir, 'patches') eolobj.space_visitor(eosfunc) tiramisu_objects = eolobj.save() tiramisu_dir = join(test_dir, 'tiramisu') tiramisu_file = join(tiramisu_dir, 'base.py') if not isfile(tiramisu_file) or debug: with open(tiramisu_file, 'w') as fh: fh.write(tiramisu_objects) with open(tiramisu_file, 'r') as fh: tiramisu_objects_ori = fh.read() assert tiramisu_objects == tiramisu_objects_ori 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): assert getcwd() == ORI_DIR test_dir = join(dico_dirs, test_dir) launch_flattener(test_dir, True) assert getcwd() == ORI_DIR def test_error_dictionary(test_dir_error): assert getcwd() == ORI_DIR test_dir = join(dico_dirs, test_dir_error) with raises(DictConsistencyError): launch_flattener(test_dir) assert getcwd() == ORI_DIR def test_no_dtd(): with raises(IOError): eolobj = objspace.CreoleObjSpace('notexists.dtd')