Author: russellm
Date: 2008-08-22 08:59:41 -0500 (Fri, 22 Aug 2008)
New Revision: 8464

Added:
   django/trunk/tests/regressiontests/test_client_regress/bad_templates/
   django/trunk/tests/regressiontests/test_client_regress/bad_templates/404.html
Modified:
   django/trunk/django/core/handlers/base.py
   django/trunk/tests/regressiontests/test_client_regress/models.py
Log:
Fixed #8136: Added a signal emission when an error is raised handling an error. 
This was required for the test client to handle missing 404.html templates and 
errors in the 404.html template. Thanks to danfairs for the report and fix.

Modified: django/trunk/django/core/handlers/base.py
===================================================================
--- django/trunk/django/core/handlers/base.py   2008-08-21 15:13:52 UTC (rev 
8463)
+++ django/trunk/django/core/handlers/base.py   2008-08-22 13:59:41 UTC (rev 
8464)
@@ -112,7 +112,10 @@
                     callback, param_dict = resolver.resolve404()
                     return callback(request, **param_dict)
                 except:
-                    return self.handle_uncaught_exception(request, resolver, 
sys.exc_info())
+                    try:
+                        return self.handle_uncaught_exception(request, 
resolver, sys.exc_info())
+                    finally:
+                        receivers = 
signals.got_request_exception.send(sender=self.__class__, request=request)
         except exceptions.PermissionDenied:
             return http.HttpResponseForbidden('<h1>Permission denied</h1>')
         except SystemExit:

Added: 
django/trunk/tests/regressiontests/test_client_regress/bad_templates/404.html
===================================================================
--- 
django/trunk/tests/regressiontests/test_client_regress/bad_templates/404.html   
                            (rev 0)
+++ 
django/trunk/tests/regressiontests/test_client_regress/bad_templates/404.html   
    2008-08-22 13:59:41 UTC (rev 8464)
@@ -0,0 +1,3 @@
+{% block foo %}
+
+This template is deliberately bad - we want it to raise an exception when it 
is used.

Modified: django/trunk/tests/regressiontests/test_client_regress/models.py
===================================================================
--- django/trunk/tests/regressiontests/test_client_regress/models.py    
2008-08-21 15:13:52 UTC (rev 8463)
+++ django/trunk/tests/regressiontests/test_client_regress/models.py    
2008-08-22 13:59:41 UTC (rev 8464)
@@ -1,10 +1,13 @@
 """
 Regression tests for the Test Client, especially the customized assertions.
 """
+import os
+from django.conf import settings
 
 from django.test import Client, TestCase
 from django.core.urlresolvers import reverse
 from django.core.exceptions import SuspiciousOperation
+from django.template import TemplateDoesNotExist, TemplateSyntaxError
 
 class AssertContainsTests(TestCase):
     def test_contains(self):
@@ -306,7 +309,32 @@
             self.client.get("/test_client_regress/staff_only/")
         except SuspiciousOperation:
             self.fail("Staff should be able to visit this page")
+    
+class TemplateExceptionTests(TestCase):
+    def setUp(self):
+        self.old_templates = settings.TEMPLATE_DIRS
+        settings.TEMPLATE_DIRS = ()
+        
+    def tearDown(self):
+        settings.TEMPLATE_DIRS = self.old_templates
+        
+    def test_no_404_template(self):
+        "Missing templates are correctly reported by test client"    
+        try:
+            response = self.client.get("/no_such_view/")
+            self.fail("Should get error about missing template")
+        except TemplateDoesNotExist:
+            pass
 
+    def test_bad_404_template(self):
+        "Errors found when rendering 404 error templates are re-raised"
+        settings.TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 
'bad_templates'),)
+        try:
+            response = self.client.get("/no_such_view/")
+            self.fail("Should get error about syntax error in template")
+        except TemplateSyntaxError:
+            pass
+        
 # We need two different tests to check URLconf substitution -  one to check
 # it was changed, and another one (without self.urls) to check it was reverted 
on
 # teardown. This pair of tests relies upon the alphabetical ordering of test 
execution.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to