tests/test_urltree.py
changeset 84 65dcbedaa5f5
parent 83 69312afad653
child 85 fd4b9a80e602
--- 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")
+    
+