comparison genshi/template/tests/markup.py @ 902:09cc3627654c experimental-inline

Sync `experimental/inline` branch with [source:trunk@1126].
author cmlenz
date Fri, 23 Apr 2010 21:08:26 +0000
parents de82830f8816
children
comparison
equal deleted inserted replaced
830:de82830f8816 902:09cc3627654c
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 # 2 #
3 # Copyright (C) 2006-2008 Edgewall Software 3 # Copyright (C) 2006-2009 Edgewall Software
4 # All rights reserved. 4 # All rights reserved.
5 # 5 #
6 # This software is licensed as described in the file COPYING, which 6 # This software is licensed as described in the file COPYING, which
7 # you should have received as part of this distribution. The terms 7 # you should have received as part of this distribution. The terms
8 # are also available at http://genshi.edgewall.org/wiki/License. 8 # are also available at http://genshi.edgewall.org/wiki/License.
209 def test_exec_with_trailing_space(self): 209 def test_exec_with_trailing_space(self):
210 """ 210 """
211 Verify that a code block processing instruction with trailing space 211 Verify that a code block processing instruction with trailing space
212 does not cause a syntax error (see ticket #127). 212 does not cause a syntax error (see ticket #127).
213 """ 213 """
214 MarkupTemplate(u"""<foo> 214 MarkupTemplate("""<foo>
215 <?python 215 <?python
216 bar = 42 216 bar = 42
217 ?> 217 ?>
218 </foo>""") 218 </foo>""")
219 219
220 def test_exec_import(self): 220 def test_exec_import(self):
221 tmpl = MarkupTemplate(u"""<?python from datetime import timedelta ?> 221 tmpl = MarkupTemplate("""<?python from datetime import timedelta ?>
222 <div xmlns:py="http://genshi.edgewall.org/"> 222 <div xmlns:py="http://genshi.edgewall.org/">
223 ${timedelta(days=2)} 223 ${timedelta(days=2)}
224 </div>""") 224 </div>""")
225 self.assertEqual(u"""<div> 225 self.assertEqual("""<div>
226 2 days, 0:00:00 226 2 days, 0:00:00
227 </div>""", str(tmpl.generate())) 227 </div>""", str(tmpl.generate()))
228 228
229 def test_exec_def(self): 229 def test_exec_def(self):
230 tmpl = MarkupTemplate(u""" 230 tmpl = MarkupTemplate("""
231 <?python 231 <?python
232 def foo(): 232 def foo():
233 return 42 233 return 42
234 ?> 234 ?>
235 <div xmlns:py="http://genshi.edgewall.org/"> 235 <div xmlns:py="http://genshi.edgewall.org/">
236 ${foo()} 236 ${foo()}
237 </div>""") 237 </div>""")
238 self.assertEqual(u"""<div> 238 self.assertEqual("""<div>
239 42 239 42
240 </div>""", str(tmpl.generate())) 240 </div>""", str(tmpl.generate()))
241 241
242 def test_namespace_on_removed_elem(self): 242 def test_namespace_on_removed_elem(self):
243 """ 243 """
275 275
276 loader = TemplateLoader([dirname]) 276 loader = TemplateLoader([dirname])
277 tmpl = loader.load('tmpl2.html') 277 tmpl = loader.load('tmpl2.html')
278 self.assertEqual("""<html> 278 self.assertEqual("""<html>
279 <div>Included 0</div><div>Included 1</div><div>Included 2</div> 279 <div>Included 0</div><div>Included 1</div><div>Included 2</div>
280 </html>""", tmpl.generate(name='tmpl1').render()) 280 </html>""", tmpl.generate(name='tmpl1').render(encoding=None))
281 finally: 281 finally:
282 shutil.rmtree(dirname) 282 shutil.rmtree(dirname)
283 283
284 def test_dynamic_include_href(self): 284 def test_dynamic_include_href(self):
285 dirname = tempfile.mkdtemp(suffix='genshi_test') 285 dirname = tempfile.mkdtemp(suffix='genshi_test')
301 301
302 loader = TemplateLoader([dirname]) 302 loader = TemplateLoader([dirname])
303 tmpl = loader.load('tmpl2.html') 303 tmpl = loader.load('tmpl2.html')
304 self.assertEqual("""<html> 304 self.assertEqual("""<html>
305 <div>Included</div> 305 <div>Included</div>
306 </html>""", tmpl.generate(name='tmpl1').render()) 306 </html>""", tmpl.generate(name='tmpl1').render(encoding=None))
307 finally: 307 finally:
308 shutil.rmtree(dirname) 308 shutil.rmtree(dirname)
309 309
310 def test_select_included_elements(self): 310 def test_select_included_elements(self):
311 dirname = tempfile.mkdtemp(suffix='genshi_test') 311 dirname = tempfile.mkdtemp(suffix='genshi_test')
330 330
331 loader = TemplateLoader([dirname]) 331 loader = TemplateLoader([dirname])
332 tmpl = loader.load('tmpl2.html') 332 tmpl = loader.load('tmpl2.html')
333 self.assertEqual("""<html> 333 self.assertEqual("""<html>
334 <ul><li>1</li><li>2</li><li>3</li></ul> 334 <ul><li>1</li><li>2</li><li>3</li></ul>
335 </html>""", tmpl.generate().render()) 335 </html>""", tmpl.generate().render(encoding=None))
336 finally: 336 finally:
337 shutil.rmtree(dirname) 337 shutil.rmtree(dirname)
338 338
339 def test_fallback_when_include_found(self): 339 def test_fallback_when_include_found(self):
340 dirname = tempfile.mkdtemp(suffix='genshi_test') 340 dirname = tempfile.mkdtemp(suffix='genshi_test')
356 356
357 loader = TemplateLoader([dirname]) 357 loader = TemplateLoader([dirname])
358 tmpl = loader.load('tmpl2.html') 358 tmpl = loader.load('tmpl2.html')
359 self.assertEqual("""<html> 359 self.assertEqual("""<html>
360 <div>Included</div> 360 <div>Included</div>
361 </html>""", tmpl.generate().render()) 361 </html>""", tmpl.generate().render(encoding=None))
362 finally: 362 finally:
363 shutil.rmtree(dirname) 363 shutil.rmtree(dirname)
364 364
365 def test_error_when_include_not_found(self): 365 def test_error_when_include_not_found(self):
366 dirname = tempfile.mkdtemp(suffix='genshi_test') 366 dirname = tempfile.mkdtemp(suffix='genshi_test')
393 393
394 loader = TemplateLoader([dirname]) 394 loader = TemplateLoader([dirname])
395 tmpl = loader.load('tmpl2.html') 395 tmpl = loader.load('tmpl2.html')
396 self.assertEqual("""<html> 396 self.assertEqual("""<html>
397 Missing 397 Missing
398 </html>""", tmpl.generate().render()) 398 </html>""", tmpl.generate().render(encoding=None))
399 finally: 399 finally:
400 shutil.rmtree(dirname) 400 shutil.rmtree(dirname)
401 401
402 def test_fallback_when_auto_reload_true(self): 402 def test_fallback_when_auto_reload_true(self):
403 dirname = tempfile.mkdtemp(suffix='genshi_test') 403 dirname = tempfile.mkdtemp(suffix='genshi_test')
413 413
414 loader = TemplateLoader([dirname], auto_reload=True) 414 loader = TemplateLoader([dirname], auto_reload=True)
415 tmpl = loader.load('tmpl2.html') 415 tmpl = loader.load('tmpl2.html')
416 self.assertEqual("""<html> 416 self.assertEqual("""<html>
417 Missing 417 Missing
418 </html>""", tmpl.generate().render()) 418 </html>""", tmpl.generate().render(encoding=None))
419 finally: 419 finally:
420 shutil.rmtree(dirname) 420 shutil.rmtree(dirname)
421 421
422 def test_include_in_fallback(self): 422 def test_include_in_fallback(self):
423 dirname = tempfile.mkdtemp(suffix='genshi_test') 423 dirname = tempfile.mkdtemp(suffix='genshi_test')
444 444
445 loader = TemplateLoader([dirname]) 445 loader = TemplateLoader([dirname])
446 tmpl = loader.load('tmpl3.html') 446 tmpl = loader.load('tmpl3.html')
447 self.assertEqual("""<html> 447 self.assertEqual("""<html>
448 <div>Included</div> 448 <div>Included</div>
449 </html>""", tmpl.generate().render()) 449 </html>""", tmpl.generate().render(encoding=None))
450 finally: 450 finally:
451 shutil.rmtree(dirname) 451 shutil.rmtree(dirname)
452 452
453 def test_nested_include_fallback(self): 453 def test_nested_include_fallback(self):
454 dirname = tempfile.mkdtemp(suffix='genshi_test') 454 dirname = tempfile.mkdtemp(suffix='genshi_test')
469 469
470 loader = TemplateLoader([dirname]) 470 loader = TemplateLoader([dirname])
471 tmpl = loader.load('tmpl3.html') 471 tmpl = loader.load('tmpl3.html')
472 self.assertEqual("""<html> 472 self.assertEqual("""<html>
473 Missing 473 Missing
474 </html>""", tmpl.generate().render()) 474 </html>""", tmpl.generate().render(encoding=None))
475 finally: 475 finally:
476 shutil.rmtree(dirname) 476 shutil.rmtree(dirname)
477 477
478 def test_nested_include_in_fallback(self): 478 def test_nested_include_in_fallback(self):
479 dirname = tempfile.mkdtemp(suffix='genshi_test') 479 dirname = tempfile.mkdtemp(suffix='genshi_test')
498 498
499 loader = TemplateLoader([dirname]) 499 loader = TemplateLoader([dirname])
500 tmpl = loader.load('tmpl3.html') 500 tmpl = loader.load('tmpl3.html')
501 self.assertEqual("""<html> 501 self.assertEqual("""<html>
502 <div>Included</div> 502 <div>Included</div>
503 </html>""", tmpl.generate().render()) 503 </html>""", tmpl.generate().render(encoding=None))
504 finally: 504 finally:
505 shutil.rmtree(dirname) 505 shutil.rmtree(dirname)
506 506
507 def test_include_fallback_with_directive(self): 507 def test_include_fallback_with_directive(self):
508 dirname = tempfile.mkdtemp(suffix='genshi_test') 508 dirname = tempfile.mkdtemp(suffix='genshi_test')
520 520
521 loader = TemplateLoader([dirname]) 521 loader = TemplateLoader([dirname])
522 tmpl = loader.load('tmpl2.html') 522 tmpl = loader.load('tmpl2.html')
523 self.assertEqual("""<html> 523 self.assertEqual("""<html>
524 tmpl1.html not found 524 tmpl1.html not found
525 </html>""", tmpl.generate(debug=True).render()) 525 </html>""", tmpl.generate(debug=True).render(encoding=None))
526 finally: 526 finally:
527 shutil.rmtree(dirname) 527 shutil.rmtree(dirname)
528 528
529 def test_include_inlined(self): 529 def test_include_inlined(self):
530 dirname = tempfile.mkdtemp(suffix='genshi_test') 530 dirname = tempfile.mkdtemp(suffix='genshi_test')
548 tmpl = loader.load('tmpl2.html') 548 tmpl = loader.load('tmpl2.html')
549 # if not inlined the following would be 5 549 # if not inlined the following would be 5
550 self.assertEqual(7, len(tmpl.stream)) 550 self.assertEqual(7, len(tmpl.stream))
551 self.assertEqual("""<html> 551 self.assertEqual("""<html>
552 <div>Included</div> 552 <div>Included</div>
553 </html>""", tmpl.generate().render()) 553 </html>""", tmpl.generate().render(encoding=None))
554 finally: 554 finally:
555 shutil.rmtree(dirname) 555 shutil.rmtree(dirname)
556 556
557 def test_include_inlined_in_loop(self): 557 def test_include_inlined_in_loop(self):
558 dirname = tempfile.mkdtemp(suffix='genshi_test') 558 dirname = tempfile.mkdtemp(suffix='genshi_test')
574 574
575 loader = TemplateLoader([dirname], auto_reload=False) 575 loader = TemplateLoader([dirname], auto_reload=False)
576 tmpl = loader.load('tmpl2.html') 576 tmpl = loader.load('tmpl2.html')
577 self.assertEqual("""<html> 577 self.assertEqual("""<html>
578 <div>Included 0</div><div>Included 1</div><div>Included 2</div> 578 <div>Included 0</div><div>Included 1</div><div>Included 2</div>
579 </html>""", tmpl.generate().render()) 579 </html>""", tmpl.generate().render(encoding=None))
580 finally: 580 finally:
581 shutil.rmtree(dirname) 581 shutil.rmtree(dirname)
582 582
583 def test_allow_exec_false(self): 583 def test_allow_exec_false(self):
584 xml = ("""<?python 584 xml = ("""<?python
618 tmpl = MarkupTemplate(xml, filename='test.html', allow_exec=True) 618 tmpl = MarkupTemplate(xml, filename='test.html', allow_exec=True)
619 self.assertEqual("""<html> 619 self.assertEqual("""<html>
620 <body> 620 <body>
621 wakka wakka wakka 621 wakka wakka wakka
622 </body> 622 </body>
623 </html>""", tmpl.generate().render()) 623 </html>""", tmpl.generate().render(encoding=None))
624 624
625 def test_with_in_match(self): 625 def test_with_in_match(self):
626 xml = ("""<html xmlns:py="http://genshi.edgewall.org/"> 626 xml = ("""<html xmlns:py="http://genshi.edgewall.org/">
627 <py:match path="body/p"> 627 <py:match path="body/p">
628 <h1>${select('text()')}</h1> 628 <h1>${select('text()')}</h1>
634 self.assertEqual("""<html> 634 self.assertEqual("""<html>
635 <body> 635 <body>
636 <h1>bar</h1> 636 <h1>bar</h1>
637 <p>bar</p> 637 <p>bar</p>
638 </body> 638 </body>
639 </html>""", tmpl.generate().render()) 639 </html>""", tmpl.generate().render(encoding=None))
640 640
641 def test_nested_include_matches(self): 641 def test_nested_include_matches(self):
642 # See ticket #157 642 # See ticket #157
643 dirname = tempfile.mkdtemp(suffix='genshi_test') 643 dirname = tempfile.mkdtemp(suffix='genshi_test')
644 try: 644 try:
686 Some added stuff. 686 Some added stuff.
687 Some content. 687 Some content.
688 </div> 688 </div>
689 </body> 689 </body>
690 </html> 690 </html>
691 """, tmpl.generate().render()) 691 """, tmpl.generate().render(encoding=None))
692 finally: 692 finally:
693 shutil.rmtree(dirname) 693 shutil.rmtree(dirname)
694 694
695 def test_nested_matches_without_buffering(self): 695 def test_nested_matches_without_buffering(self):
696 xml = ("""<html xmlns:py="http://genshi.edgewall.org/"> 696 xml = ("""<html xmlns:py="http://genshi.edgewall.org/">
709 self.assertEqual("""<html> 709 self.assertEqual("""<html>
710 <body> 710 <body>
711 <span>Foo</span> 711 <span>Foo</span>
712 And some other stuff... 712 And some other stuff...
713 </body> 713 </body>
714 </html>""", tmpl.generate().render()) 714 </html>""", tmpl.generate().render(encoding=None))
715 715
716 def test_match_without_select(self): 716 def test_match_without_select(self):
717 # See <http://genshi.edgewall.org/ticket/243> 717 # See <http://genshi.edgewall.org/ticket/243>
718 xml = ("""<html xmlns:py="http://genshi.edgewall.org/"> 718 xml = ("""<html xmlns:py="http://genshi.edgewall.org/">
719 <py:match path="body" buffer="false"> 719 <py:match path="body" buffer="false">
728 tmpl = MarkupTemplate(xml, filename='test.html') 728 tmpl = MarkupTemplate(xml, filename='test.html')
729 self.assertEqual("""<html> 729 self.assertEqual("""<html>
730 <body> 730 <body>
731 This replaces the other text. 731 This replaces the other text.
732 </body> 732 </body>
733 </html>""", tmpl.generate().render()) 733 </html>""", tmpl.generate().render(encoding=None))
734 734
735 735
736 def suite(): 736 def suite():
737 suite = unittest.TestSuite() 737 suite = unittest.TestSuite()
738 suite.addTest(doctest.DocTestSuite(MarkupTemplate.__module__)) 738 suite.addTest(doctest.DocTestSuite(MarkupTemplate.__module__))
Copyright (C) 2012-2017 Edgewall Software