Source code for cis_interface.metaschema.datatypes.tests.test_JSONObjectMetaschemaType
import copy
import numpy as np
from cis_interface import serialize
from cis_interface.tests import assert_equal
from cis_interface.metaschema.datatypes.JSONObjectMetaschemaType import (
JSONObjectMetaschemaType)
from cis_interface.metaschema.datatypes.tests import test_MetaschemaType as parent
from cis_interface.metaschema.datatypes.tests import (
test_ContainerMetaschemaType as container_utils)
[docs]def test_coerce():
r"""Test serialization of coerced types."""
typedef = {'type': 'object',
'properties': {'a': {'type': '1darray',
'subtype': 'float',
'title': 'a',
'precision': 64}}}
x = JSONObjectMetaschemaType(**typedef)
key_order = ['a']
msg_recv = {'a': np.zeros(3, 'float64')}
msg_send_list = [serialize.dict2numpy(msg_recv, order=key_order),
serialize.dict2pandas(msg_recv, order=key_order),
serialize.dict2list(msg_recv, order=key_order)]
def do_send_recv(msg_send):
msg_seri = x.serialize(msg_send, tyepdef=typedef, key_order=key_order)
assert_equal(x.deserialize(msg_seri)[0], msg_recv)
for y in msg_send_list:
do_send_recv(y)
[docs]class TestJSONObjectMetaschemaType(parent.TestMetaschemaType):
r"""Test class for JSONObjectMetaschemaType class."""
_mod = 'JSONObjectMetaschemaType'
_cls = 'JSONObjectMetaschemaType'
def __init__(self, *args, **kwargs):
super(TestJSONObjectMetaschemaType, self).__init__(*args, **kwargs)
self._value = {}
self._fulldef = {'type': self.import_cls.name,
'properties': {}}
self._typedef = {'properties': {}}
for i, k in zip(range(container_utils._count), 'abcdefg'):
self._value[k] = container_utils._vallist[i]
self._fulldef['properties'][k] = container_utils._deflist[i]
self._typedef['properties'][k] = container_utils._typedef[i]
self._valid_encoded = [self._fulldef]
self._valid_decoded = [self._value]
self._invalid_encoded += [
{'type': self._fulldef['type'],
'properties': {'a': self._fulldef['properties']['a']}}]
self._invalid_encoded.append(copy.deepcopy(self._fulldef))
del self._invalid_encoded[-1]['properties']['a']['type']
self._invalid_encoded.append(copy.deepcopy(self._fulldef))
self._invalid_encoded[-1]['properties']['a']['type'] = 'invalid'
self._compatible_objects = [(self._value, self._value, None)]