/
test_convertible.py
139 lines (105 loc) · 4.67 KB
/
test_convertible.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import unittest
import tempfile
import os
from datetime import datetime
from convertible import from_json, to_json, read_json, write_json, to_dict
class Klass:
def __init__(self, member1, member2):
self.member1 = member1
self.member2 = member2
class TestDictionary(unittest.TestCase):
def test_datetime_member(self):
datetime_value = datetime(2014, 6, 28, hour=7, minute=58, second=59)
obj = Klass("value1", datetime_value)
d = to_dict(obj)
self.assertEquals(datetime_value, d["member2"])
class TestJson(unittest.TestCase):
def test_from_object_json(self):
json_text = '{"member1": "value", "member2": 345}'
actual = from_json(json_text)
self.assertEquals("value", actual.member1)
self.assertEquals(345, actual.member2)
def test_from_nested_json(self):
json_text = '{"member1": "value1", "member2": {"member1": 345, "member2": "value2"}}'
actual = from_json(json_text)
self.assertEquals("value1", actual.member1)
self.assertEquals(345, actual.member2.member1)
self.assertEquals("value2", actual.member2.member2)
def test_from_nested_json_list(self):
json_text = '{"member1": "value1", "member2": [{"member1": 345, "member2": "value2"}]}'
actual = from_json(json_text)
self.assertEquals("value1", actual.member1)
self.assertEquals(1, len(actual.member2))
self.assertEquals(345, actual.member2[0].member1)
self.assertEquals("value2", actual.member2[0].member2)
def test_from_list_json(self):
json_text = '[{"member1": "value1", "member2": 123}, {"member1": "value2", "member2": 345}]'
actual = from_json(json_text)
self.assertEquals(2, len(actual))
self.assertEquals("value1", actual[0].member1)
self.assertEquals(123, actual[0].member2)
self.assertEquals("value2", actual[1].member1)
self.assertEquals(345, actual[1].member2)
def test_object_to_json(self):
obj = Klass("value", 345)
actual = to_json(obj)
expected = '{"member1": "value", "member2": 345}'
self.assertEquals(expected, actual)
def test_nested_to_json(self):
obj = Klass(True, Klass("value", 345))
actual = to_json(obj)
expected = '{"member1": true, "member2": {"member1": "value", "member2": 345}}'
self.assertEquals(expected, actual)
def test_list_to_json(self):
objects_list = [Klass("value1", 123), Klass("value2", 345)]
actual = to_json(objects_list)
expected = '[{"member1": "value1", "member2": 123}, {"member1": "value2", "member2": 345}]'
self.assertEquals(expected, actual)
def test_dictionary_to_json(self):
objects_dict = {"obj1": Klass("value1", 123), "obj2": Klass("value2", 345)}
actual = to_json(objects_dict)
expected = '{"obj1": {"member1": "value1", "member2": 123}, "obj2": {"member1": "value2", "member2": 345}}'
self.assertEquals(expected, actual)
def test_datetime_to_json(self):
datetime_value = datetime(2014, 6, 28, hour=7, minute=58, second=59)
obj = Klass("value1", datetime_value)
actual = to_json(obj)
expected = '{"member1": "value1", "member2": "2014-06-28 07:58:59"}'
self.assertEquals(expected, actual)
class TestJsonFile(unittest.TestCase):
def temp_text(self, text=''):
fd, filename = tempfile.mkstemp()
f = os.fdopen(fd, 'w')
f.write(text)
f.close()
return filename
def test_read_file(self):
filename = self.temp_text('{"member1": "value", "member2": 345}')
actual = read_json(filename)
self.assertEquals("value", actual.member1)
self.assertEquals(345, actual.member2)
def test_write_file(self):
filename = self.temp_text()
obj = Klass("value", 345)
write_json(filename, obj)
actual = read_json(filename)
self.assertEquals("value", actual.member1)
self.assertEquals(345, actual.member2)
def test_from_non_existing_file(self):
filename = self.temp_text('{"member1": "value", "member2": 345}')
os.remove(filename)
actual = read_json(filename)
self.assertIsNone(actual)
def test_from_empty_file(self):
filename = self.temp_text()
actual = read_json(filename)
self.assertIsNone(actual)
def test_from_new_lines_and_spaces(self):
filename = self.temp_text(' \n \n \n')
actual = read_json(filename)
self.assertIsNone(actual)
def test_None_to_json(self):
filename = self.temp_text()
write_json(filename, None)
actual = read_json(filename)
self.assertIsNone(actual)