[pygccxml-commit] SF.net SVN: pygccxml: [769] pygccxml_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-11-30 13:47:14
|
Revision: 769 http://svn.sourceforge.net/pygccxml/?rev=769&view=rev Author: roman_yakovenko Date: 2006-11-30 05:47:13 -0800 (Thu, 30 Nov 2006) Log Message: ----------- adding missing dependencies tester adding find_out_depend_on_declaration functionality Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/__init__.py pygccxml_dev/pygccxml/declarations/dependencies.py Added Paths: ----------- pygccxml_dev/unittests/dependencies_tester.py Property Changed: ---------------- pygccxml_dev/unittests/ Modified: pygccxml_dev/pygccxml/declarations/__init__.py =================================================================== --- pygccxml_dev/pygccxml/declarations/__init__.py 2006-11-30 11:22:15 UTC (rev 768) +++ pygccxml_dev/pygccxml/declarations/__init__.py 2006-11-30 13:47:13 UTC (rev 769) @@ -19,6 +19,8 @@ from class_declaration import hierarchy_info_t from class_declaration import class_declaration_t +class_types = ( class_t, class_declaration_t ) + from typedef import typedef_t from cpptypes import type_t Modified: pygccxml_dev/pygccxml/declarations/dependencies.py =================================================================== --- pygccxml_dev/pygccxml/declarations/dependencies.py 2006-11-30 11:22:15 UTC (rev 768) +++ pygccxml_dev/pygccxml/declarations/dependencies.py 2006-11-30 13:47:13 UTC (rev 769) @@ -4,11 +4,17 @@ # http://www.boost.org/LICENSE_1_0.txt) """ +this module contains class that keeps dependency information of some declaration """ +import cpptypes + class dependency_info_t( object ): def __init__( self, declaration, depend_on_it, access_type=None ): object.__init__( self ) + #prevent recursive import + import class_declaration + assert isinstance( depend_on_it, ( class_declaration.class_t, cpptypes.type_t ) ) self._declaration = declaration self._depend_on_it = depend_on_it self._access_type = access_type @@ -32,3 +38,17 @@ def __str__( self ): return 'declaration "%s" depends( %s ) on "%s" ' \ % ( self.declaration, self.access_type, self.depend_on_it ) + + def find_out_depend_on_declaration( self ): + """if declaration depends on other declaration and not on some type + this function will return reference to it. Otherwise None will be returned + """ + #prevent recursive import + from pygccxml import declarations + + if isinstance( self.depend_on_it, declarations.declaration_t ): + return self.depend_on_it + base_type = declarations.base_type( declarations.remove_alias( self.depend_on_it ) ) + if isinstance( base_type, cpptypes.declarated_t ): + return base_type.declaration + return None Property changes on: pygccxml_dev/unittests ___________________________________________________________________ Name: svn:ignore + *.pyc Added: pygccxml_dev/unittests/dependencies_tester.py =================================================================== --- pygccxml_dev/unittests/dependencies_tester.py (rev 0) +++ pygccxml_dev/unittests/dependencies_tester.py 2006-11-30 13:47:13 UTC (rev 769) @@ -0,0 +1,95 @@ +# 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 ): + def __init__(self, *args ): + parser_test_case.parser_test_case_t.__init__( self, *args ) + self.header = 'include_all.hpp' + self.global_ns = None + + def setUp(self): + if not self.global_ns: + decls = parser.parse( [self.header], self.config ) + self.global_ns = declarations.get_global_namespace( decls ) + self.global_ns.init_optimizer() + + def test_variable( self ): + ns_vars = self.global_ns.namespace( '::declarations::variables' ) + static_var = ns_vars.variable( 'static_var' ) + dependencies = static_var.i_depend_on_them() + self.failUnless( len(dependencies) == 1 ) + self.failUnless( dependencies[0].declaration is static_var ) + self.failUnless( dependencies[0].depend_on_it.decl_string == 'int' ) + + m_mutable = ns_vars.variable( 'm_mutable' ) + dependencies = m_mutable.i_depend_on_them() + self.failUnless( len(dependencies) == 1 ) + self.failUnless( dependencies[0].declaration is m_mutable ) + self.failUnless( dependencies[0].depend_on_it.decl_string == 'int' ) + + def test_class( self ): + ns_vars = self.global_ns.namespace( '::declarations::variables' ) + + cls = ns_vars.class_( 'struct_variables_t' ) + dependencies = cls.i_depend_on_them() + self.failUnless( len(dependencies) == 2 ) #compiler generated copy constructor + + m_mutable = ns_vars.variable( 'm_mutable' ) + dependencies = filter( lambda dependency: dependency.declaration is m_mutable + , dependencies ) + self.failUnless( len(dependencies) == 1 ) + self.failUnless( dependencies[0].depend_on_it.decl_string == 'int' ) + self.failUnless( dependencies[0].access_type == 'public' ) + + ns_dh = self.global_ns.namespace( '::core::diamand_hierarchy' ) + fd_cls = ns_dh.class_( 'final_derived_t' ) + derived1_cls = ns_dh.class_( 'derived1_t' ) + dependencies = fd_cls.i_depend_on_them() + dependencies = filter( lambda dependency: dependency.depend_on_it is derived1_cls + , dependencies ) + self.failUnless( len(dependencies) == 1 ) + self.failUnless( dependencies[0].depend_on_it is derived1_cls) + self.failUnless( dependencies[0].access_type == 'public' ) + + def test_calldefs( self ): + ns = self.global_ns.namespace( '::declarations::calldef' ) + return_default_args = ns.calldef( 'return_default_args' ) + dependencies = return_default_args.i_depend_on_them() + self.failUnless( len(dependencies) == 3 ) + used_types = map( lambda dependency: dependency.depend_on_it.decl_string + , dependencies ) + + self.failUnless( used_types == [ 'int', 'bool', 'int' ] ) + + some_exception = ns.class_( 'some_exception_t' ) + other_exception = ns.class_( 'other_exception_t' ) + calldef_with_throw = ns.calldef( 'calldef_with_throw' ) + dependencies = calldef_with_throw.i_depend_on_them() + self.failUnless( len(dependencies) == 3 ) + dependencies = filter( lambda dependency: dependency.depend_on_it in ( some_exception, other_exception ) + , dependencies ) + self.failUnless( len(dependencies) == 2 ) + + def test_coverage( self ): + self.global_ns.i_depend_on_them() + +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() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |