2 # Copyright 2014 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.
6 """Tests for enum_preprocess.py.
8 This test suite containss various tests for the C++ -> Java enum generator.
17 from java_cpp_enum
import EnumDefinition
, GenerateOutput
, GetScriptName
18 from java_cpp_enum
import HeaderParser
20 sys
.path
.append(os
.path
.join(os
.path
.dirname(__file__
), "gyp"))
21 from util
import build_utils
23 class TestPreprocess(unittest
.TestCase
):
25 definition
= EnumDefinition(original_enum_name
='ClassName',
26 enum_package
='some.package',
27 entries
=[('E1', 1), ('E2', '2 << 2')])
28 output
= GenerateOutput('path/to/file', definition
)
30 // Copyright 2014 The Chromium Authors. All rights reserved.
31 // Use of this source code is governed by a BSD-style license that can be
32 // found in the LICENSE file.
34 // This file is autogenerated by
41 public class ClassName {
42 public static final int E1 = 1;
43 public static final int E2 = 2 << 2;
46 self
.assertEqual(expected
% GetScriptName(), output
)
48 def testParseSimpleEnum(self
):
50 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
56 definitions
= HeaderParser(test_data
).ParseDefinitions()
57 self
.assertEqual(1, len(definitions
))
58 definition
= definitions
[0]
59 self
.assertEqual('EnumName', definition
.class_name
)
60 self
.assertEqual('test.namespace', definition
.enum_package
)
61 self
.assertEqual(collections
.OrderedDict([('VALUE_ZERO', 0),
65 def testParseBitShifts(self
):
67 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
73 definitions
= HeaderParser(test_data
).ParseDefinitions()
74 self
.assertEqual(1, len(definitions
))
75 definition
= definitions
[0]
76 self
.assertEqual('EnumName', definition
.class_name
)
77 self
.assertEqual('test.namespace', definition
.enum_package
)
78 self
.assertEqual(collections
.OrderedDict([('VALUE_ZERO', '1 << 0'),
79 ('VALUE_ONE', '1 << 1')]),
82 def testParseClassNameOverride(self
):
84 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
85 // GENERATED_JAVA_CLASS_NAME_OVERRIDE: OverrideName
90 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
91 // GENERATED_JAVA_CLASS_NAME_OVERRIDE: OtherOverride
97 definitions
= HeaderParser(test_data
).ParseDefinitions()
98 self
.assertEqual(2, len(definitions
))
99 definition
= definitions
[0]
100 self
.assertEqual('OverrideName', definition
.class_name
)
102 definition
= definitions
[1]
103 self
.assertEqual('OtherOverride', definition
.class_name
)
104 self
.assertEqual(collections
.OrderedDict([('A', 0),
108 def testParseTwoEnums(self
):
110 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
121 // GENERATED_JAVA_ENUM_PACKAGE: other.package
122 // GENERATED_JAVA_PREFIX_TO_STRIP: P_
128 definitions
= HeaderParser(test_data
).ParseDefinitions()
129 self
.assertEqual(2, len(definitions
))
130 definition
= definitions
[0]
131 self
.assertEqual('EnumOne', definition
.class_name
)
132 self
.assertEqual('test.namespace', definition
.enum_package
)
133 self
.assertEqual(collections
.OrderedDict([('A', '1'),
137 definition
= definitions
[1]
138 self
.assertEqual('EnumTwo', definition
.class_name
)
139 self
.assertEqual('other.package', definition
.enum_package
)
140 self
.assertEqual(collections
.OrderedDict([('A', 0),
144 def testParseThrowsOnUnknownDirective(self
):
146 // GENERATED_JAVA_UNKNOWN: Value
151 with self
.assertRaises(Exception):
152 HeaderParser(test_data
).ParseDefinitions()
154 def testParseEnumClass(self
):
156 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
161 definitions
= HeaderParser(test_data
).ParseDefinitions()
162 self
.assertEqual(1, len(definitions
))
163 definition
= definitions
[0]
164 self
.assertEqual('Foo', definition
.class_name
)
165 self
.assertEqual('test.namespace', definition
.enum_package
)
166 self
.assertEqual(collections
.OrderedDict([('A', 0)]),
169 def testParseEnumStruct(self
):
171 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
176 definitions
= HeaderParser(test_data
).ParseDefinitions()
177 self
.assertEqual(1, len(definitions
))
178 definition
= definitions
[0]
179 self
.assertEqual('Foo', definition
.class_name
)
180 self
.assertEqual('test.namespace', definition
.enum_package
)
181 self
.assertEqual(collections
.OrderedDict([('A', 0)]),
184 def testParseFixedTypeEnum(self
):
186 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
191 definitions
= HeaderParser(test_data
).ParseDefinitions()
192 self
.assertEqual(1, len(definitions
))
193 definition
= definitions
[0]
194 self
.assertEqual('Foo', definition
.class_name
)
195 self
.assertEqual('test.namespace', definition
.enum_package
)
196 self
.assertEqual('int', definition
.fixed_type
)
197 self
.assertEqual(collections
.OrderedDict([('A', 0)]),
200 def testParseFixedTypeEnumClass(self
):
202 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
203 enum class Foo: unsigned short {
207 definitions
= HeaderParser(test_data
).ParseDefinitions()
208 self
.assertEqual(1, len(definitions
))
209 definition
= definitions
[0]
210 self
.assertEqual('Foo', definition
.class_name
)
211 self
.assertEqual('test.namespace', definition
.enum_package
)
212 self
.assertEqual('unsigned short', definition
.fixed_type
)
213 self
.assertEqual(collections
.OrderedDict([('A', 0)]),
216 def testParseUnknownFixedTypeRaises(self
):
218 // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
219 enum class Foo: foo_type {
223 with self
.assertRaises(Exception):
224 HeaderParser(test_data
).ParseDefinitions()
226 def testEnumValueAssignmentNoneDefined(self
):
227 definition
= EnumDefinition(original_enum_name
='c', enum_package
='p')
228 definition
.AppendEntry('A', None)
229 definition
.AppendEntry('B', None)
230 definition
.AppendEntry('C', None)
231 definition
.Finalize()
232 self
.assertEqual(collections
.OrderedDict([('A', 0),
237 def testEnumValueAssignmentAllDefined(self
):
238 definition
= EnumDefinition(original_enum_name
='c', enum_package
='p')
239 definition
.AppendEntry('A', '1')
240 definition
.AppendEntry('B', '2')
241 definition
.AppendEntry('C', '3')
242 definition
.Finalize()
243 self
.assertEqual(collections
.OrderedDict([('A', '1'),
248 def testEnumValueAssignmentReferences(self
):
249 definition
= EnumDefinition(original_enum_name
='c', enum_package
='p')
250 definition
.AppendEntry('A', None)
251 definition
.AppendEntry('B', 'A')
252 definition
.AppendEntry('C', None)
253 definition
.AppendEntry('D', 'C')
254 definition
.Finalize()
255 self
.assertEqual(collections
.OrderedDict([('A', 0),
261 def testEnumValueAssignmentSet(self
):
262 definition
= EnumDefinition(original_enum_name
='c', enum_package
='p')
263 definition
.AppendEntry('A', None)
264 definition
.AppendEntry('B', '2')
265 definition
.AppendEntry('C', None)
266 definition
.Finalize()
267 self
.assertEqual(collections
.OrderedDict([('A', 0),
272 def testEnumValueAssignmentSetReferences(self
):
273 definition
= EnumDefinition(original_enum_name
='c', enum_package
='p')
274 definition
.AppendEntry('A', None)
275 definition
.AppendEntry('B', 'A')
276 definition
.AppendEntry('C', 'B')
277 definition
.AppendEntry('D', None)
278 definition
.Finalize()
279 self
.assertEqual(collections
.OrderedDict([('A', 0),
285 def testEnumValueAssignmentRaises(self
):
286 definition
= EnumDefinition(original_enum_name
='c', enum_package
='p')
287 definition
.AppendEntry('A', None)
288 definition
.AppendEntry('B', 'foo')
289 definition
.AppendEntry('C', None)
290 with self
.assertRaises(Exception):
291 definition
.Finalize()
293 def testExplicitPrefixStripping(self
):
294 definition
= EnumDefinition(original_enum_name
='c', enum_package
='p')
295 definition
.AppendEntry('P_A', None)
296 definition
.AppendEntry('B', None)
297 definition
.AppendEntry('P_C', None)
298 definition
.AppendEntry('P_LAST', 'P_C')
299 definition
.prefix_to_strip
= 'P_'
300 definition
.Finalize()
301 self
.assertEqual(collections
.OrderedDict([('A', 0),
307 def testImplicitPrefixStripping(self
):
308 definition
= EnumDefinition(original_enum_name
='ClassName',
310 definition
.AppendEntry('CLASS_NAME_A', None)
311 definition
.AppendEntry('CLASS_NAME_B', None)
312 definition
.AppendEntry('CLASS_NAME_C', None)
313 definition
.AppendEntry('CLASS_NAME_LAST', 'CLASS_NAME_C')
314 definition
.Finalize()
315 self
.assertEqual(collections
.OrderedDict([('A', 0),
321 def testImplicitPrefixStrippingRequiresAllConstantsToBePrefixed(self
):
322 definition
= EnumDefinition(original_enum_name
='Name',
324 definition
.AppendEntry('A', None)
325 definition
.AppendEntry('B', None)
326 definition
.AppendEntry('NAME_LAST', None)
327 definition
.Finalize()
328 self
.assertEqual(['A', 'B', 'NAME_LAST'], definition
.entries
.keys())
331 parser
= optparse
.OptionParser()
332 parser
.add_option("--stamp", help="File to touch on success.")
333 options
, _
= parser
.parse_args(argv
)
335 suite
= unittest
.TestLoader().loadTestsFromTestCase(TestPreprocess
)
336 unittest
.TextTestRunner(verbosity
=0).run(suite
)
339 build_utils
.Touch(options
.stamp
)
341 if __name__
== '__main__':