diff tests/test.py @ 305:f529ca46dd50

Implemented the "ref" namespace to get configuration tree references. BUGS: - Tests should be done more thoroughly and extensively - Interaction of tree references and variable substitution should be tested more properly - Documentation is missing yet
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 26 Apr 2021 09:42:42 +0200
parents a03a6797533b
children f77dba9fc164
line wrap: on
line diff
--- a/tests/test.py	Sun Apr 25 18:05:26 2021 +0200
+++ b/tests/test.py	Mon Apr 26 09:42:42 2021 +0200
@@ -503,5 +503,67 @@
         self.assertEqual("22", cfg.getvar_s("key103"))
 
 
+class T06References(unittest.TestCase):
+
+    def setUp(self):
+        self._reset()
+        self._cfg = configmix.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"),
+            os.path.join(TESTDATADIR, "conf24.toml"),
+            os.path.join(TESTDATADIR, "reference-style.yml"))
+
+    def tearDown(self):
+        self._reset()
+
+    def _reset(self):
+        configmix.clear_assoc()
+        for pat, fmode in configmix.DEFAULT_ASSOC:
+            configmix.set_assoc(pat, fmode)
+
+    def test01_reference_without_expansions(self):
+        self.assertTrue(isinstance(self._cfg.getvar("wsgi.profiler"), dict))
+        self.assertTrue(isinstance(
+            self._cfg.getvar("wsgi.profiler.params"), dict))
+        self.assertEqual("werkzeug",
+                         self._cfg.getvar("wsgi.profiler.params.type"))
+        self.assertTrue(self._cfg.getvar("wsgi.profiler.params.params.evalex"))
+        self.assertEqual(self._cfg.getvar("wsgi.debugger"),
+                         self._cfg.getvar("wsgi.profiler.params"))
+
+    def test02_reference__with_expansions(self):
+        self.assertTrue(isinstance(self._cfg.getvar_s("wsgi.profiler"), dict))
+        self.assertTrue(isinstance(
+            self._cfg.getvar_s("wsgi.profiler.params"), dict))
+        self.assertTrue(
+            self._cfg.getvar_s("wsgi.profiler.params.params.evalex"))
+        self.assertEqual("werkzeug",
+                         self._cfg.getvar_s("wsgi.profiler.params.type"))
+
+    def test03_no_direct_attribute_access_to_expanded_references(self):
+        self.assertEqual(
+            "{{ref:#wsgi.debugger}}",
+            self._cfg.wsgi.profiler.params)
+        try:
+            self._cfg.wsgi.profiler.params.type
+        except AttributeError:
+            pass
+        else:
+            self.fail("no attribute error seen")
+
+    def test04_indirect_recursive_references(self):
+        self.assertEqual(
+            "werkzeug",
+            self._cfg.getvar_s("testref.here.params.type"))
+        self.assertTrue(
+            self._cfg.getvar_s("testref.here.params.params.evalex"))
+
+    def test05_recursive_expansion(self):
+        c = self._cfg.getvar_s("testref")
+        self.assertTrue(c["here"]["params"]["params"]["evalex"])
+
+
 if __name__ == "__main__":
     unittest.main()