Mercurial > genshi > mirror
diff genshi/template/tests/markup.py @ 381:b9fc7a1f76ca trunk
Fix for #80: fallback only shown when the template to include wasn't found. In addition, the nesting of includes and fallback content should work correctly, and directives/expressions/etc inside fallback content are processed. Thanks to Christian Boos for the original patch and unit tests.
author | cmlenz |
---|---|
date | Wed, 29 Nov 2006 14:26:45 +0000 |
parents | b146277eb54a |
children | e29a94b3ba0c |
line wrap: on
line diff
--- a/genshi/template/tests/markup.py +++ b/genshi/template/tests/markup.py @@ -276,6 +276,130 @@ finally: shutil.rmtree(dirname) + def test_fallback_when_include_found(self): + dirname = tempfile.mkdtemp(suffix='genshi_test') + try: + file1 = open(os.path.join(dirname, 'tmpl1.html'), 'w') + try: + file1.write("""<div>Included</div>""") + finally: + file1.close() + + file2 = open(os.path.join(dirname, 'tmpl2.html'), 'w') + try: + file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="tmpl1.html"><xi:fallback> + Missing</xi:fallback></xi:include> + </html>""") + finally: + file2.close() + + loader = TemplateLoader([dirname]) + tmpl = loader.load('tmpl2.html') + self.assertEqual("""<html> + <div>Included</div> + </html>""", tmpl.generate().render()) + finally: + shutil.rmtree(dirname) + + def test_fallback_when_include_not_found(self): + dirname = tempfile.mkdtemp(suffix='genshi_test') + try: + file2 = open(os.path.join(dirname, 'tmpl2.html'), 'w') + try: + file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="tmpl1.html"><xi:fallback> + Missing</xi:fallback></xi:include> + </html>""") + finally: + file2.close() + + loader = TemplateLoader([dirname]) + tmpl = loader.load('tmpl2.html') + self.assertEqual("""<html> + Missing + </html>""", tmpl.generate().render()) + finally: + shutil.rmtree(dirname) + + def test_include_in_fallback(self): + dirname = tempfile.mkdtemp(suffix='genshi_test') + try: + file1 = open(os.path.join(dirname, 'tmpl1.html'), 'w') + try: + file1.write("""<div>Included</div>""") + finally: + file1.close() + + file2 = open(os.path.join(dirname, 'tmpl3.html'), 'w') + try: + file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="tmpl2.html"> + <xi:fallback> + <xi:include href="tmpl1.html"> + <xi:fallback>Missing</xi:fallback> + </xi:include> + </xi:fallback> + </xi:include> + </html>""") + finally: + file2.close() + + loader = TemplateLoader([dirname]) + tmpl = loader.load('tmpl3.html') + self.assertEqual("""<html> + <div>Included</div> + </html>""", tmpl.generate().render()) + finally: + shutil.rmtree(dirname) + + def test_nested_include_fallback(self): + dirname = tempfile.mkdtemp(suffix='genshi_test') + try: + file2 = open(os.path.join(dirname, 'tmpl3.html'), 'w') + try: + file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="tmpl2.html"> + <xi:fallback> + <xi:include href="tmpl1.html"> + <xi:fallback>Missing</xi:fallback> + </xi:include> + </xi:fallback> + </xi:include> + </html>""") + finally: + file2.close() + + loader = TemplateLoader([dirname]) + tmpl = loader.load('tmpl3.html') + self.assertEqual("""<html> + Missing + </html>""", tmpl.generate().render()) + finally: + shutil.rmtree(dirname) + + def test_include_fallback_with_directive(self): + dirname = tempfile.mkdtemp(suffix='genshi_test') + try: + file2 = open(os.path.join(dirname, 'tmpl2.html'), 'w') + try: + file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude" + xmlns:py="http://genshi.edgewall.org/"> + <xi:include href="tmpl1.html"><xi:fallback> + <py:if test="True">tmpl1.html not found</py:if> + </xi:fallback></xi:include> + </html>""") + finally: + file2.close() + + loader = TemplateLoader([dirname]) + tmpl = loader.load('tmpl2.html') + self.assertEqual("""<html> + tmpl1.html not found + </html>""", tmpl.generate(debug=True).render()) + finally: + shutil.rmtree(dirname) + def suite(): suite = unittest.TestSuite()