Use group (minimal GUI) defaults similarly to the user template
[pyi2ncommon] / test / test_build_cnfvar.py
CommitLineData
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"""
24import unittest
25import os
26from src.cnfline.build_cnfvar import BuildCnfVar
27
28TEST_CONFIG_FILENAME = 'some_config.cnf'
29
30
31class 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
154if __name__ == '__main__':
155 unittest.main()