diff tests/test.py @ 144:7e6ec99d5ff5

Allow comments as keys and filter them by default
author Franz Glasner <hg@dom66.de>
date Fri, 13 Apr 2018 09:51:02 +0200
parents d8d47893df5b
children bbf47bfb48a2
line wrap: on
line diff
--- a/tests/test.py	Mon Apr 09 09:35:04 2018 +0200
+++ b/tests/test.py	Fri Apr 13 09:51:02 2018 +0200
@@ -43,6 +43,22 @@
         self.assertEqual(u("Umlaute: ÄÖÜäöüß"),
                          cfg.get("key7"))
 
+    def __check_comment(self, cfg):
+        # Check comments: low level comments are *not* filtered
+        self.assertEqual(u("Comment 1"), cfg.get("__comment1"))
+        self.assertEqual(u("Comment no 2"), cfg.get("__comment2"))
+
+    def __check_no_comment(self, cfg):
+
+        def _c(name):
+            def _f():
+                cfg[u(name)]
+            return _f
+
+        # Variables with leading underscores are *not*  imported by default
+        self.assertRaises(KeyError, _c("__comment1"))
+        self.assertRaises(KeyError, _c("__comment2"))
+
     def __check_tree(self, cfg):
         self.assertEqual(u("in the root namespace"),
                          cfg.get("key1"))
@@ -57,10 +73,12 @@
     def test01_ini_types(self):
         cfg = configmix.ini.load(os.path.join(TESTDATADIR, "conf1.ini"))
         self.__check_types(cfg)
+        self.__check_comment(cfg)
 
     def test02_py_types(self):
         cfg = configmix.py.load(os.path.join(TESTDATADIR, "conf1.py"))
         self.__check_types(cfg)
+        self.__check_no_comment(cfg)
 
     def test03_yaml_types(self):
         with io.open(os.path.join(TESTDATADIR, "conf1.yml"), "rt",
@@ -69,11 +87,13 @@
             if configmix.yaml.OrderedDict:
                 self.assertTrue(isinstance(cfg, configmix.yaml.OrderedDict))
             self.__check_types(cfg)
+            self.__check_comment(cfg)
 
     def test04_json_types(self):
         cfg = configmix.json.load(os.path.join(TESTDATADIR, "conf1.json"))
         self.assertTrue(isinstance(cfg, configmix.json.DictImpl))
         self.__check_types(cfg)
+        self.__check_comment(cfg)
 
     def test05_py_export_all(self):
         # When __all__ is given only it's keys are exported
@@ -218,18 +238,35 @@
 
         self.assertRaises(KeyError, _look)
 
+    def test05_comments(self):
+        cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"),
+                         os.path.join(TESTDATADIR, "conf21.yml"),
+                         os.path.join(TESTDATADIR, "conf22.ini"),
+                         os.path.join(TESTDATADIR, "conf23.json"))
+
+        def _c(name):
+            def _f():
+                cfg.getvar_s(name)
+            return _f
+
+        # Variables with leading underscores are *not*  imported by default
+        self.assertEqual(0o0027, int(cfg.getvar_s("process.umask"), 0))
+        self.assertRaises(KeyError, _c("process.__doc1"))
+        self.assertRaises(KeyError, _c("db.__comment1"))
+        self.assertRaises(KeyError, _c("db.user.__doc2"))
+
 
 class T02LoadAndMerge(_T02MixinLoadAndMerge, unittest.TestCase):
 
     def setUp(self):
         self._load = configmix.load
 
-    def test05_identity(self):
+    def test06_identity(self):
         cfg = configmix.ini.load(os.path.join(TESTDATADIR, "conf1.ini"))
         cfg2 = configmix.merge(cfg, None)
         self.assertEqual(id(cfg), id(cfg2))
 
-    def test06_identity(self):
+    def test07_identity(self):
         cfg = configmix.ini.load(os.path.join(TESTDATADIR, "conf1.ini"))
         cfg2 = configmix.merge(cfg, {})
         self.assertEqual(id(cfg), id(cfg2))
@@ -240,12 +277,12 @@
     def setUp(self):
         self._load = configmix.safe_load
 
-    def test05_deepcopy(self):
+    def test06_deepcopy(self):
         cfg = configmix.ini.load(os.path.join(TESTDATADIR, "conf1.ini"))
         cfg2 = configmix.safe_merge(cfg, None)
         self.assertNotEqual(id(cfg), id(cfg2))
 
-    def test06_deepcopy(self):
+    def test07_deepcopy(self):
         cfg = configmix.ini.load(os.path.join(TESTDATADIR, "conf1.ini"))
         cfg2 = configmix.safe_merge(cfg, {})
         self.assertNotEqual(id(cfg), id(cfg2))
@@ -290,7 +327,7 @@
 
         def _g():
             return cfg.getvar_s("key7")
-            
+
         self.assertRaises(KeyError, _g)