11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#!/usr/bin/env python 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Copyright 2014 The Chromium Authors. All rights reserved. 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Use of this source code is governed by a BSD-style license that can be 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# found in the LICENSE file. 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci"""Tests for enum_preprocess.py. 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciThis test suite containss various tests for the C++ -> Java enum generator. 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci""" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport collections 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport unittest 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom java_cpp_enum import EnumDefinition, GenerateOutput, HeaderParser 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TestPreprocess(unittest.TestCase): 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testOutput(self): 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = EnumDefinition(class_name='ClassName', 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci class_package='some.package', 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci entries=[('E1', 1), ('E2', '2 << 2')]) 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci output = GenerateOutput('path/to/file', definition) 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected = """ 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This file is autogenerated by 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// build/android/gyp/java_cpp_enum_tests.py 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// From 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// path/to/file 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipackage some.package; 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic class ClassName { 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public static final int E1 = 1; 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public static final int E2 = 2 << 2; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci""" 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(expected, output) 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testParseSimpleEnum(self): 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_data = """ 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // GENERATED_JAVA_ENUM_PACKAGE: test.namespace 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci enum EnumName { 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VALUE_ZERO, 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VALUE_ONE, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci """.split('\n') 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definitions = HeaderParser(test_data).ParseDefinitions() 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(1, len(definitions)) 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = definitions[0] 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual('EnumName', definition.class_name) 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual('test.namespace', definition.class_package) 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(collections.OrderedDict([('VALUE_ZERO', 0), 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('VALUE_ONE', 1)]), 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.entries) 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testParseTwoEnums(self): 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_data = """ 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // GENERATED_JAVA_ENUM_PACKAGE: test.namespace 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci enum EnumOne { 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ENUM_ONE_A = 1, 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Comment there 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ENUM_ONE_B = A, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci enum EnumIgnore { 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci C, D, E 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // GENERATED_JAVA_ENUM_PACKAGE: other.package 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // GENERATED_JAVA_PREFIX_TO_STRIP: P_ 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci enum EnumTwo { 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci P_A, 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci P_B 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci """.split('\n') 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definitions = HeaderParser(test_data).ParseDefinitions() 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(2, len(definitions)) 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = definitions[0] 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual('EnumOne', definition.class_name) 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual('test.namespace', definition.class_package) 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(collections.OrderedDict([('A', '1'), 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('B', 'A')]), 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.entries) 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = definitions[1] 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual('EnumTwo', definition.class_name) 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual('other.package', definition.class_package) 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(collections.OrderedDict([('A', 0), 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('B', 1)]), 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.entries) 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testEnumValueAssignmentNoneDefined(self): 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = EnumDefinition('c', 'p', []) 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('A', None) 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('B', None) 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('C', None) 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.Finalize() 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(collections.OrderedDict([('A', 0), 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('B', 1), 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('C', 2)]), 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.entries) 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testEnumValueAssignmentAllDefined(self): 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = EnumDefinition('c', 'p', []) 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('A', '1') 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('B', '2') 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('C', '3') 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.Finalize() 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(collections.OrderedDict([('A', '1'), 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('B', '2'), 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('C', '3')]), 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.entries) 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testEnumValueAssignmentReferences(self): 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = EnumDefinition('c', 'p', []) 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('A', None) 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('B', 'A') 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('C', None) 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('D', 'C') 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.Finalize() 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(collections.OrderedDict([('A', 0), 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('B', 0), 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('C', 1), 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ('D', 1)]), 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.entries) 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testEnumValueAssignmentRaises(self): 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = EnumDefinition('c', 'p', []) 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('A', None) 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('B', '1') 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('C', None) 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci with self.assertRaises(Exception): 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.Finalize() 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testExplicitPrefixStripping(self): 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = EnumDefinition('c', 'p', []) 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('P_A', None) 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('B', None) 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('P_C', None) 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.prefix_to_strip = 'P_' 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.Finalize() 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(['A', 'B', 'C'], definition.entries.keys()) 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testImplicitPrefixStripping(self): 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = EnumDefinition('ClassName', 'p', []) 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('CLASS_NAME_A', None) 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('CLASS_NAME_B', None) 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('CLASS_NAME_C', None) 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.Finalize() 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(['A', 'B', 'C'], definition.entries.keys()) 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testImplicitPrefixStrippingRequiresAllConstantsToBePrefixed(self): 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition = EnumDefinition('Name', 'p', []) 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('A', None) 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('B', None) 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.AppendEntry('NAME_LAST', None) 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci definition.Finalize() 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(['A', 'B', 'NAME_LAST'], definition.entries.keys()) 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciif __name__ == '__main__': 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unittest.main() 164