Commit | Line | Data |
---|---|---|
f49f6323 PD |
1 | #!/usr/bin/env python |
2 | ||
11cbb815 PD |
3 | # The software in this package is distributed under the GNU General |
4 | # Public License version 2 (with a special exception described below). | |
5 | # | |
6 | # A copy of GNU General Public License (GPL) is included in this distribution, | |
7 | # in the file COPYING.GPL. | |
8 | # | |
9 | # As a special exception, if other files instantiate templates or use macros | |
10 | # or inline functions from this file, or you compile this file and link it | |
11 | # with other works to produce a work based on this file, this file | |
12 | # does not by itself cause the resulting work to be covered | |
13 | # by the GNU General Public License. | |
14 | # | |
15 | # However the source code for this file must still be made available | |
16 | # in accordance with section (3) of the GNU General Public License. | |
17 | # | |
18 | # This exception does not invalidate any other reasons why a work based | |
19 | # on this file might be covered by the GNU General Public License. | |
20 | # | |
21 | # Copyright (c) 2016-2018 Intra2net AG <info@intra2net.com> | |
22 | ||
f49f6323 PD |
23 | """Unit test for build_cnfvar.py""" |
24 | import unittest | |
25 | import os | |
26 | from src.cnfline.build_cnfvar import BuildCnfVar | |
27 | ||
28 | TEST_CONFIG_FILENAME = 'some_config.cnf' | |
29 | ||
30 | ||
31 | class BuildCnfVarTest(unittest.TestCase): | |
32 | def tearDown(self): | |
33 | if os.path.isfile(TEST_CONFIG_FILENAME): | |
34 | os.unlink(TEST_CONFIG_FILENAME) | |
35 | ||
36 | def test_simple(self): | |
37 | cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10) | |
38 | ||
39 | self.assertEqual('FOOBAR', cnfvar.name) | |
40 | self.assertEqual(123, cnfvar.instance) | |
41 | self.assertEqual('some_data', cnfvar.data) | |
42 | self.assertEqual(10, cnfvar.line_no) | |
43 | ||
44 | def test_find_child_line_no(self): | |
45 | cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10) | |
46 | new_child_line_no = cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx') | |
47 | ||
48 | self.assertEqual(new_child_line_no, | |
49 | cnfvar.find_child_line_no('FOOBAR_CHILD')) | |
50 | ||
51 | # Should not be found | |
52 | self.assertEqual(0, cnfvar.find_child_line_no('FOOBAR_SPACESHARK')) | |
53 | ||
54 | def test_find_free_line_no(self): | |
55 | cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10) | |
56 | self.assertEqual(11, cnfvar.find_free_line_no()) | |
57 | ||
58 | cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx') | |
59 | self.assertEqual(12, cnfvar.find_free_line_no()) | |
60 | ||
61 | def test_find_free_child_instance(self): | |
62 | cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10) | |
63 | cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx') | |
64 | ||
65 | self.assertEqual(0, cnfvar.find_free_child_instance('FOOBAR_OTHER')) | |
66 | self.assertEqual(1, cnfvar.find_free_child_instance('FOOBAR_CHILD')) | |
67 | ||
68 | def test_update_cnf(self): | |
69 | cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10) | |
70 | cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx') | |
71 | ||
72 | # Update existing cnfvar | |
73 | cnfvar.update_cnf('FOOBAR_CHILD', 0, 'abc') | |
74 | ||
75 | self.assertEqual('10 FOOBAR,123: "some_data"\n' | |
76 | '11 (10) FOOBAR_CHILD,0: "abc"\n', str(cnfvar)) | |
77 | ||
78 | def test_string_output(self): | |
79 | cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10) | |
80 | cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx') | |
81 | cnfvar.update_cnf('FOOBAR_CHILD', 0, 'abc') | |
82 | cnfvar.add_cnf('FOOBAR_CHILD', 1, 'more data') | |
83 | ||
84 | self.assertEqual('10 FOOBAR,123: "some_data"\n' | |
85 | '11 (10) FOOBAR_CHILD,0: "abc"\n' | |
86 | '12 (10) FOOBAR_CHILD,1: "more data"\n', str(cnfvar)) | |
87 | ||
88 | def test_del_cnf(self): | |
89 | cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10) | |
90 | cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx') | |
91 | cnfvar.add_cnf('FOOBAR_CHILD', 1, 'more data') | |
92 | ||
93 | cnfvar.del_cnf('FOOBAR_CHILD') | |
94 | ||
95 | self.assertEqual('10 FOOBAR,123: "some_data"\n', str(cnfvar)) | |
96 | ||
97 | def test_add_different_parent_no(self): | |
98 | cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10) | |
99 | sub_parent = cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx') | |
100 | cnfvar.add_cnf('FOOBAR_OTHER', 0, 'foo') | |
101 | cnfvar.add_cnf('FOOBAR_CHILD_TYPE', 1, 'spaceshark', sub_parent) | |
102 | cnfvar.add_cnf('FOOBAR_OTHER2', 0, 'foo2') | |
103 | ||
104 | self.assertEqual('10 FOOBAR,123: "some_data"\n' | |
105 | '11 (10) FOOBAR_CHILD,0: "xxx"\n' | |
106 | '12 (10) FOOBAR_OTHER,0: "foo"\n' | |
107 | '13 (11) FOOBAR_CHILD_TYPE,1: "spaceshark"\n' | |
108 | '14 (10) FOOBAR_OTHER2,0: "foo2"\n', str(cnfvar)) | |
109 | ||
110 | def test_add_defaults(self): | |
111 | cnfvar = BuildCnfVar('FOOBAR', 0, 'some_data') | |
112 | ||
113 | defaults = {'FOOBAR_SOMETHING': 'abc', | |
114 | 'FOOBAR_MODE': 'optimize'} | |
115 | cnfvar.add_defaults(defaults) | |
116 | ||
fbc2c274 CH |
117 | self.assertTrue('1 FOOBAR,0: "some_data"\n' |
118 | '2 (1) FOOBAR_SOMETHING,0: "abc"\n' | |
119 | '3 (1) FOOBAR_MODE,0: "optimize"\n' == str(cnfvar) | |
120 | or '1 FOOBAR,0: "some_data"\n' | |
121 | '2 (1) FOOBAR_MODE,0: "optimize"\n' | |
122 | '3 (1) FOOBAR_SOMETHING,0: "abc"\n' == str(cnfvar)) | |
f49f6323 PD |
123 | |
124 | def test_mark_as_own_parent(self): | |
125 | cnfvar = BuildCnfVar('FOOBAR_SOMETHING', 123, 'some_data', 10) | |
126 | ||
127 | line_no = cnfvar.add_cnf('FOOBAR_OTHER', 0, 'xxx') | |
128 | cnfvar.mark_as_own_parent(line_no) | |
129 | ||
130 | self.assertEqual('10 FOOBAR_SOMETHING,123: "some_data"\n' | |
131 | '11 FOOBAR_OTHER,0: "xxx"\n', str(cnfvar)) | |
132 | ||
133 | def test_save(self): | |
134 | cnfvar = BuildCnfVar('FOOBAR', 0, 'some_data') | |
135 | ||
136 | defaults = {'FOOBAR_SOMETHING': 'abc', | |
137 | 'FOOBAR_MODE': 'optimize'} | |
138 | cnfvar.add_defaults(defaults) | |
139 | ||
f49f6323 | 140 | cnfvar.save(TEST_CONFIG_FILENAME) |
5deeac27 | 141 | with open(TEST_CONFIG_FILENAME, 'r') as input: |
f49f6323 PD |
142 | read_back = input.read() |
143 | ||
fbc2c274 CH |
144 | self.assertTrue('1 FOOBAR,0: "some_data"\n' |
145 | '2 (1) FOOBAR_SOMETHING,0: "abc"\n' | |
146 | '3 (1) FOOBAR_MODE,0: "optimize"\n' == read_back | |
147 | or '1 FOOBAR,0: "some_data"\n' | |
148 | '2 (1) FOOBAR_MODE,0: "optimize"\n' | |
149 | '3 (1) FOOBAR_SOMETHING,0: "abc"\n' == read_back) | |
f49f6323 | 150 | |
5deeac27 | 151 | os.unlink(TEST_CONFIG_FILENAME) |
f49f6323 | 152 | |
f49f6323 PD |
153 | |
154 | if __name__ == '__main__': | |
155 | unittest.main() |