tests/test_urltree.py
changeset 85 fd4b9a80e602
parent 84 65dcbedaa5f5
--- a/tests/test_urltree.py	Mon Feb 16 21:44:06 2009 +0200
+++ b/tests/test_urltree.py	Mon Feb 16 21:52:03 2009 +0200
@@ -568,4 +568,54 @@
     def test_yes (self) :
         self._test_match("quux/a/yes", self.quux_yes, xyz="a")
     
+class TestTreeHandler (unittest.TestCase) :
+    def _build_handler (self, name) :
+        def _handler (req, **args) :
+            return name, args
+        
+        return _handler
 
+    def setUp (self) :
+        self.config = urltree.URLConfig(ignore_extra_args=True)
+
+        self.root =self.config("/", self._build_handler('root'))
+        self.bar = self.config("/bar", self._build_handler('bar'))
+        self.quux = self.config("/quux/{xyz}", self._build_handler('quux'))
+        self.quux_boo = self.config("/quux/{xyz}/boo/{opt=no}", self._build_handler('quux_boo'))
+
+        self.tree = urltree.URLTree(self.config)
+
+    class dummyrequest_page :
+        def __init__ (self, page_name, qargs) :
+            self.page_name = page_name
+            self.qargs = qargs
+
+        def get_page_name (self) : return self.page_name    
+        def get_args (self) : return self.qargs
+
+    def _test_handle (self, path, name, qargs={}, **args) :
+        req = self.dummyrequest_page(path, qargs.iteritems())
+
+        h_name, h_args = self.tree.handle_request(req)
+
+        self.assertEqual(h_name, name)
+        self.assertEqual(h_args, args)
+    
+    def test_root (self) :
+        self._test_handle("", 'root')
+
+    def test_bar (self) :
+        self._test_handle("bar", 'bar')
+
+    def test_quux (self) :
+        self._test_handle("quux/a", 'quux', xyz='a')
+
+    def test_quux_boo (self) :
+        self._test_handle("quux/a/boo/b", 'quux_boo', xyz='a', opt='b')
+
+    def test_quux_boo_default (self) :
+        self._test_handle("quux/a/boo", 'quux_boo', xyz='a', opt='no')
+
+    def test_quux_boo_qarg (self) :
+        self._test_handle("quux/a/boo", 'quux_boo', dict(opt='yes'), xyz='a', opt='yes')
+