[pygccxml-commit] SF.net SVN: pygccxml: [30] pygccxml_dev/unittests
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-05-02 04:15:42
|
Revision: 30 Author: roman_yakovenko Date: 2006-05-01 21:15:28 -0700 (Mon, 01 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=30&view=rev Log Message: ----------- From now it is possible to configure "multi-select" queries to not raise exception, if query returns empty. just pass allow_empty=True as a parameter to the functions Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/namespace.py pygccxml_dev/pygccxml/declarations/scopedef.py pygccxml_dev/unittests/namespace_matcher_tester.py Modified: pygccxml_dev/pygccxml/declarations/namespace.py =================================================================== --- pygccxml_dev/pygccxml/declarations/namespace.py 2006-05-02 04:10:19 UTC (rev 29) +++ pygccxml_dev/pygccxml/declarations/namespace.py 2006-05-02 04:15:28 UTC (rev 30) @@ -63,11 +63,12 @@ , function=function , recursive=recursive ) - def namespaces( self, name=None, function=None, recursive=None ): + def namespaces( self, name=None, function=None, recursive=None, allow_empty=None ): return self._find_multiple( scopedef.scopedef_t._impl_matchers[ namespace_t.namespace ] , name=name , function=function - , recursive=recursive ) + , recursive=recursive + , allow_empty=allow_empty) def free_function( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( scopedef.scopedef_t._impl_matchers[ namespace_t.free_function ] @@ -80,7 +81,7 @@ , header_file=header_file , recursive=recursive ) - def free_functions( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): + def free_functions( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( scopedef.scopedef_t._impl_matchers[ namespace_t.free_function ] , name=name , function=function @@ -89,7 +90,8 @@ , arg_types=arg_types , header_dir=header_dir , header_file=header_file - , recursive=recursive) + , recursive=recursive + , allow_empty=allow_empty) def free_operator( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( scopedef.scopedef_t._impl_matchers[ namespace_t.free_operator ] @@ -103,7 +105,7 @@ , header_file=header_file , recursive=recursive ) - def free_operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): + def free_operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( scopedef.scopedef_t._impl_matchers[ namespace_t.free_operator ] , name=name , symbol=symbol @@ -113,4 +115,7 @@ , arg_types=arg_types , header_dir=header_dir , header_file=header_file - , recursive=recursive ) \ No newline at end of file + , recursive=recursive + , allow_empty=allow_empty) + + \ No newline at end of file Modified: pygccxml_dev/pygccxml/declarations/scopedef.py =================================================================== --- pygccxml_dev/pygccxml/declarations/scopedef.py 2006-05-02 04:10:19 UTC (rev 29) +++ pygccxml_dev/pygccxml/declarations/scopedef.py 2006-05-02 04:15:28 UTC (rev 30) @@ -194,7 +194,13 @@ return self.RECURSIVE_DEFAULT else: return keywds[ 'recursive' ] - + + def __findout_allow_empty( self, **keywds ): + if None is keywds[ 'allow_empty' ]: + return self.ALLOW_EMPTY_MDECL_WRAPPER + else: + return keywds[ 'allow_empty' ] + def __findout_decl_type( self, match_class, **keywds ): if keywds.has_key( 'decl_type' ): return keywds['decl_type'] @@ -202,7 +208,10 @@ matcher_args = keywds.copy() del matcher_args['function'] del matcher_args['recursive'] + if matcher_args.has_key('allow_empty'): + del matcher_args['allow_empty'] + matcher = match_class( **matcher_args ) if matcher.decl_type: return matcher.decl_type @@ -212,6 +221,8 @@ matcher_args = keywds.copy() del matcher_args['function'] del matcher_args['recursive'] + if matcher_args.has_key('allow_empty'): + del matcher_args['allow_empty'] matcher = match_class( **matcher_args ) if keywds['function']: @@ -234,11 +245,17 @@ if matcher.is_full_name(): name = matcher.decl_name_only if recursive: - utils.logger.info( 'query has been optimized on type and name' ) - return self._type2name2decls[decl_type][name] + utils.logger.info( 'query has been optimized on type and name' ) + if self._type2name2decls[decl_type].has_key( name ): + return self._type2name2decls[decl_type][name] + else: + return [] else: utils.logger.info( 'non recursive query has been optimized on type and name' ) - return self._type2name2decls_nr[decl_type][name] + if self._type2name2decls_nr[decl_type].has_key( name ): + return self._type2name2decls_nr[decl_type][name] + else: + return [] elif decl_type: if recursive: utils.logger.info( 'query has been optimized on type' ) @@ -273,13 +290,14 @@ matcher = self.__create_matcher( match_class, **norm_keywds ) dtype = self.__findout_decl_type( match_class, **norm_keywds ) recursive_ = self.__findout_recursive( **norm_keywds ) + allow_empty = self.__findout_allow_empty( **norm_keywds ) decls = self.__findout_range( norm_keywds['name'], dtype, recursive_ ) found = matcher_module.matcher.find( matcher, decls, False ) mfound = mdecl_wrapper.mdecl_wrapper_t( found ) utils.logger.info( '%d declaration(s) that match query' % len(mfound) ) utils.logger.info( 'find single query execution - done( %f seconds )' % ( time.clock() - start_time ) ) - if not mfound and not self.ALLOW_EMPTY_MDECL_WRAPPER: + if not mfound and not allow_empty: raise RuntimeError( "Multi declaration query returned 0 declarations." ) return mfound @@ -294,14 +312,15 @@ , header_file=header_file , recursive=recursive) - def decls( self, name=None, function=None, decl_type=None, header_dir=None, header_file=None, recursive=None ): + def decls( self, name=None, function=None, decl_type=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.decl ] , name=name , function=function , decl_type=decl_type , header_dir=header_dir , header_file=header_file - , recursive=recursive) + , recursive=recursive + , allow_empty=allow_empty) def class_( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( self._impl_matchers[ scopedef_t.class_ ] @@ -312,14 +331,15 @@ , header_file=header_file , recursive=recursive) - def classes( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ): + def classes( self, name=None, function=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.class_ ] , name=name , function=function , decl_type=self._impl_decl_types[ scopedef_t.class_ ] , header_dir=header_dir , header_file=header_file - , recursive=recursive) + , recursive=recursive + , allow_empty=allow_empty) def variable( self, name=None, function=None, type=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( self._impl_matchers[ scopedef_t.variable ] @@ -330,14 +350,15 @@ , header_file=header_file , recursive=recursive) - def variables( self, name=None, function=None, type=None, header_dir=None, header_file=None, recursive=None ): + def variables( self, name=None, function=None, type=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.variable ] , name=name , function=function , type=type , header_dir=header_dir , header_file=header_file - , recursive=recursive ) + , recursive=recursive + , allow_empty=allow_empty) def calldef( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( self._impl_matchers[ scopedef_t.calldef ] @@ -350,7 +371,7 @@ , header_file=header_file , recursive=recursive ) - def calldefs( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): + def calldefs( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.calldef ] , name=name , function=function @@ -359,7 +380,8 @@ , arg_types=arg_types , header_dir=header_dir , header_file=header_file - , recursive=recursive) + , recursive=recursive + , allow_empty=allow_empty) def operator( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, decl_type=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( self._impl_matchers[ scopedef_t.operator ] @@ -373,7 +395,7 @@ , header_file=header_file , recursive=recursive ) - def operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, decl_type=None, header_dir=None, header_file=None, recursive=None ): + def operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, decl_type=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.operator ] , name=name , symbol=symbol @@ -383,7 +405,8 @@ , arg_types=arg_types , header_dir=header_dir , header_file=header_file - , recursive=recursive ) + , recursive=recursive + , allow_empty=allow_empty) def member_function( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( self._impl_matchers[ scopedef_t.member_function ] @@ -396,7 +419,7 @@ , header_file=header_file , recursive=recursive ) - def member_functions( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): + def member_functions( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.member_function ] , name=name , function=function @@ -405,7 +428,8 @@ , arg_types=arg_types , header_dir=header_dir , header_file=header_file - , recursive=recursive) + , recursive=recursive + , allow_empty=allow_empty) def constructor( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( self._impl_matchers[ scopedef_t.constructor ] @@ -418,7 +442,7 @@ , header_file=header_file , recursive=recursive ) - def constructors( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): + def constructors( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.constructor ] , name=name , function=function @@ -427,7 +451,8 @@ , arg_types=arg_types , header_dir=header_dir , header_file=header_file - , recursive=recursive) + , recursive=recursive + , allow_empty=allow_empty) def member_operator( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( self._impl_matchers[ scopedef_t.member_operator ] @@ -441,7 +466,7 @@ , header_file=header_file , recursive=recursive ) - def member_operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): + def member_operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.member_operator ] , name=name , symbol=symbol @@ -451,7 +476,8 @@ , arg_types=arg_types , header_dir=header_dir , header_file=header_file - , recursive=recursive ) + , recursive=recursive + , allow_empty=allow_empty) def casting_operator( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( self._impl_matchers[ scopedef_t.casting_operator ] @@ -464,7 +490,7 @@ , header_file=header_file , recursive=recursive ) - def casting_operators( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): + def casting_operators( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.casting_operator ] , name=name , function=function @@ -473,7 +499,8 @@ , arg_types=arg_types , header_dir=header_dir , header_file=header_file - , recursive=recursive) + , recursive=recursive + , allow_empty=allow_empty) def enumeration( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ): return self._find_single( self._impl_matchers[ scopedef_t.enumeration ] @@ -486,13 +513,14 @@ #adding small aliase enum = enumeration - def enumerations( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ): + def enumerations( self, name=None, function=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ): return self._find_multiple( self._impl_matchers[ scopedef_t.enumeration ] , name=name , function=function , decl_type=self._impl_decl_types[ scopedef_t.enumeration ] , header_dir=header_dir , header_file=header_file - , recursive=recursive) + , recursive=recursive + , allow_empty=allow_empty) #adding small aliase enums = enumerations \ No newline at end of file Modified: pygccxml_dev/unittests/namespace_matcher_tester.py =================================================================== --- pygccxml_dev/unittests/namespace_matcher_tester.py 2006-05-02 04:10:19 UTC (rev 29) +++ pygccxml_dev/unittests/namespace_matcher_tester.py 2006-05-02 04:15:28 UTC (rev 30) @@ -25,8 +25,13 @@ def test( self ): criteria = declarations.namespace_matcher_t( name='bit_fields' ) x = declarations.matcher.get_single( criteria, self.declarations ) - self.failUnless( str(criteria) == '(decl type==namespace_t) and (name==bit_fields)' ) + self.failUnless( str(criteria) == '(decl type==namespace_t) and (name==bit_fields)' ) + def test_allow_empty( self ): + global_ns = declarations.get_global_namespace( self.declarations ) + global_ns.init_optimizer() + self.failUnless( 0 == len( global_ns.namespaces( 'does not exist', allow_empty=True ) ) ) + def create_suite(): suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |