- add sources.
[platform/framework/web/crosswalk.git] / src / tools / json_schema_compiler / code_test.py
1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 from code import Code
7 import unittest
8
9 class CodeTest(unittest.TestCase):
10   def testAppend(self):
11     c = Code()
12     c.Append('line')
13     self.assertEquals('line', c.Render())
14
15   def testBlock(self):
16     c = Code()
17     (c.Append('line')
18       .Sblock('sblock')
19         .Append('inner')
20         .Append('moreinner')
21         .Sblock('moresblock')
22           .Append('inner')
23         .Eblock('out')
24         .Append('inner')
25       .Eblock('out')
26     )
27     self.assertEquals(
28       'line\n'
29       'sblock\n'
30       '  inner\n'
31       '  moreinner\n'
32       '  moresblock\n'
33       '    inner\n'
34       '  out\n'
35       '  inner\n'
36       'out',
37       c.Render())
38
39   def testConcat(self):
40     b = Code()
41     (b.Sblock('2')
42         .Append('2')
43       .Eblock('2')
44     )
45     c = Code()
46     (c.Sblock('1')
47         .Concat(b)
48         .Append('1')
49       .Eblock('1')
50     )
51     self.assertEquals(
52       '1\n'
53       '  2\n'
54       '    2\n'
55       '  2\n'
56       '  1\n'
57       '1',
58       c.Render())
59     d = Code()
60     a = Code()
61     a.Concat(d)
62     self.assertEquals('', a.Render())
63     a.Concat(c)
64     self.assertEquals(
65       '1\n'
66       '  2\n'
67       '    2\n'
68       '  2\n'
69       '  1\n'
70       '1',
71       a.Render())
72
73   def testConcatErrors(self):
74     c = Code()
75     d = Code()
76     d.Append('%s')
77     self.assertRaises(TypeError, c.Concat, d)
78     d = Code()
79     d.Append('%(classname)s')
80     self.assertRaises(TypeError, c.Concat, d)
81     d = 'line of code'
82     self.assertRaises(TypeError, c.Concat, d)
83
84   def testSubstitute(self):
85     c = Code()
86     c.Append('%(var1)s %(var2)s %(var1)s')
87     c.Substitute({'var1': 'one', 'var2': 'two'})
88     self.assertEquals('one two one', c.Render())
89     c.Append('%(var1)s %(var2)s %(var3)s')
90     c.Append('%(var2)s %(var1)s %(var3)s')
91     c.Substitute({'var1': 'one', 'var2': 'two', 'var3': 'three'})
92     self.assertEquals(
93         'one two one\n'
94         'one two three\n'
95         'two one three',
96         c.Render())
97
98   def testSubstituteErrors(self):
99     # No unnamed placeholders allowed when substitute is run
100     c = Code()
101     c.Append('%s %s')
102     self.assertRaises(TypeError, c.Substitute, ('var1', 'one'))
103     c = Code()
104     c.Append('%s %(var1)s')
105     self.assertRaises(TypeError, c.Substitute, {'var1': 'one'})
106     c = Code()
107     c.Append('%s %(var1)s')
108     self.assertRaises(TypeError, c.Substitute, {'var1': 'one'})
109     c = Code()
110     c.Append('%(var1)s')
111     self.assertRaises(KeyError, c.Substitute, {'clearlynotvar1': 'one'})
112
113   def testIsEmpty(self):
114     c = Code()
115     self.assertTrue(c.IsEmpty())
116     c.Append('asdf')
117     self.assertFalse(c.IsEmpty())
118
119   def testComment(self):
120     long_comment = ('This comment is eighty nine characters in longness, '
121         'that is, to use another word, length')
122     c = Code()
123     c.Comment(long_comment)
124     self.assertEquals(
125         '// This comment is eighty nine characters '
126         'in longness, that is, to use another\n'
127         '// word, length',
128         c.Render())
129     c = Code()
130     c.Sblock('sblock')
131     c.Comment(long_comment)
132     c.Eblock('eblock')
133     c.Comment(long_comment)
134     self.assertEquals(
135         'sblock\n'
136         '  // This comment is eighty nine characters '
137         'in longness, that is, to use\n'
138         '  // another word, length\n'
139         'eblock\n'
140         '// This comment is eighty nine characters in '
141         'longness, that is, to use another\n'
142         '// word, length',
143         c.Render())
144     long_word = 'x' * 100
145     c = Code()
146     c.Comment(long_word)
147     self.assertEquals(
148         '// ' + 'x' * 77 + '\n'
149         '// ' + 'x' * 23,
150         c.Render())
151
152   def testCommentWithSpecialCharacters(self):
153     c = Code()
154     c.Comment('20% of 80%s')
155     c.Substitute({})
156     self.assertEquals('// 20% of 80%s', c.Render())
157     d = Code()
158     d.Append('90')
159     d.Concat(c)
160     self.assertEquals('90\n'
161         '// 20% of 80%s',
162         d.Render())
163
164 if __name__ == '__main__':
165   unittest.main()