Completed
Push — master ( 11a6df...bffa60 )
by Satoru
01:09
created

Test20._assert_dicts_equal()   A

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
dl 0
loc 4
rs 10
c 1
b 0
f 0
1
#
2
# Copyright (C) 2012 - 2017 Satoru SATOH <ssato @ redhat.com>
3
# License: MIT
4
#
5
# pylint: disable=missing-docstring, protected-access
6
from __future__ import absolute_import
7
8
import os.path
9
import unittest
10
11
import anyconfig.backend.ini as TT
12
import anyconfig.tests.common
13
14
from anyconfig.compat import OrderedDict as ODict
15
from anyconfig.mdicts import UpdateWithReplaceDict
16
from anyconfig.tests.common import dicts_equal
17
18
19
CNF_0_S = """[DEFAULT]
20
a: 0
21
b: bbb
22
c: 5
23
24
[sect0]
25
d: x,y,z
26
"""
27
28
CNF_0 = ODict((("DEFAULT", ODict((("a", "0"), ("b", "bbb"), ("c", "5")))),
29
               ("sect0", ODict((("a", "0"), ("b", "bbb"), ("c", "5"),
30
                                ("d", "x,y,z"))))))
31
CNF_1 = ODict((("DEFAULT", ODict((("a", 0), ("b", "bbb"), ("c", 5)))),
32
               ("sect0", ODict((("a", 0), ("b", "bbb"), ("c", 5),
33
                                ("d", "x y z".split()))))))
34
35
36
class Test10(unittest.TestCase):
37
38
    cnf = CNF_0
39
    cnf_s = CNF_0_S
40
    load_options = dict(allow_no_value=False, defaults=None)
41
    dump_options = dict()
42
    is_order_kept = True
43
44
    def setUp(self):
45
        self.psr = TT.Parser()
46
47
    def _assert_dicts_equal(self, cnf, ordered=False, instance_check=False):
48
        self.assertTrue(dicts_equal(cnf, self.cnf, ordered=ordered),
49
                        "\n %r\nvs.\n %r" % (cnf, self.cnf))
50
        if instance_check:
51
            self.assertTrue(isinstance(cnf, UpdateWithReplaceDict))
52
53
    def test_10_loads(self):
54
        cnf = self.psr.loads(self.cnf_s)
55
        self._assert_dicts_equal(cnf, instance_check=True)
56
57
    def test_12_loads__w_options(self):
58
        cnf = self.psr.loads(self.cnf_s, **self.load_options)
59
        self._assert_dicts_equal(cnf, instance_check=True)
60
61
    def test_20_dumps(self):
62
        cnf_s = self.psr.dumps(self.cnf)
63
        self.assertTrue(cnf_s)
64
        cnf = self.psr.loads(cnf_s)
65
        self._assert_dicts_equal(cnf, instance_check=True)
66
67
    def test_22_dumps__w_options(self):
68
        cnf = self.psr.loads(self.psr.dumps(self.cnf, **self.dump_options))
69
        self._assert_dicts_equal(cnf, instance_check=True)
70
71
    def test_30_loads_with_order_kept(self):
72
        cnf = self.psr.loads(self.cnf_s, ac_ordered=True)
73
        self._assert_dicts_equal(cnf, ordered=self.is_order_kept)
74
75
76
class Test11(Test10):
77
78
    cnf = CNF_1
79
80
    def test_10_loads(self):
81
        cnf = self.psr.loads(self.cnf_s, ac_parse_value=True)
82
        self._assert_dicts_equal(cnf, instance_check=True)
83
84
    def test_12_loads__w_options(self):
85
        cnf = self.psr.loads(self.cnf_s, ac_parse_value=True,
86
                             **self.load_options)
87
        self._assert_dicts_equal(cnf, instance_check=True)
88
89
    def test_20_dumps(self):
90
        cnf = self.psr.loads(self.psr.dumps(self.cnf), ac_parse_value=True)
91
        self._assert_dicts_equal(cnf, instance_check=True)
92
93
    def test_22_dumps__w_options(self):
94
        cnf = self.psr.loads(self.psr.dumps(self.cnf, **self.dump_options),
95
                             ac_parse_value=True)
96
        self._assert_dicts_equal(cnf, instance_check=True)
97
98
    def test_30_loads_with_order_kept(self):
99
        cnf = self.psr.loads(self.cnf_s, ac_parse_value=True, ac_ordered=True)
100
        self._assert_dicts_equal(cnf, ordered=self.is_order_kept)
101
102
    def test_32_loads_with_order_kept(self):
103
        cnf = self.psr.loads(self.cnf_s, ac_parse_value=True, dict_type=ODict)
104
        self._assert_dicts_equal(cnf, ordered=True)
105
106
107
class Test12(Test10):
108
109
    test_10_loads = test_12_loads__w_options = lambda: True
110
    test_20_loads = test_22_loads__w_options = lambda: True
111
112
    def test_10_loads__invalid_input(self):
113
        invalid_ini = "key=name"
114
        self.assertRaises(Exception, self.psr.loads, invalid_ini)
115
116
    def test_20_dumps__format(self):
117
        ref = self.cnf_s.replace(': ', ' = ')
118
        self.assertEqual(self.psr.dumps(self.cnf), ref)
119
120
121
class Test20(unittest.TestCase):
122
123
    psr_cls = TT.Parser
124
    cnf = CNF_0
125
    cnf_s = CNF_0_S
126
    cnf_fn = "conf0.ini"
127
    is_order_kept = True
128
129
    def setUp(self):
130
        self.psr = self.psr_cls()
131
        self.workdir = anyconfig.tests.common.setup_workdir()
132
        self.cpath = os.path.join(self.workdir, self.cnf_fn)
133
        with self.psr.wopen(self.cpath) as out:
134
            out.write(self.cnf_s)
135
136
    def tearDown(self):
137
        anyconfig.tests.common.cleanup_workdir(self.workdir)
138
139
    def _assert_dicts_equal(self, cnf):
140
        self.assertTrue(dicts_equal(cnf, self.cnf),
141
                        "\n %r\nvs.\n %r" % (cnf, self.cnf))
142
        self.assertTrue(isinstance(cnf, UpdateWithReplaceDict))
143
144
    def test_10_load(self):
145
        cnf = self.psr.load(self.cpath)
146
        self._assert_dicts_equal(cnf)
147
148
    def test_20_dump(self):
149
        self.psr.dump(self.cnf, self.cpath)
150
        cnf = self.psr.load(self.cpath)
151
        self._assert_dicts_equal(cnf)
152
153
    def test_30_load__from_stream(self):
154
        with self.psr.ropen(self.cpath) as strm:
155
            cnf = self.psr.load(strm)
156
157
        self._assert_dicts_equal(cnf)
158
159
    def test_40_dump__to_stream(self):
160
        with self.psr.wopen(self.cpath) as strm:
161
            self.psr.dump(self.cnf, strm)
162
163
        cnf = self.psr.load(self.cpath)
164
        self._assert_dicts_equal(cnf)
165
166
    def test_50_load_with_order_kept(self):
167
        cnf = self.psr.load(self.cpath, ac_ordered=True)
168
        if self.is_order_kept:
169
            self.assertTrue(list(cnf.keys()), list(self.cnf.keys()))
170
        else:
171
            self.assertTrue(dicts_equal(cnf, self.cnf), str(cnf))
172
173
# vim:sw=4:ts=4:et:
174