# HG changeset patch # User Tero Marttila # Date 1234813446 -7200 # Node ID 65dcbedaa5f508fe3723d2d6c970aa992bc93677 # Parent 69312afad653713681be8a5cc3e0b94f92fe068c test URLTree build/match diff -r 69312afad653 -r 65dcbedaa5f5 tests/test_urltree.py --- a/tests/test_urltree.py Mon Feb 16 21:27:39 2009 +0200 +++ b/tests/test_urltree.py Mon Feb 16 21:44:06 2009 +0200 @@ -476,7 +476,7 @@ # XXX: this just becomes ...?quux=['a', 'b'] like from str(list) # def test_build_qargs_multi_invalid (self) : -# self.assertRaises(urltree.URLError, self.config("/foo/{bar}/?quux", None).build, self.dummyrequest_page("/index.cgi"), bar="x", quux=["a", "b"]) +# self._test_build_fails(urltree.URLError, "/foo/{bar}/?quux", bar="x", quux=["a", "b"]) def test_build_qargs_multi_list (self) : self._test_build("/foo/{bar}/?quux:list", "/foo/x?quux=a&quux=b", bar="x", quux=["a", "b"]) @@ -484,5 +484,88 @@ def test_build_qargs_none (self) : self._test_build("/foo/{bar}/?quux", "/foo/x", bar="x", quux=None) +class TestTreeBuild (unittest.TestCase) : + def setUp (self) : + self.config = urltree.URLConfig(ignore_extra_args=True) + def test_simple_root (self) : + self.config("/", None) + self.assertEqual(str(urltree.URLTree(self.config).root), "/[]") + def test_simple_static (self) : + self.config("/foo/bar", None) + self.assertEqual(str(urltree.URLTree(self.config).root), "/[foo/[bar/[]]]") + + def test_multi_static (self) : + self.config("/foo/bar", None) + self.config("/foo/quux", None) + self.config("/asdf", None) + self.assertEqual(str(urltree.URLTree(self.config).root), "/[foo/[bar/[],quux/[]],asdf/[]]") + + def test_simple_value (self) : + self.config("/foo/{bar}", None) + self.assertEqual(str(urltree.URLTree(self.config).root), "/[foo/[{bar}/[]]]") + + def test_deep (self) : + self.config("/foo/{cc}/a", None) + self.config("/foo/{cc}/b", None) + self.assertEqual(str(urltree.URLTree(self.config).root), "/[foo/[{cc}/[a/[],b/[]]]]") + + def test_deep2 (self) : + self.config("/foo/{cc}/a/x", None) + self.config("/foo/{cc}/b", None) + self.assertEqual(str(urltree.URLTree(self.config).root), "/[foo/[{cc}/[a/[x/[]],b/[]]]]") + + def test_ambig_simple (self) : + self.config("/foo", None) + self.config("/foo", None) + + self.assertRaises(urltree.URLError, urltree.URLTree, self.config) + +class TestTreeMatch (unittest.TestCase) : + def setUp (self) : + self.config = urltree.URLConfig(ignore_extra_args=True) + + self.root =self.config("/", None) + self.bar = self.config("/bar", None) + self.quux = self.config("/quux/{xyz}", None) + self.quux_boo = self.config("/quux/{xyz}/boo/{opt=no}", None) + self.quux_yes = self.config("/quux/{xyz}/yes", None) + + self.tree = urltree.URLTree(self.config) + + def _test_match (self, path, url, **values) : + t_url, t_values = self.tree.match(path) + + self.assertEqual(t_url, url) + + self.assertEqual(set(v.label.key for v in t_values), set(values)) + + for v in t_values : + self.assertEqual(v.value, values[v.label.key]) + + def test_root (self) : + self._test_match("", self.root) + + def test_bar (self) : + self._test_match("bar", self.bar) + + def test_bar_slash (self) : + self._test_match("bar/", self.bar) + + def test_quux (self) : + self._test_match("quux/a", self.quux, xyz="a") + + def test_quux_missing (self) : + self.assertRaises(urltree.URLError, self._test_match, "quux/", None) + + def test_quux_boo (self) : + self._test_match("quux/a/boo/x", self.quux_boo, xyz="a", opt="x") + + def test_quux_default (self) : + self._test_match("quux/a/boo", self.quux_boo, xyz="a", opt="no") + + def test_yes (self) : + self._test_match("quux/a/yes", self.quux_yes, xyz="a") + +