diff tests/test.py @ 395:0b3ffc34fa5c

Begin a jailed configuration with access to a sub-tree of the original configuration
author Franz Glasner <f.glasner@feldmann-mg.com>
date Thu, 18 Nov 2021 18:30:59 +0100
parents 0521e857c320
children b1f82b853290
line wrap: on
line diff
--- a/tests/test.py	Wed Nov 10 09:43:15 2021 +0100
+++ b/tests/test.py	Thu Nov 18 18:30:59 2021 +0100
@@ -1157,5 +1157,120 @@
         self.assertEqual("value", v)
 
 
+class T08Jailed(unittest.TestCase):
+
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        self._reset()
+
+    def _reset(self):
+        configmix.clear_assoc()
+        for pat, fmode in configmix.DEFAULT_ASSOC:
+            configmix.set_assoc(pat, fmode)
+
+    def test_root(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
+        jcfg = cfg.jailed(root=u"tree1")
+
+        self.assertTrue(jcfg.getvarl(u"tree2", u"key5"))
+        self.assertTrue(jcfg.getvarl_s(u"tree2", u"key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvarl(u"tree2", u"key4"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvarl_s(u"tree2", u"key4"))
+
+        self.assertTrue(jcfg.getvar(u"tree2.key5"))
+        self.assertTrue(jcfg.getvar_s(u"tree2.key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvar(u"tree2.key4"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvar_s(u"tree2.key4"))
+
+    def test_root2(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
+        jcfg = cfg.jailed(root=u"tree1.tree2")
+
+        self.assertTrue(jcfg.getvarl(u"key5"))
+        self.assertTrue(jcfg.getvarl_s(u"key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvarl(u"key4"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvarl_s(u"key4"))
+
+        self.assertTrue(jcfg.getvar(u"key5"))
+        self.assertTrue(jcfg.getvar_s(u"key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvar(u"key4"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvar_s(u"key4"))
+
+    def test_root_non_existing_raises(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
+        self.assertRaises(KeyError, cfg.jailed, root=u"tree-non-existing")
+
+    def test_rootpath(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
+        jcfg = cfg.jailed(rootpath=[u"tree1"])
+
+        self.assertTrue(jcfg.getvarl(u"tree2", u"key5"))
+        self.assertTrue(jcfg.getvarl_s(u"tree2", u"key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvarl_s(u"tree2", u"key4"))
+
+        self.assertTrue(jcfg.getvar(u"tree2.key5"))
+        self.assertTrue(jcfg.getvar_s(u"tree2.key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvar_s(u"tree2.key4"))
+
+    def test_rootpath_non_existing_raises(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
+        self.assertRaises(
+            KeyError, cfg.jailed, rootpath=[u"tree-non-existing"])
+
+    def test_root_empty(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
+        jcfg = cfg.jailed(rootpath=u"")
+
+        self.assertTrue(jcfg.getvarl(u"tree1", u"tree2", u"key5"))
+        self.assertTrue(jcfg.getvarl_s(u"tree1", u"tree2", u"key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvarl_s(u"tree1", u"tree2", u"key4"))
+
+        self.assertTrue(jcfg.getvar(u"tree1.tree2.key5"))
+        self.assertTrue(jcfg.getvar_s(u"tree1.tree2.key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvar_s(u"tree1.tree2.key4"))
+
+    def test_rootpath_empty(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
+        jcfg = cfg.jailed(rootpath=tuple())
+
+        self.assertTrue(jcfg.getvarl(u"tree1", u"tree2", u"key5"))
+        self.assertTrue(jcfg.getvarl_s(u"tree1", u"tree2", u"key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvarl_s(u"tree1", u"tree2", u"key4"))
+
+        self.assertTrue(jcfg.getvar(u"tree1.tree2.key5"))
+        self.assertTrue(jcfg.getvar_s(u"tree1.tree2.key5"))
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg.getvar_s(u"tree1.tree2.key4"))
+
+
 if __name__ == "__main__":
     unittest.main()