[pygccxml-commit] SF.net SVN: pygccxml: [1064] pygccxml_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-06-19 09:35:52
|
Revision: 1064 http://svn.sourceforge.net/pygccxml/?rev=1064&view=rev Author: roman_yakovenko Date: 2007-06-19 02:35:45 -0700 (Tue, 19 Jun 2007) Log Message: ----------- moving functionality "container_traits" from Py++ to pygccxml Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/__init__.py pygccxml_dev/pygccxml/declarations/class_declaration.py pygccxml_dev/pygccxml/declarations/container_traits.py pygccxml_dev/unittests/remove_template_defaults_tester.py pygccxml_dev/unittests/test_all.py Added Paths: ----------- pygccxml_dev/unittests/find_container_traits_tester.py Modified: pygccxml_dev/pygccxml/declarations/__init__.py =================================================================== --- pygccxml_dev/pygccxml/declarations/__init__.py 2007-06-18 14:27:30 UTC (rev 1063) +++ pygccxml_dev/pygccxml/declarations/__init__.py 2007-06-19 09:35:45 UTC (rev 1064) @@ -181,6 +181,7 @@ from container_traits import hash_set_traits from container_traits import multiset_traits from container_traits import hash_multiset_traits +from container_traits import find_container_traits from function_traits import is_same_function Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-06-18 14:27:30 UTC (rev 1063) +++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-06-19 09:35:45 UTC (rev 1064) @@ -81,6 +81,8 @@ """creates class that describes C++ class declaration( and not definition )""" declaration.declaration_t.__init__( self, name ) self._aliases = [] + self._container_traits = None + self._container_traits_set = False def _get__cmp__items(self): """implementation details""" @@ -96,6 +98,15 @@ aliases = property( _get_aliases, _set_aliases , doc="List of L{aliases<typedef_t>} to this instance") + @property + def container_traits( self ): + """reference to L{container traits<container_traits.py>} or None""" + if self._container_traits_set == False: + import container_traits #prevent cyclic dependencies + self._container_traits_set = True + self._container_traits = container_traits.find_container_traits( self ) + return self._container_traits + class class_t( scopedef.scopedef_t ): """describes class definition""" @@ -113,6 +124,8 @@ self._private_members = [] self._protected_members = [] self._aliases = [] + self._container_traits = None + self._container_traits_set = False def _get_name_impl( self ): if not self._name: #class with empty name @@ -365,4 +378,13 @@ return answer + @property + def container_traits( self ): + """reference to L{container traits<container_traits.py>} or None""" + if self._container_traits_set == False: + import container_traits #prevent cyclic dependencies + self._container_traits_set = True + self._container_traits = container_traits.find_container_traits( self ) + return self._container_traits + class_types = ( class_t, class_declaration_t ) Modified: pygccxml_dev/pygccxml/declarations/container_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/container_traits.py 2007-06-18 14:27:30 UTC (rev 1063) +++ pygccxml_dev/pygccxml/declarations/container_traits.py 2007-06-19 09:35:45 UTC (rev 1064) @@ -373,7 +373,7 @@ return cls_traits else: for cls_traits in container_traits: - if cls_traits.is_my_case( cls ): + if cls_traits.is_my_case( cls_or_string ): return cls_traits Added: pygccxml_dev/unittests/find_container_traits_tester.py =================================================================== --- pygccxml_dev/unittests/find_container_traits_tester.py (rev 0) +++ pygccxml_dev/unittests/find_container_traits_tester.py 2007-06-19 09:35:45 UTC (rev 1064) @@ -0,0 +1,57 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import unittest +import autoconfig +import parser_test_case + +from pygccxml import utils +from pygccxml import parser +from pygccxml import declarations + +class tester_t( parser_test_case.parser_test_case_t ): + global_ns = None + def __init__(self, *args ): + parser_test_case.parser_test_case_t.__init__( self, *args ) + self.header = 'remove_template_defaults.hpp' + + def setUp(self): + if not tester_t.global_ns: + decls = parser.parse( [self.header], self.config ) + tester_t.global_ns = declarations.get_global_namespace( decls ) + tester_t.global_ns.init_optimizer() + + def __cmp_traits( self, typedef, expected ): + if isinstance( typedef, str ): + typedef = self.global_ns.typedef( typedef ) + self.failUnless( declarations.find_container_traits( typedef ) is expected ) + cls = declarations.remove_declarated( typedef ) + self.failUnless( cls.container_traits is expected ) + + def test_find_traits( self ): + self.__cmp_traits( 'v_int', declarations.vector_traits ) + self.__cmp_traits( 'l_int', declarations.list_traits ) + self.__cmp_traits( 'd_v_int', declarations.deque_traits ) + self.__cmp_traits( 'q_int', declarations.queue_traits ) + self.__cmp_traits( 'pq_int', declarations.priority_queue_traits) + self.__cmp_traits( 's_v_int', declarations.set_traits) + self.__cmp_traits( 'ms_v_int', declarations.multiset_traits) + self.__cmp_traits( 'm_i2d', declarations.map_traits ) + self.__cmp_traits( 'mm_i2d', declarations.multimap_traits ) + self.__cmp_traits( 'hs_v_int', declarations.hash_set_traits ) + self.__cmp_traits( 'mhs_v_int', declarations.hash_multiset_traits ) + self.__cmp_traits( 'hm_i2d', declarations.hash_map_traits ) + self.__cmp_traits( 'hmm_i2d', declarations.hash_multimap_traits ) + +def create_suite(): + suite = unittest.TestSuite() + suite.addTest( unittest.makeSuite(tester_t)) + return suite + +def run_suite(): + unittest.TextTestRunner(verbosity=2).run( create_suite() ) + +if __name__ == "__main__": + run_suite() Modified: pygccxml_dev/unittests/remove_template_defaults_tester.py =================================================================== --- pygccxml_dev/unittests/remove_template_defaults_tester.py 2007-06-18 14:27:30 UTC (rev 1063) +++ pygccxml_dev/unittests/remove_template_defaults_tester.py 2007-06-19 09:35:45 UTC (rev 1064) @@ -22,7 +22,7 @@ decls = parser.parse( [self.header], self.config ) tester_t.global_ns = declarations.get_global_namespace( decls ) tester_t.global_ns.init_optimizer() - + def test_vector( self ): v_int = self.global_ns.typedef( 'v_int' ) self.failUnless( 'vector< int >' Modified: pygccxml_dev/unittests/test_all.py =================================================================== --- pygccxml_dev/unittests/test_all.py 2007-06-18 14:27:30 UTC (rev 1063) +++ pygccxml_dev/unittests/test_all.py 2007-06-19 09:35:45 UTC (rev 1064) @@ -42,6 +42,7 @@ import dependencies_tester import free_operators_tester import remove_template_defaults_tester +import find_container_traits_tester def create_suite(): testers = [ @@ -83,6 +84,7 @@ , dependencies_tester , free_operators_tester , remove_template_defaults_tester + , find_container_traits_tester ] main_suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |