6
from miro import schema
7
from miro.schema import (SchemaString, SchemaInt, SchemaFloat, SchemaBool,
8
SchemaDateTime, SchemaList, SchemaDict, SchemaObject,
9
SchemaReprContainer, ValidationError)
10
from miro.test.framework import MiroTestCase
12
class TestValidation(MiroTestCase):
13
def test_module_variables_defined(self):
14
self.assert_(hasattr(schema, 'VERSION'))
15
self.assert_(hasattr(schema, 'object_schemas'))
17
def test_none_validation(self):
18
self.assertRaises(ValidationError, SchemaInt(noneOk=False).validate,
20
self.assertRaises(ValidationError, SchemaInt().validate, None)
21
SchemaInt(noneOk=True).validate(None)
23
def test_bool_validation(self):
24
schemabool = SchemaBool()
25
self.assertRaises(ValidationError, schemabool.validate, 1)
26
self.assertRaises(ValidationError, schemabool.validate, 0)
27
self.assertRaises(ValidationError, schemabool.validate, "True")
28
self.assertRaises(ValidationError, schemabool.validate, None)
29
schemabool.validate(True)
30
schemabool.validate(False)
32
def test_date_time_validation(self):
33
schemadatetime = SchemaDateTime()
34
self.assertRaises(ValidationError, schemadatetime.validate, 1)
35
self.assertRaises(ValidationError, schemadatetime.validate, 0)
36
delta = datetime.timedelta(days=40)
37
self.assertRaises(ValidationError, schemadatetime.validate, delta)
38
schemadatetime.validate(datetime.datetime(1980, 8, 1))
40
def test_int_validation(self):
41
schemaint = SchemaInt()
42
self.assertRaises(ValidationError, schemaint.validate, "One")
43
self.assertRaises(ValidationError, schemaint.validate, 1.4)
45
schemaint.validate(1L)
47
def test_float_validation(self):
48
schemafloat = SchemaFloat()
49
self.assertRaises(ValidationError, schemafloat.validate, "One half")
50
self.assertRaises(ValidationError, schemafloat.validate, 1)
51
schemafloat.validate(1.4)
53
def test_string_validation(self):
54
schemastring = SchemaString()
55
self.assertRaises(ValidationError, schemastring.validate, 10123)
56
self.assertRaises(ValidationError, schemastring.validate, "10123")
57
schemastring.validate(u"10123")
59
def test_repr_container_validatoin(self):
60
schemasimple = SchemaReprContainer()
61
schemasimple.validate({1: u"Ben", u"pie": 3.1415})
62
schemasimple.validate([1, 1, u"two", u"three", 5])
63
schemasimple.validate({u'y2k': datetime.datetime(2000, 1, 1),
64
'now': time.localtime()})
65
schemasimple.validate({
66
'fib': (1, 1, u"two", u"three", 5),
67
'square': (1, 4, u"nine", 16),
68
'fact': (1, 2.0, 6, u"twenty-four"),
70
# make sure circular references doesn't screw it up
75
schemasimple.validate(l)
76
schemasimple.validate(d)
78
class TestObject(object):
80
self.assertRaises(ValidationError, schemasimple.validate,
82
self.assertRaises(ValidationError, schemasimple.validate,
84
self.assertRaises(ValidationError, schemasimple.validate,
85
{'object': TestObject()})
87
def test_list_validation(self):
88
schemalist = SchemaList(SchemaInt())
89
self.assertRaises(ValidationError, schemalist.validate,
91
schemalist.validate([1, 2, 3, 4])
93
def test_dict_validation(self):
94
schemadict = SchemaDict(SchemaInt(), SchemaString())
95
self.assertRaises(ValidationError, schemadict.validate,
97
schemadict.validate({12: u"Buckle my shoe"})
99
def test_object_validation(self):
100
class TestObject(object):
102
class ChildObject(TestObject):
105
schemaobject = SchemaObject(TestObject)
106
self.assertRaises(ValidationError, schemaobject.validate, 1234)
107
schemaobject.validate(TestObject())
108
# child objects should work
109
schemaobject.validate(ChildObject())
110
# the actual class object shouldn't
111
self.assertRaises(ValidationError, schemaobject.validate, TestObject)
113
if __name__ == '__main__':