1
from imagestore.lib.jsonobject import JSONObject, MissingValueError
2
from imagestore.lib.tests import TestCase
6
class JSONObjectTest(TestCase):
11
self.assertEquals(obj["key"], "value")
12
self.assertTrue(isinstance(obj, dict))
14
def testCopyDictConstructor(self):
15
obj = JSONObject({"key": "value"})
16
self.assertEquals(obj["key"], "value")
18
def testParseJSONConstructor(self):
19
obj = JSONObject('{"key": "value"}')
20
self.assertEquals(obj["key"], "value")
22
def testParseJSONConstructorWithUnicode(self):
23
obj = JSONObject(u'{"key": "value"}')
24
self.assertEquals(obj["key"], "value")
26
def testParseDictionaryOnly(self):
27
# That's a valid JSON object, but not a valid JSONObject. :-)
28
self.assertRaises(ValueError, JSONObject, '"a"')
30
def testRequiredFields(self):
31
class MyObject(JSONObject):
33
obj = MyObject(uri="http://...")
34
self.assertEquals(obj["uri"], "http://...")
35
self.assertRaises(MissingValueError, MyObject, a=1)
37
def testSubObjects(self):
38
class MySubObject(JSONObject):
40
class MyObject(JSONObject):
41
subtypes = {"key": MySubObject}
42
obj = MyObject({"key": {"subkey": "subvalue"}})
43
self.assertEquals(type(obj["key"]), MySubObject)
45
def testListSubObjects(self):
46
class MySubObject(JSONObject):
48
class MyObject(JSONObject):
49
subtypes = {"key": MySubObject}
50
obj = MyObject({"key": [{"subkey": "subvalue"}]})
51
self.assertEquals(type(obj["key"][0]), MySubObject)
53
def testCopyMethod(self):
54
class MySubObject(JSONObject):
56
class MyObject(JSONObject):
57
subtypes = {"key": MySubObject}
58
obj = MyObject({"key": {"subkey": "subvalue"}})
60
self.assertEquals(objCopy, obj)
61
self.assertNotIdentical(objCopy, obj)
63
self.assertEquals(objCopy["key"], obj["key"])
64
self.assertNotIdentical(objCopy["key"], obj["key"])
67
obj = JSONObject({"key": "value"})
68
self.assertEquals(str(obj), '{"key": "value"}')
70
def testToJSONWithSubObjects(self):
71
class MySubObject(JSONObject):
73
class MyObject(JSONObject):
74
subtypes = {"key": MySubObject}
75
obj = MyObject({"key": {"subkey": "subvalue"}})
76
self.assertEquals(str(obj), '{"key": {"subkey": "subvalue"}}')
78
def testInitializationSingleValuePreservesIdentity(self):
79
class MySubObject(JSONObject):
81
class MyObject(JSONObject):
82
subtypes = {"key": MySubObject}
83
subobj = MySubObject({"subkey": "subvalue"})
84
obj = MyObject({"key": subobj})
85
self.assertIdentical(obj["key"], subobj)
87
def testInitializationListValuePreservesIdentity(self):
88
class MySubObject(JSONObject):
90
class MyObject(JSONObject):
91
subtypes = {"key": MySubObject}
92
subobj1 = MySubObject({"subkey": "subvalue1"})
93
subobj2 = MySubObject({"subkey": "subvalue2"})
94
obj = MyObject({"key": [subobj1, subobj2]})
95
self.assertIdentical(obj["key"][0], subobj1)
96
self.assertIdentical(obj["key"][1], subobj2)
98
def testEqualityChecksSameType(self):
99
class MyObject(JSONObject):
101
self.assertTrue(JSONObject({"Hello": "there!"}) ==
102
JSONObject({"Hello": "there!"}))
103
self.assertFalse(JSONObject({"Hello": "there!"}) ==
105
self.assertFalse(JSONObject({"Hello": "there!"}) ==
106
MyObject({"Hello": "there!"}))
107
self.assertFalse(MyObject({"Hello": "there!"}) ==
108
JSONObject({"Hello": "there!"}))