tiramisu-api-python/test/test_json.py

258 lines
8.9 KiB
Python

# -*- coding: utf-8 -*-
from json import loads
from os import listdir
from os.path import dirname, abspath, join, normpath, splitext
# import warnings
# from tiramisu.error import ValueWarning
from tiramisu_json_api import Config
from tiramisu_json_api.error import PropertiesOptionError
from tiramisu_json_api.setting import undefined
# warnings.simplefilter("always", ValueWarning)
def list_data(ext='.json'):
datadir = join(normpath(dirname(abspath(__file__))), 'data')
filenames = listdir(datadir)
filenames.sort()
for filename in filenames:
if filename.endswith(ext):
yield join(datadir, filename)
def error_to_str(dico):
for key, value in dico.items():
if isinstance(value, list):
for idx, val in enumerate(value):
if (isinstance(val, str) and val.startswith('cannot access to')) or isinstance(val, PropertiesOptionError):
dico[key][idx] = "PropertiesOptionError"
return dico
def test_dict():
debug = False
# debug = True
for filename in list_data():
if debug:
print('test_jsons', filename)
with open(filename, 'r') as fh:
json = loads(fh.read())
#
config = Config(json)
with open(filename[:-4] + 'dict', 'r') as fh:
dico = loads(fh.read())
if debug:
from pprint import pprint
pprint(dico)
print('-----')
pprint(config.value.dict())
assert error_to_str(dico) == error_to_str(config.value.dict())
def test_get():
debug = False
# debug = True
for filename in list_data():
if debug:
print(filename)
with open(filename, 'r') as fh:
json = loads(fh.read())
config = Config(json)
with open(filename[:-4] + 'dict', 'r') as fh:
dico = error_to_str(loads(fh.read()))
for key, value in dico.items():
if config.option(key).option.isleader():
leader_len = len(value)
if config.option(key).option.isfollower():
values = []
for index in range(leader_len):
val = config.option(key, index).value.get()
if isinstance(val, PropertiesOptionError):
val = "PropertiesOptionError"
values.append(val)
assert value == values
else:
assert value == config.option(key).value.get()
def test_owner():
debug = False
# debug = True
for filename in list_data():
if debug:
print(filename)
with open(filename, 'r') as fh:
json = loads(fh.read())
config = Config(json)
with open(filename[:-4] + 'owner', 'r') as fh:
dico = loads(fh.read())
for key, value in dico.items():
if debug:
print('key', key)
if config.option(key).option.isleader():
leader_len = len(config.option(key).value.get())
if config.option(key).option.isfollower():
values = {}
for index in range(leader_len):
try:
values[str(index)] = config.option(key, index).owner.get()
except PropertiesOptionError:
pass
assert value == values
else:
assert value == {'null': config.option(key).owner.get()}
def test_prop():
debug = False
# debug = True
for filename in list_data():
if debug:
print(filename)
with open(filename, 'r') as fh:
json = loads(fh.read())
config = Config(json)
with open(filename[:-4] + 'prop', 'r') as fh:
dico = loads(fh.read())
for key, value in dico.items():
if debug:
print('key', key)
for key_, val in value.items():
value[key_] = set(val)
if config.option(key).option.isleader():
leader_len = len(config.option(key).value.get())
if config.option(key).option.isfollower():
props = {}
for index in range(leader_len):
try:
props[str(index)] = set(config.option(key, index).property.get())
except PropertiesOptionError:
pass
if 'clearable' in props[str(index)]:
props[str(index)].remove('clearable')
else:
props = {'null': set(config.option(key).property.get())}
if 'clearable' in props['null']:
props['null'].remove('clearable')
assert value == props
def test_prop2():
debug = False
# debug = True
for filename in list_data():
with open(filename, 'r') as fh:
json = loads(fh.read())
config = Config(json)
with open(filename[:-4] + 'prop2', 'r') as fh:
dico = loads(fh.read())
for key, value in dico.items():
if debug:
print('key', key)
for key_, val in value.items():
value[key_] = set(val)
if config.option(key).option.isleader():
leader_len = len(config.option(key).value.get())
if config.option(key).option.isfollower():
props = {}
for index in range(leader_len):
try:
props[str(index)] = set(config.option(key, index).property.get(True))
except PropertiesOptionError:
pass
if 'clearable' in props[str(index)]:
props[str(index)].remove('clearable')
else:
props = {'null': set(config.option(key).property.get(True))}
if 'clearable' in props['null']:
props['null'].remove('clearable')
assert value == props
def test_info():
for filename in list_data():
with open(filename, 'r') as fh:
json = loads(fh.read())
config = Config(json)
with open(filename[:-4] + 'info', 'r') as fh:
dico = loads(fh.read())
for key, values in dico.items():
for info, value in values.items():
assert getattr(config.option(key).option, info)() == value, 'error for {} in {}'.format(info, filename)
def test_mod():
debug = False
debug = True
i = 0
while True:
i += 1
lists = list(list_data('.mod{}'.format(i)))
if not lists:
break
for filename in lists:
if debug:
print('test_mod', filename)
with open(filename[:-4] + 'json', 'r') as fh:
json = loads(fh.read())
#
config = Config(json)
with open(filename) as fh:
mod = loads(fh.read())
if debug:
print(mod['cmd'])
if isinstance(mod['cmd'], list):
for cmd in mod['cmd']:
eval(cmd)
else:
eval(mod['cmd'])
#
if debug:
from pprint import pprint
pprint(config.updates)
print('----------------')
pprint(mod['body']['updates'])
assert config.updates == mod['body']['updates']
with open(filename[:-4] + 'dict{}'.format(i), 'r') as fh:
dico1 = loads(fh.read())
if debug:
from pprint import pprint
pprint(dico1)
print('----------------')
pprint(config.value.dict())
assert dico1 == config.value.dict()
def test_mod():
debug = False
# debug = True
i = 0
while True:
i += 1
lists = list(list_data('.mod{}'.format(i)))
if not lists:
break
for filename in lists:
if debug:
print('test_mod', filename)
with open(filename[:-4] + 'json', 'r') as fh:
json = loads(fh.read())
#
config = Config(json)
#
with open(filename[:-4] + 'updates{}'.format(i), 'r') as fh:
data = loads(fh.read())
config.updates_data(data)
with open(filename[:-4] + 'dict{}'.format(i), 'r') as fh:
dico1 = loads(fh.read())
if debug:
from pprint import pprint
pprint(dico1)
print('----------------')
pprint(config.value.dict())
assert dico1 == config.value.dict()