| import unittest |
| |
| from mako.pygen import PythonPrinter, adjust_whitespace |
| from mako.compat import StringIO |
| from test import eq_ |
| |
| |
| class GeneratePythonTest(unittest.TestCase): |
| def test_generate_normal(self): |
| stream = StringIO() |
| printer = PythonPrinter(stream) |
| printer.writeline("import lala") |
| printer.writeline("for x in foo:") |
| printer.writeline("print x") |
| printer.writeline(None) |
| printer.writeline("print y") |
| assert stream.getvalue() == \ |
| """import lala |
| for x in foo: |
| print x |
| print y |
| """ |
| def test_generate_adjusted(self): |
| block = """ |
| x = 5 +6 |
| if x > 7: |
| for y in range(1,5): |
| print "<td>%s</td>" % y |
| """ |
| stream = StringIO() |
| printer = PythonPrinter(stream) |
| printer.write_indented_block(block) |
| printer.close() |
| #print stream.getvalue() |
| assert stream.getvalue() == \ |
| """ |
| x = 5 +6 |
| if x > 7: |
| for y in range(1,5): |
| print "<td>%s</td>" % y |
| |
| """ |
| def test_generate_combo(self): |
| block = \ |
| """ |
| x = 5 +6 |
| if x > 7: |
| for y in range(1,5): |
| print "<td>%s</td>" % y |
| print "hi" |
| print "there" |
| foo(lala) |
| """ |
| stream = StringIO() |
| printer = PythonPrinter(stream) |
| printer.writeline("import lala") |
| printer.writeline("for x in foo:") |
| printer.writeline("print x") |
| printer.write_indented_block(block) |
| printer.writeline(None) |
| printer.writeline("print y") |
| printer.close() |
| #print "->" + stream.getvalue().replace(' ', '#') + "<-" |
| eq_(stream.getvalue(), |
| """import lala |
| for x in foo: |
| print x |
| |
| x = 5 +6 |
| if x > 7: |
| for y in range(1,5): |
| print "<td>%s</td>" % y |
| print "hi" |
| print "there" |
| foo(lala) |
| |
| print y |
| """) |
| def test_multi_line(self): |
| block = \ |
| """ |
| if test: |
| print ''' this is a block of stuff. |
| this is more stuff in the block. |
| and more block. |
| ''' |
| do_more_stuff(g) |
| """ |
| stream = StringIO() |
| printer = PythonPrinter(stream) |
| printer.write_indented_block(block) |
| printer.close() |
| #print stream.getvalue() |
| assert stream.getvalue() == \ |
| """ |
| if test: |
| print ''' this is a block of stuff. |
| this is more stuff in the block. |
| and more block. |
| ''' |
| do_more_stuff(g) |
| |
| """ |
| |
| def test_false_unindentor(self): |
| stream = StringIO() |
| printer = PythonPrinter(stream) |
| for line in [ |
| "try:", |
| "elsemyvar = 12", |
| "if True:", |
| "print 'hi'", |
| None, |
| "finally:", |
| "dosomething", |
| None |
| ]: |
| printer.writeline(line) |
| |
| assert stream.getvalue() == \ |
| """try: |
| elsemyvar = 12 |
| if True: |
| print 'hi' |
| finally: |
| dosomething |
| """ , stream.getvalue() |
| |
| |
| def test_backslash_line(self): |
| block = \ |
| """ |
| # comment |
| if test: |
| if (lala + hoho) + \\ |
| (foobar + blat) == 5: |
| print "hi" |
| print "more indent" |
| """ |
| stream = StringIO() |
| printer = PythonPrinter(stream) |
| printer.write_indented_block(block) |
| printer.close() |
| assert stream.getvalue() == \ |
| """ |
| # comment |
| if test: |
| if (lala + hoho) + \\ |
| (foobar + blat) == 5: |
| print "hi" |
| print "more indent" |
| |
| """ |
| |
| class WhitespaceTest(unittest.TestCase): |
| def test_basic(self): |
| text = """ |
| for x in range(0,15): |
| print x |
| print "hi" |
| """ |
| assert adjust_whitespace(text) == \ |
| """ |
| for x in range(0,15): |
| print x |
| print "hi" |
| """ |
| |
| def test_blank_lines(self): |
| text = """ |
| print "hi" # a comment |
| |
| # more comments |
| |
| print g |
| """ |
| assert adjust_whitespace(text) == \ |
| """ |
| print "hi" # a comment |
| |
| # more comments |
| |
| print g |
| """ |
| |
| def test_open_quotes_with_pound(self): |
| text = ''' |
| print """ this is text |
| # and this is text |
| # and this is too """ |
| ''' |
| assert adjust_whitespace(text) == \ |
| ''' |
| print """ this is text |
| # and this is text |
| # and this is too """ |
| ''' |
| |
| def test_quote_with_comments(self): |
| text= """ |
| print 'hi' |
| # this is a comment |
| # another comment |
| x = 7 # someone's '''comment |
| print ''' |
| there |
| ''' |
| # someone else's comment |
| """ |
| |
| assert adjust_whitespace(text) == \ |
| """ |
| print 'hi' |
| # this is a comment |
| # another comment |
| x = 7 # someone's '''comment |
| print ''' |
| there |
| ''' |
| # someone else's comment |
| """ |
| |
| |
| def test_quotes_with_pound(self): |
| text = ''' |
| if True: |
| """#""" |
| elif False: |
| "bar" |
| ''' |
| assert adjust_whitespace(text) == \ |
| ''' |
| if True: |
| """#""" |
| elif False: |
| "bar" |
| ''' |
| |
| def test_quotes(self): |
| text = """ |
| print ''' aslkjfnas kjdfn |
| askdjfnaskfd fkasnf dknf sadkfjn asdkfjna sdakjn |
| asdkfjnads kfajns ''' |
| if x: |
| print y |
| """ |
| assert adjust_whitespace(text) == \ |
| """ |
| print ''' aslkjfnas kjdfn |
| askdjfnaskfd fkasnf dknf sadkfjn asdkfjna sdakjn |
| asdkfjnads kfajns ''' |
| if x: |
| print y |
| """ |