diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index 99776e6..d6dfa8a 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -340,6 +340,122 @@ class Templates(unittest.TestCase):
         except TemplateSyntaxError, e:
             self.assertEquals(e.args[0], "Invalid block tag: 'endblock', expected 'else' or 'endif'")
 
+    def test_garbage_templates(self):
+        garbage_tests = {
+          'garbage-input01' : 'content %}',
+          'garbage-input02' : ' content %}',
+          'garbage-input03' : 'content #}',
+          'garbage-input04' : ' content #}',
+          'garbage-input05' : 'content }}',
+          'garbage-input06' : ' content }}',
+          'garbage-input07' : '% content %}',
+          'garbage-input08' : '# content #}',
+          'garbage-input09' : '{ content }}',
+          'garbage-input10' : '{% content }',
+          'garbage-input11' : '{% content %',
+          'garbage-input12' : '{# content }',
+          'garbage-input13' : '{# content #',
+          'garbage-input14' : '{{ content }',
+          'garbage-input15' : '{{ content }',
+          'garbage-input16' : '{{ content %}',
+          'garbage-input17' : '{% content }}',
+          'garbage-input18' : '{{ content #}',
+          'garbage-input19' : '{# content }}',
+          'garbage-input20' : '{{ con #} tent #}',
+          'garbage-input21' : '{{ con %} tent #}',
+          'garbage-input22' : '{{ con #} tent %}',
+          'garbage-input23' : '{{ con %} tent %}',
+          'garbage-input24' : '{% con #} tent #}',
+          'garbage-input25' : '{% con }} tent #}',
+          'garbage-input26' : '{% con #} tent }}',
+          'garbage-input27' : '{% con }} tent }}',
+          'garbage-input28' : '{# con %} tent %}',
+          'garbage-input29' : '{# con }} tent %}',
+          'garbage-input30' : '{# con %} tent }}',
+          'garbage-input31' : '{# con }} tent }}',
+          'garbage-input32' : '{# con {# tent }}',
+          'garbage-input33' : '{# con {% tent }}',
+          'garbage-input34' : '{% con {% tent }}',
+          'garbage-input35' : '{ { content }}',
+          'garbage-input36' : '{ % content %}',
+          'garbage-input37' : '{ # content #}',
+          'garbage-input38' : '{\n{ content }}',
+          'garbage-input39' : '{\n# content #}',
+          'garbage-input40' : '{\n% content %}',
+          'garbage-input41' : '{{\n content }}',
+          'garbage-input42' : '{#\n content #}',
+          'garbage-input43' : '{%\n content %}',
+          'garbage-input44' : '{{ content \n}}',
+          'garbage-input45' : '{# content \n#}',
+          'garbage-input46' : '{% content \n%}',
+          'garbage-input47' : '{{ content }\n}',
+          'garbage-input48' : '{# content #\n}',
+          'garbage-input49' : '{% content %\n}',
+          'garbage-input50' : '{{ content } }',
+          'garbage-input51' : '{% content % }',
+          'garbage-input52' : '{# content # }',
+          'garbage-input53' : '{ { content } }',
+          'garbage-input54' : '{ % content % }',
+          'garbage-input55' : '{ # content # }',
+          'garbage-input56' : '{{ content }%',
+          'garbage-input57' : '{# content #%',
+          'garbage-input58' : '{% content %%',
+          'garbage-input59' : '{{ content }A',
+          'garbage-input60' : '{# content #A',
+          'garbage-input61' : '{% content %A',
+          'garbage-input62' : '{{ content A}',
+          'garbage-input63' : '{# content A#',
+          'garbage-input64' : '{% content A%',
+          'garbage-input65' : '{# content A}',
+          'garbage-input66' : '{% content A}',
+          'garbage-input67' : 'A{ content }}',
+          'garbage-input68' : 'A# content #}',
+          'garbage-input69' : 'A% content %}',
+          'garbage-input60' : '{A content }}',
+          'garbage-input71' : '{A content #}',
+          'garbage-input72' : '{A content %}',
+          'garbage-input73' : '{A content #}',
+          'garbage-input74' : '{A content %}',
+          'garbage-input75' : '{A content A}',
+          'garbage-input76' : '}} content }}',
+          'garbage-input77' : '}} content {{',
+          'garbage-input78' : '#} content #}',
+          'garbage-input79' : '#} content {#',
+          'garbage-input80' : '%} content %}',
+          'garbage-input81' : '%} content {%',
+          'garbage-input82' : '#{ content }#',
+          'garbage-input83' : '%{ content }%',
+        }
+
+        tests = garbage_tests.items()
+        tests.sort()
+
+        # Register our custom template loader.
+        def test_garbage_loader(template_name, template_dirs=None):
+            "A custom template loader that loads the unit-test templates."
+            try:
+                return (garbage_tests[template_name], "test:%s" % template_name)
+            except KeyError:
+                raise template.TemplateDoesNotExist, template_name
+
+        old_template_loaders = loader.template_source_loaders
+        loader.template_source_loaders = [test_garbage_loader]
+
+        failures = []
+
+        for name, input_content in tests:
+            test_template = loader.get_template(name)
+            output = test_template.render(Context())
+
+            if output != input_content:
+                failures.append("Garbage test: %s -- FAILED. Expected %r, got %r" % (name, input_content, output))
+
+        loader.template_source_loaders = old_template_loaders
+
+        self.assertEqual(failures, [], "Tests failed:\n%s\n%s" %
+            ('-'*70, ("\n%s\n" % ('-'*70)).join(failures)))
+
+
     def test_templates(self):
         template_tests = self.get_template_tests()
         filter_tests = filters.get_filter_tests()
