| #!/usr/bin/env python |
| # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from code import Code |
| import unittest |
| |
| class CodeTest(unittest.TestCase): |
| def testAppend(self): |
| c = Code() |
| c.Append('line') |
| self.assertEquals('line', c.Render()) |
| |
| def testBlock(self): |
| c = Code() |
| (c.Append('line') |
| .Sblock('sblock') |
| .Append('inner') |
| .Append('moreinner') |
| .Sblock('moresblock') |
| .Append('inner') |
| .Eblock('out') |
| .Append('inner') |
| .Eblock('out') |
| ) |
| self.assertEquals( |
| 'line\n' |
| 'sblock\n' |
| ' inner\n' |
| ' moreinner\n' |
| ' moresblock\n' |
| ' inner\n' |
| ' out\n' |
| ' inner\n' |
| 'out', |
| c.Render()) |
| |
| def testConcat(self): |
| b = Code() |
| (b.Sblock('2') |
| .Append('2') |
| .Eblock('2') |
| ) |
| c = Code() |
| (c.Sblock('1') |
| .Concat(b) |
| .Append('1') |
| .Eblock('1') |
| ) |
| self.assertEquals( |
| '1\n' |
| ' 2\n' |
| ' 2\n' |
| ' 2\n' |
| ' 1\n' |
| '1', |
| c.Render()) |
| d = Code() |
| a = Code() |
| a.Concat(d) |
| self.assertEquals('', a.Render()) |
| a.Concat(c) |
| self.assertEquals( |
| '1\n' |
| ' 2\n' |
| ' 2\n' |
| ' 2\n' |
| ' 1\n' |
| '1', |
| a.Render()) |
| |
| def testConcatErrors(self): |
| c = Code() |
| d = Code() |
| d.Append('%s') |
| self.assertRaises(TypeError, c.Concat, d) |
| d = Code() |
| d.Append('%(classname)s') |
| self.assertRaises(TypeError, c.Concat, d) |
| d = 'line of code' |
| self.assertRaises(TypeError, c.Concat, d) |
| |
| def testSubstitute(self): |
| c = Code() |
| c.Append('%(var1)s %(var2)s %(var1)s') |
| c.Substitute({'var1': 'one', 'var2': 'two'}) |
| self.assertEquals('one two one', c.Render()) |
| c.Append('%(var1)s %(var2)s %(var3)s') |
| c.Append('%(var2)s %(var1)s %(var3)s') |
| c.Substitute({'var1': 'one', 'var2': 'two', 'var3': 'three'}) |
| self.assertEquals( |
| 'one two one\n' |
| 'one two three\n' |
| 'two one three', |
| c.Render()) |
| |
| def testSubstituteErrors(self): |
| # No unnamed placeholders allowed when substitute is run |
| c = Code() |
| c.Append('%s %s') |
| self.assertRaises(TypeError, c.Substitute, ('var1', 'one')) |
| c = Code() |
| c.Append('%s %(var1)s') |
| self.assertRaises(TypeError, c.Substitute, {'var1': 'one'}) |
| c = Code() |
| c.Append('%s %(var1)s') |
| self.assertRaises(TypeError, c.Substitute, {'var1': 'one'}) |
| c = Code() |
| c.Append('%(var1)s') |
| self.assertRaises(KeyError, c.Substitute, {'clearlynotvar1': 'one'}) |
| |
| def testIsEmpty(self): |
| c = Code() |
| self.assertTrue(c.IsEmpty()) |
| c.Append('asdf') |
| self.assertFalse(c.IsEmpty()) |
| |
| def testComment(self): |
| long_comment = ('This comment is eighty nine characters in longness, ' |
| 'that is, to use another word, length') |
| c = Code() |
| c.Comment(long_comment) |
| self.assertEquals( |
| '// This comment is eighty nine characters ' |
| 'in longness, that is, to use another\n' |
| '// word, length', |
| c.Render()) |
| c = Code() |
| c.Sblock('sblock') |
| c.Comment(long_comment) |
| c.Eblock('eblock') |
| c.Comment(long_comment) |
| self.assertEquals( |
| 'sblock\n' |
| ' // This comment is eighty nine characters ' |
| 'in longness, that is, to use\n' |
| ' // another word, length\n' |
| 'eblock\n' |
| '// This comment is eighty nine characters in ' |
| 'longness, that is, to use another\n' |
| '// word, length', |
| c.Render()) |
| long_word = 'x' * 100 |
| c = Code() |
| c.Comment(long_word) |
| self.assertEquals( |
| '// ' + 'x' * 77 + '\n' |
| '// ' + 'x' * 23, |
| c.Render()) |
| |
| def testCommentWithSpecialCharacters(self): |
| c = Code() |
| c.Comment('20% of 80%s') |
| c.Substitute({}) |
| self.assertEquals('// 20% of 80%s', c.Render()) |
| d = Code() |
| d.Append('90') |
| d.Concat(c) |
| self.assertEquals('90\n' |
| '// 20% of 80%s', |
| d.Render()) |
| |
| if __name__ == '__main__': |
| unittest.main() |