diff genshi/template/tests/loader.py @ 698:408ab81767c7 trunk

Fix for prefix-dispatched template loading. Closes #206. Thanks to Waldemar Kornewald for the patch.
author cmlenz
date Thu, 27 Mar 2008 14:45:11 +0000
parents 66eead58c120
children cfe3b4f02d77
line wrap: on
line diff
--- a/genshi/template/tests/loader.py
+++ b/genshi/template/tests/loader.py
@@ -277,6 +277,16 @@
             </html>""", tmpl.generate().render())
 
     def test_prefix_delegation_to_directories(self):
+        """
+        Test prefix delegation with the following layout:
+        
+        templates/foo.html
+        sub1/templates/tmpl1.html
+        sub2/templates/tmpl2.html
+        
+        Where sub1 and sub2 are prefixes, and both tmpl1.html and tmpl2.html
+        incldue foo.html.
+        """
         dir1 = os.path.join(self.dirname, 'templates')
         os.mkdir(dir1)
         file1 = open(os.path.join(dir1, 'foo.html'), 'w')
@@ -290,7 +300,7 @@
         file2 = open(os.path.join(dir2, 'tmpl1.html'), 'w')
         try:
             file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude">
-              <xi:include href="foo.html" /> from sub1
+              <xi:include href="../foo.html" /> from sub1
             </html>""")
         finally:
             file2.close()
@@ -299,9 +309,7 @@
         os.makedirs(dir3)
         file3 = open(os.path.join(dir3, 'tmpl2.html'), 'w')
         try:
-            file3.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude">
-              <xi:include href="foo.html" /> from sub2
-            </html>""")
+            file3.write("""<div>tmpl2</div>""")
         finally:
             file3.close()
 
@@ -314,6 +322,62 @@
               <div>Included foo</div> from sub1
             </html>""", tmpl.generate().render())
 
+    def test_prefix_delegation_to_directories_with_subdirs(self):
+        """
+        Test prefix delegation with the following layout:
+        
+        templates/foo.html
+        sub1/templates/tmpl1.html
+        sub1/templates/tmpl2.html
+        sub1/templates/bar/tmpl3.html
+        
+        Where sub1 is a prefix, and tmpl1.html includes all the others.
+        """
+        dir1 = os.path.join(self.dirname, 'templates')
+        os.mkdir(dir1)
+        file1 = open(os.path.join(dir1, 'foo.html'), 'w')
+        try:
+            file1.write("""<div>Included foo</div>""")
+        finally:
+            file1.close()
+
+        dir2 = os.path.join(self.dirname, 'sub1', 'templates')
+        os.makedirs(dir2)
+        file2 = open(os.path.join(dir2, 'tmpl1.html'), 'w')
+        try:
+            file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude">
+              <xi:include href="../foo.html" /> from sub1
+              <xi:include href="tmpl2.html" /> from sub1
+              <xi:include href="bar/tmpl3.html" /> from sub1
+            </html>""")
+        finally:
+            file2.close()
+
+        file3 = open(os.path.join(dir2, 'tmpl2.html'), 'w')
+        try:
+            file3.write("""<div>tmpl2</div>""")
+        finally:
+            file3.close()
+
+        dir3 = os.path.join(self.dirname, 'sub1', 'templates', 'bar')
+        os.makedirs(dir3)
+        file4 = open(os.path.join(dir3, 'tmpl3.html'), 'w')
+        try:
+            file4.write("""<div>bar/tmpl3</div>""")
+        finally:
+            file4.close()
+
+        loader = TemplateLoader([dir1, TemplateLoader.prefixed(
+            sub1 = os.path.join(dir2),
+            sub2 = os.path.join(dir3)
+        )])
+        tmpl = loader.load('sub1/tmpl1.html')
+        self.assertEqual("""<html>
+              <div>Included foo</div> from sub1
+              <div>tmpl2</div> from sub1
+              <div>bar/tmpl3</div> from sub1
+            </html>""", tmpl.generate().render())
+
 
 def suite():
     suite = unittest.TestSuite()
Copyright (C) 2012-2017 Edgewall Software