Files
deb-python-colander/cereal/tests.py

77 lines
2.8 KiB
Python

import unittest
class TestFunctional(unittest.TestCase):
def _makeSchema(self):
import cereal
integer = cereal.Structure(
'int', cereal.Integer(), validator=cereal.Range(0, 10))
ob = cereal.Structure('ob', cereal.GlobalObject(package=cereal))
tup = cereal.Structure('tup', cereal.Tuple())
tup.add(cereal.Structure('tupint', cereal.Integer()))
tup.add(cereal.Structure('tupstring', cereal.String()))
seq = cereal.Structure('seq', cereal.Sequence(tup))
mapping = cereal.Structure('mapping', cereal.Mapping())
seq2 = cereal.Structure('seq2', cereal.Sequence(mapping))
mapping.add(cereal.Structure('key', cereal.Integer()))
mapping.add(cereal.Structure('key2', cereal.Integer()))
schema = cereal.Structure('', cereal.Mapping())
schema.add(integer)
schema.add(ob)
schema.add(tup)
schema.add(seq)
schema.add(seq2)
return schema
def test_deserialize_ok(self):
import cereal.tests
data = {
'int':'10',
'ob':'cereal.tests',
'tup':('1', 's'),
'seq':[('1', 's'),('2', 's'), ('3', 's'), ('4', 's')],
'seq2':[{'key':'1', 'key2':'2'}, {'key':'3', 'key2':'4'}],
}
schema = self._makeSchema()
result = schema.deserialize(data)
self.assertEqual(result['int'], 10)
self.assertEqual(result['ob'], cereal.tests)
self.assertEqual(result['tup'], (1, 's'))
self.assertEqual(result['seq'],
[(1, 's'), (2, 's'), (3, 's'), (4, 's')])
self.assertEqual(result['seq2'],
[{'key':1, 'key2':2}, {'key':3, 'key2':4}])
def test_invalid_asdict(self):
expected = {
'int': '20 is greater than maximum value 10',
'ob': "The dotted name 'no.way.this.exists' cannot be imported",
'seq.0.0': "'q' is not a number",
'seq.1.0': "'w' is not a number",
'seq.2.0': "'e' is not a number",
'seq.3.0': "'r' is not a number",
'seq2.0.key': "'t' is not a number",
'seq2.0.key2': "'y' is not a number",
'seq2.1.key': "'u' is not a number",
'seq2.1.key2': "'i' is not a number",
'tup.0': "'s' is not a number"}
import cereal
data = {
'int':'20',
'ob':'no.way.this.exists',
'tup':('s', 's'),
'seq':[('q', 's'),('w', 's'), ('e', 's'), ('r', 's')],
'seq2':[{'key':'t', 'key2':'y'}, {'key':'u', 'key2':'i'}],
}
schema = self._makeSchema()
try:
schema.deserialize(data)
except cereal.Invalid, e:
errors = e.asdict()
self.assertEqual(errors, expected)