Completed
Pull Request — master (#2588)
by Mischa
01:50
created

JSONEncoderTest.test_re_object()   A

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 4
rs 10
1
import json
2
import re
3
import unittest
4
from datetime import datetime
5
6
from coalib.output.JSONEncoder import create_json_encoder
7
8
9
class TestClass1(object):
10
11
    def __init__(self):
12
        self.a = 0
13
14
15
class TestClass2(object):
16
17
    def __init__(self):
18
        self.a = 0
19
        self.b = TestClass1()
20
21
22
class TestClass3(object):
23
24
    def __init__(self):
25
        self.a = 0
26
        self.b = TestClass1()
27
28
    @staticmethod
29
    def __getitem__(key):
30
        return "val"
31
32
    @staticmethod
33
    def keys():
34
        return ["key"]
35
36
37
class PropertiedClass(object):
38
39
    def __init__(self):
40
        self._a = 5
41
42
    @property
43
    def prop(self):
44
        return self._a
45
46
47
class JSONAbleClass(object):
48
49
    @staticmethod
50
    def __json__():
51
        return ['dont', 'panic']
52
53
54
class JSONEncoderTest(unittest.TestCase):
55
    JSONEncoder = create_json_encoder(use_relpath=True)
56
    kw = {"cls": JSONEncoder, "sort_keys": True}
57
58
    def test_builtins(self):
59
        self.assertEquals('"test"', json.dumps("test", **self.kw))
60
        self.assertEquals('1', json.dumps(1, **self.kw))
61
        self.assertEquals('true', json.dumps(True, **self.kw))
62
        self.assertEquals('null', json.dumps(None, **self.kw))
63
64
    def test_iter(self):
65
        self.assertEquals('[0, 1]', json.dumps([0, 1], **self.kw))
66
        self.assertEquals('[0, 1]', json.dumps((0, 1), **self.kw))
67
        self.assertEquals('[0, 1]', json.dumps(range(2), **self.kw))
68
69
    def test_dict(self):
70
        self.assertEquals('{"0": 1}', json.dumps({0: 1}, **self.kw))
71
        self.assertEquals('{"0": 1}', json.dumps({"0": 1}, **self.kw))
72
        self.assertEquals('{"0": "1"}', json.dumps({"0": "1"}, **self.kw))
73
74
    def test_time(self):
75
        tf = datetime.today()
76
        self.assertEquals('"' + tf.isoformat() + '"',
77
                          json.dumps(tf, **self.kw))
78
79
    def test_re_object(self):
80
        uut = re.compile('x')
81
        self.assertEqual('"' + uut.pattern + '"',
82
                         json.dumps(uut, **self.kw))
83
84
    def test_class1(self):
85
        tc1 = TestClass1()
86
        self.assertEquals('{"a": 0}', json.dumps(tc1, **self.kw))
87
        self.assertEquals('[{"a": 0}]', json.dumps([tc1], **self.kw))
88
        self.assertEquals('{"0": {"a": 0}}', json.dumps({0: tc1}, **self.kw))
89
90
    def test_class2(self):
91
        tc2 = TestClass2()
92
        self.assertEquals('{"a": 0, "b": {"a": 0}}',
93
                          json.dumps(tc2, **self.kw))
94
95
    def test_class3(self):
96
        tc3 = TestClass3()
97
        self.assertEquals('{"key": "val"}',
98
                          json.dumps(tc3, **self.kw))
99
100
    def test_propertied_class(self):
101
        uut = PropertiedClass()
102
        self.assertEqual('{"prop": 5}', json.dumps(uut, **self.kw))
103
104
    def test_jsonable_class(self):
105
        uut = JSONAbleClass()
106
        self.assertEqual('["dont", "panic"]', json.dumps(uut, **self.kw))
107
108
    def test_type_error(self):
109
        with self.assertRaises(TypeError):
110
            json.dumps(1j, **self.kw)
111