rougail/tests/test_makedict.py

72 lines
2.0 KiB
Python

from lxml import etree
from os.path import isfile, join, isdir
from pytest import fixture, mark
from os import listdir, mkdir
from json import dump, load, dumps, loads
from tiramisu import Config
from rougail import load as rougail_load
from rougail.xml_compare import xml_compare
from rougail.error import CreoleDictConsistencyError
from rougail.config import dtdfilename
dico_dirs = 'tests/flattener_dicos'
test_ok = set()
for test in listdir(dico_dirs):
if isdir(join(dico_dirs, test)):
if isdir(join(dico_dirs, test, 'result')):
test_ok.add(test)
excludes = set([])
#excludes = set(['70container_services'])
test_ok -= excludes
#test_ok = ['10check_valid_ipnetmask']
test_ok = list(test_ok)
test_ok.sort()
@fixture(scope="module", params=test_ok)
def test_dir(request):
return request.param
async def launch_flattener(test_dir):
eosfunc = join(dico_dirs, '../eosfunc/test.py')
cache_file = test_dir + '/result/00-base.xml'
fileio = open(cache_file)
xmlroot = etree.parse(fileio).getroot()
tiramisu_objects = rougail_load(xmlroot,
dtdfilename,
eosfunc)
makedict_dir = join(test_dir, 'makedict')
makedict_file = join(makedict_dir, 'base.json')
config = await Config(tiramisu_objects)
await config.property.read_only()
await config.property.pop('mandatory')
config_dict = await config.value.dict()
# if not isfile(makedict_file) and config_dict:
if config_dict:
if not isdir(makedict_dir):
mkdir(makedict_dir)
#with open(makedict_file, 'w') as fh:
# dump(config_dict, fh)
# fh.write('\n')
if not isfile(makedict_file):
if config_dict:
raise Exception('dict is not empty')
else:
with open(makedict_file, 'r') as fh:
assert load(fh) == loads(dumps(config_dict))
@mark.asyncio
async def test_dictionary(test_dir):
test_dir = join(dico_dirs, test_dir)
await launch_flattener(test_dir)