~mathiaz/+junk/image-store-proxy-pkg-ubuntu

« back to all changes in this revision

Viewing changes to imagestore/lib/tests/test_jsonobject.py

  • Committer: Mathias Gug
  • Date: 2009-09-14 15:35:26 UTC
  • Revision ID: mathias.gug@canonical.com-20090914153526-9x42slhhw3ixcodu
Import initial upstream code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from imagestore.lib.jsonobject import JSONObject, MissingValueError
 
2
from imagestore.lib.tests import TestCase
 
3
 
 
4
 
 
5
 
 
6
class JSONObjectTest(TestCase):
 
7
 
 
8
    def testIsDict(self):
 
9
        obj = JSONObject()
 
10
        obj["key"] = "value"
 
11
        self.assertEquals(obj["key"], "value")
 
12
        self.assertTrue(isinstance(obj, dict))
 
13
 
 
14
    def testCopyDictConstructor(self):
 
15
        obj = JSONObject({"key": "value"})
 
16
        self.assertEquals(obj["key"], "value")
 
17
 
 
18
    def testParseJSONConstructor(self):
 
19
        obj = JSONObject('{"key": "value"}')
 
20
        self.assertEquals(obj["key"], "value")
 
21
 
 
22
    def testParseJSONConstructorWithUnicode(self):
 
23
        obj = JSONObject(u'{"key": "value"}')
 
24
        self.assertEquals(obj["key"], "value")
 
25
 
 
26
    def testParseDictionaryOnly(self):
 
27
        # That's a valid JSON object, but not a valid JSONObject. :-)
 
28
        self.assertRaises(ValueError, JSONObject, '"a"')
 
29
 
 
30
    def testRequiredFields(self):
 
31
        class MyObject(JSONObject):
 
32
            required = ["uri"]
 
33
        obj = MyObject(uri="http://...")
 
34
        self.assertEquals(obj["uri"], "http://...")
 
35
        self.assertRaises(MissingValueError, MyObject, a=1)
 
36
 
 
37
    def testSubObjects(self):
 
38
        class MySubObject(JSONObject):
 
39
            pass
 
40
        class MyObject(JSONObject):
 
41
            subtypes = {"key": MySubObject}
 
42
        obj = MyObject({"key": {"subkey": "subvalue"}})
 
43
        self.assertEquals(type(obj["key"]), MySubObject)
 
44
 
 
45
    def testListSubObjects(self):
 
46
        class MySubObject(JSONObject):
 
47
            pass
 
48
        class MyObject(JSONObject):
 
49
            subtypes = {"key": MySubObject}
 
50
        obj = MyObject({"key": [{"subkey": "subvalue"}]})
 
51
        self.assertEquals(type(obj["key"][0]), MySubObject)
 
52
 
 
53
    def testCopyMethod(self):
 
54
        class MySubObject(JSONObject):
 
55
            pass
 
56
        class MyObject(JSONObject):
 
57
            subtypes = {"key": MySubObject}
 
58
        obj = MyObject({"key": {"subkey": "subvalue"}})
 
59
        objCopy = obj.copy()
 
60
        self.assertEquals(objCopy, obj)
 
61
        self.assertNotIdentical(objCopy, obj)
 
62
 
 
63
        self.assertEquals(objCopy["key"], obj["key"])
 
64
        self.assertNotIdentical(objCopy["key"], obj["key"])
 
65
 
 
66
    def testToJSON(self):
 
67
        obj = JSONObject({"key": "value"})
 
68
        self.assertEquals(str(obj), '{"key": "value"}')
 
69
 
 
70
    def testToJSONWithSubObjects(self):
 
71
        class MySubObject(JSONObject):
 
72
            pass
 
73
        class MyObject(JSONObject):
 
74
            subtypes = {"key": MySubObject}
 
75
        obj = MyObject({"key": {"subkey": "subvalue"}})
 
76
        self.assertEquals(str(obj), '{"key": {"subkey": "subvalue"}}')
 
77
 
 
78
    def testInitializationSingleValuePreservesIdentity(self):
 
79
        class MySubObject(JSONObject):
 
80
            pass
 
81
        class MyObject(JSONObject):
 
82
            subtypes = {"key": MySubObject}
 
83
        subobj = MySubObject({"subkey": "subvalue"})
 
84
        obj = MyObject({"key": subobj})
 
85
        self.assertIdentical(obj["key"], subobj)
 
86
 
 
87
    def testInitializationListValuePreservesIdentity(self):
 
88
        class MySubObject(JSONObject):
 
89
            pass
 
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)
 
97
 
 
98
    def testEqualityChecksSameType(self):
 
99
        class MyObject(JSONObject):
 
100
            pass
 
101
        self.assertTrue(JSONObject({"Hello": "there!"}) ==
 
102
                        JSONObject({"Hello": "there!"}))
 
103
        self.assertFalse(JSONObject({"Hello": "there!"}) ==
 
104
                         {"Hello": "there!"})
 
105
        self.assertFalse(JSONObject({"Hello": "there!"}) ==
 
106
                         MyObject({"Hello": "there!"}))
 
107
        self.assertFalse(MyObject({"Hello": "there!"}) ==
 
108
                         JSONObject({"Hello": "there!"}))
 
109
 
 
110