Mercurial > genshi > genshi-test
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__)) |