test_export.py (3643B)
1 # standard imports 2 import os 3 import io 4 import unittest 5 import logging 6 import configparser 7 import tempfile 8 import re 9 10 # local imports 11 from confini import Config 12 from confini.export import ConfigExporter 13 from confini.doc import ConfigDoc 14 15 logging.basicConfig(level=logging.DEBUG) 16 17 logg = logging.getLogger() 18 19 20 class TestExport(unittest.TestCase): 21 22 wd = os.path.dirname(__file__) 23 24 25 def setUp(self): 26 self.inidir = os.path.join(self.wd, 'files') 27 c = Config(self.inidir) 28 c.process() 29 self.config = c 30 31 32 def test_handle(self): 33 w = io.StringIO() 34 e = ConfigExporter(self.config, target=w) 35 e.export() 36 37 w.seek(0) 38 a = configparser.ConfigParser() 39 a.read_string(w.read()) 40 41 b = configparser.ConfigParser() 42 b.read(os.path.join(self.inidir, 'foo.ini')) 43 b.read(os.path.join(self.inidir, 'bar.ini')) 44 45 for s in b.sections(): 46 for o in b.options(s): 47 self.assertEqual(b.get(s, o), a.get(s.lower(), o.lower())) 48 49 50 def test_file(self): 51 (fd, fn) = tempfile.mkstemp() 52 e = ConfigExporter(self.config, target=fn) 53 e.export() 54 55 w = os.fdopen(fd) 56 a = configparser.ConfigParser() 57 a.read_string(w.read()) 58 59 b = configparser.ConfigParser() 60 b.read(os.path.join(self.inidir, 'foo.ini')) 61 b.read(os.path.join(self.inidir, 'bar.ini')) 62 63 for s in b.sections(): 64 for o in b.options(s): 65 self.assertEqual(b.get(s, o), a.get(s.lower(), o.lower())) 66 67 68 def test_dir_file(self): 69 d = tempfile.mkdtemp() 70 e = ConfigExporter(self.config, target=d) 71 e.export() 72 73 a = configparser.ConfigParser() 74 a.read(os.path.join(d, 'config.ini')) 75 76 b = configparser.ConfigParser() 77 b.read(os.path.join(self.inidir, 'foo.ini')) 78 b.read(os.path.join(self.inidir, 'bar.ini')) 79 80 for s in b.sections(): 81 for o in b.options(s): 82 self.assertEqual(b.get(s, o), a.get(s.lower(), o.lower())) 83 84 85 def test_dir_split(self): 86 d = tempfile.mkdtemp() 87 e = ConfigExporter(self.config, target=d, split=True) 88 e.export() 89 90 a = configparser.ConfigParser() 91 a.read(os.path.join(d, 'foo.ini')) 92 a.read(os.path.join(d, 'bar.ini')) 93 a.read(os.path.join(d, 'xyzzy.ini')) 94 95 b = configparser.ConfigParser() 96 b.read(os.path.join(self.inidir, 'foo.ini')) 97 b.read(os.path.join(self.inidir, 'bar.ini')) 98 99 for s in b.sections(): 100 for o in b.options(s): 101 self.assertEqual(b.get(s, o), a.get(s.lower(), o.lower())) 102 103 104 105 def test_doc(self): 106 w = io.StringIO() 107 e = ConfigExporter(self.config, target=w, doc=True) 108 e.export() 109 110 w.seek(0) 111 s = w.read() 112 113 print(s) 114 re_c = re.compile('^# ', re.MULTILINE) 115 m = re_c.finditer(s) 116 next(m) 117 next(m) 118 next(m) 119 with self.assertRaises(StopIteration): 120 next(m) 121 122 re_c = re.compile('^# .*foo$', re.MULTILINE) 123 m = re_c.finditer(s) 124 next(m) 125 next(m) 126 with self.assertRaises(StopIteration): 127 next(m) 128 129 a = configparser.ConfigParser() 130 a.read_string(s) 131 132 b = configparser.ConfigParser() 133 b.read(os.path.join(self.inidir, 'foo.ini')) 134 b.read(os.path.join(self.inidir, 'bar.ini')) 135 136 for s in b.sections(): 137 for o in b.options(s): 138 self.assertEqual(b.get(s, o), a.get(s.lower(), o.lower())) 139 140 141 if __name__ == '__main__': 142 unittest.main()