Mercurial > hgrepos > Python > libs > ConfigMix
diff tests/test.py @ 656:2b1c7a68f913
Enable indexed access to lists in the configuration using an access path string representation like "~NNN~"
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 30 May 2022 09:31:29 +0200 |
| parents | fe1299825a9a |
| children | 213f0ec3bbbc |
line wrap: on
line diff
--- a/tests/test.py Sun May 29 15:32:54 2022 +0200 +++ b/tests/test.py Mon May 30 09:31:29 2022 +0200 @@ -944,7 +944,14 @@ i, cfg.getvarl_s(u"test", u"List", i)) - def test48_index_access_to_lists_with_subdicts(self): + def test48_indexed_access_to_lists(self): + cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml")) + for i in range(4): + self.assertEqual( + i, + cfg.getvar_s(u"test.List.~%d~" % (i, ))) + + def test49_index_access_to_lists_with_subdicts(self): cfg = self._load(os.path.join(TESTDATADIR, "index-access-for-jails.yml")) for idx in range(len(cfg.getvarl(u"the-list"))): @@ -952,6 +959,14 @@ idx, cfg.getvarl_s(u"the-list", idx, u"entry")) + def test50_index_access_to_lists_with_subdicts(self): + cfg = self._load(os.path.join(TESTDATADIR, + "index-access-for-jails.yml")) + for idx in range(len(cfg.getvarl(u"the-list"))): + self.assertEqual( + idx, + cfg.getvar_s(u"the-list.~%d~.entry" % (idx, ))) + class T02LoadAndMerge(_T02MixinLoadAndMerge, unittest.TestCase): @@ -1897,6 +1912,18 @@ jcfg = cfg.jailed(rootpath=(u"the-list", idx)) self.assertEqual(1, len(jcfg)) self.assertEqual(idx, jcfg.getvarl_s(u"entry")) + self.assertEqual((u"the-list", idx), jcfg._path) + self.assertEqual(u"the-list.~%d~." % (idx, ), jcfg._pathstr) + + def test_index_jail_access_with_strpath(self): + cfg = configmix.load(os.path.join( + TESTDATADIR, "index-access-for-jails.yml")) + for idx in range(len(cfg.getvarl(u"the-list"))): + jcfg = cfg.jailed(root=u"the-list.~%d~" % (idx, )) + self.assertEqual(1, len(jcfg)) + self.assertEqual(idx, jcfg.getvarl_s(u"entry")) + self.assertEqual((u"the-list", idx), jcfg._path) + self.assertEqual(u"the-list.~%d~." % (idx, ), jcfg._pathstr) class _TParserMixin: @@ -1906,13 +1933,13 @@ self.assertEqual(u"", self.unquote(e)) def test_quoting_and_unquoting_are_inverse(self): - for c in u"""%.:#|"'{}[]""": + for c in u"""%.:#|"'{}[]~""": qc = self.quote(c) self.assertTrue(qc.startswith(u"%x") and len(qc) == 4) self.assertEqual(c, self.unquote(qc)) def test_quoting_and_unquoting_are_inverse_all(self): - c = u"""%.:#|"'{}[]""" + c = u"""%.:#|"'{}[]~""" qc = self.quote(c) self.assertEqual(len(c)*4, len(qc)) self.assertEqual(c, self.unquote(qc)) @@ -1930,6 +1957,33 @@ self.assertEqual(configmix.config._QUOTE_SAFE, qc) self.assertEqual(configmix.config._QUOTE_SAFE, self.unquote(qc)) + def test_quote_index_to_tilde(self): + self.assertEqual(u"~4~", self.quote(4)) + + def test_unquote_index_with_tilde(self): + self.assertEqual(4, self.unquote(u"~4~")) + + def test_unquote_empty_tilde(self): + self.assertEqual(u"~~", self.unquote(u"~~")) + + def test_unquote_invalid_number_tilde(self): + self.assertEqual(u"~0x4~", self.unquote(u"~0x4~")) + + def test_unquote_invalid_number_tilde_2(self): + self.assertEqual(u"~\U00019001~", self.unquote(u"~%U00019001~")) + + def test_quote_unquote_indexes(self): + for idx in range(0, 10000): + self.assertEqual(idx, self.unquote(self.quote(idx))) + + def test_quote_unquote_negative_index(self): + for idx in (-1, -2, -3): + self.assertEqual(idx, self.unquote(self.quote(idx))) + + def test_index_overflow_border(self): + self.assertEqual(32759, self.unquote(u"~32759~")) + self.assertEqual(u"~32760~", self.unquote(u"~32760~")) + def test_unquote_unimax(self): self.assertEqual(u"\U00019001", self.unquote(u"%U00019001")) self.assertEqual(u"X\U00019AF1Z", self.unquote(u"X%U00019aF1Z")) @@ -2013,6 +2067,10 @@ p = self.pathstr2path(u"a%x2Eb.c%u002Ed.e%U0000002Ef") self.assertEqual((u"a.b", u"c.d", u"e.f"), p) + def test_split_unquote_with_index(self): + p = self.pathstr2path(u"a%x2Eb.~555~.c%u002Ed.e%U0000002Ef.~6~") + self.assertEqual((u"a.b", 555, u"c.d", u"e.f", 6), p) + def test_split_ns_empty(self): self.assertEqual((None, u""), self.split_ns(u"")) @@ -2243,7 +2301,7 @@ self.assertRaises( AttributeError, # no .lstrip self.quote, - 1) + 1.0) def test_unquote_wrong_type(self): self.assertRaises(
