diff options
Diffstat (limited to 'test/test_pygen.py')
-rw-r--r-- | test/test_pygen.py | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/test/test_pygen.py b/test/test_pygen.py new file mode 100644 index 0000000..181140f --- /dev/null +++ b/test/test_pygen.py @@ -0,0 +1,252 @@ +import unittest + +from mako.pygen import PythonPrinter, adjust_whitespace +from StringIO import StringIO + +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(' ', '#') + "<-" + assert 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 +""" |