[pygccxml-commit] SF.net SVN: pygccxml:[1837] pyplusplus_dev/unittests
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2010-04-15 06:11:20
|
Revision: 1837 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1837&view=rev Author: roman_yakovenko Date: 2010-04-15 06:11:14 +0000 (Thu, 15 Apr 2010) Log Message: ----------- misc: testing a work around for an auto_ptr in constructor Modified Paths: -------------- pyplusplus_dev/unittests/data/smart_pointers_to_be_exported.cpp pyplusplus_dev/unittests/data/smart_pointers_to_be_exported.hpp pyplusplus_dev/unittests/fundamental_tester_base.py pyplusplus_dev/unittests/smart_pointers_tester.py Modified: pyplusplus_dev/unittests/data/smart_pointers_to_be_exported.cpp =================================================================== --- pyplusplus_dev/unittests/data/smart_pointers_to_be_exported.cpp 2010-04-14 08:48:52 UTC (rev 1836) +++ pyplusplus_dev/unittests/data/smart_pointers_to_be_exported.cpp 2010-04-15 06:11:14 UTC (rev 1837) @@ -6,7 +6,7 @@ #include "smart_pointers_to_be_exported.hpp" namespace smart_pointers{ - + data_a_ptr create_auto(){ return data_a_ptr( new data() ); } data_s_ptr create_shared(){ return data_s_ptr( new data() ); } @@ -27,7 +27,7 @@ int const_ref_auto_base_value( const base_a_ptr& a ){ return a->get_base_value(); } int const_ref_shared_base_value( const base_s_ptr& a ){ return a->get_base_value(); } - + int ref_auto_some_value( base_a_ptr& a ){ return a->get_some_value(); } @@ -38,7 +38,11 @@ int const_ref_auto_some_value( const base_a_ptr& a ){ return a->get_some_value(); } int const_ref_shared_some_value( const base_s_ptr& a ){ return a->get_some_value(); } - - -} +namespace autoptr_init_bug{ +std::auto_ptr< B > createB(int value, std::auto_ptr<A> a){ + return std::auto_ptr< B >( new B( value, a ) ); +} +} + +} Modified: pyplusplus_dev/unittests/data/smart_pointers_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/smart_pointers_to_be_exported.hpp 2010-04-14 08:48:52 UTC (rev 1836) +++ pyplusplus_dev/unittests/data/smart_pointers_to_be_exported.hpp 2010-04-15 06:11:14 UTC (rev 1837) @@ -29,7 +29,7 @@ typedef std::auto_ptr< data > data_a_ptr; typedef boost::shared_ptr< data > data_s_ptr; - + data_a_ptr create_auto(); data_s_ptr create_shared(); @@ -61,7 +61,7 @@ int const_ref_shared_some_value( const base_s_ptr& a ); struct shared_data_buffer_t{ - shared_data_buffer_t() + shared_data_buffer_t() : size( 0 ) {} int size; @@ -73,11 +73,33 @@ : buffer( new shared_data_buffer_t() ) , const_buffer( new shared_data_buffer_t() ) {} - + holder_impl_t buffer; const holder_impl_t const_buffer; }; -} +namespace autoptr_init_bug{ +struct A{ + A(int value) : m_value(value) {} + int m_value; +}; + +struct B{ + B(int value, std::auto_ptr<A> a) : m_value(value), m_a(a.release() ) {} + + int m_value; + + int get_a_value(){ return m_a->m_value; } + +private: + std::auto_ptr<A> m_a; +}; + +std::auto_ptr< B > createB(int value, std::auto_ptr<A> a); + +} + +} + #endif//__smart_pointers_to_be_exported_hpp__ Modified: pyplusplus_dev/unittests/fundamental_tester_base.py =================================================================== --- pyplusplus_dev/unittests/fundamental_tester_base.py 2010-04-14 08:48:52 UTC (rev 1836) +++ pyplusplus_dev/unittests/fundamental_tester_base.py 2010-04-15 06:11:14 UTC (rev 1837) @@ -97,6 +97,9 @@ def _create_extension_source_file(self): global LICENSE + if os.path.exists( self.__generated_source_file_name + '.xml' ): + os.remove( self.__generated_source_file_name + '.xml' ) + test_header_cfg \ = pygccxml.parser.create_cached_source_fc( self.__to_be_exported_header , self.__generated_source_file_name + '.xml' ) Modified: pyplusplus_dev/unittests/smart_pointers_tester.py =================================================================== --- pyplusplus_dev/unittests/smart_pointers_tester.py 2010-04-14 08:48:52 UTC (rev 1836) +++ pyplusplus_dev/unittests/smart_pointers_tester.py 2010-04-15 06:11:14 UTC (rev 1837) @@ -12,41 +12,49 @@ class tester_t(fundamental_tester_base.fundamental_tester_base_t): EXTENSION_NAME = 'smart_pointers' - + def __init__( self, *args ): - fundamental_tester_base.fundamental_tester_base_t.__init__( + fundamental_tester_base.fundamental_tester_base_t.__init__( self , tester_t.EXTENSION_NAME , *args ) - + def customize( self, mb ): base = mb.class_( 'base' ) shared_ptrs = mb.decls( lambda decl: decl.name.startswith( 'shared_ptr<' ) ) shared_ptrs.disable_warnings( messages.W1040 ) mb.variable( 'buffer' ).apply_smart_ptr_wa = True mb.variable( 'const_buffer' ).apply_smart_ptr_wa = True - + + + A = mb.class_('A' ) + A.held_type = 'std::auto_ptr< %s >' % A.decl_string + B = mb.class_( 'B' ) + B.constructors().exclude() + B.add_fake_constructors( mb.free_function( 'createB' ) ) + + def create_py_derived( self, module ): class py_derived_t( module.base ): def __init__( self ): module.base.__init__( self ) - + def get_some_value( self ): return 28 - + return py_derived_t() - + def run_tests( self, module): da = module.create_auto() py_derived = self.create_py_derived( module ) - + self.failUnless( 11 == da.value ) ds = module.create_shared() self.failUnless( 11 == ds.value ) - + self.failUnless( 11 == module.ref_auto(da) ) self.failUnless( 11 == module.ref_shared(ds) ) - + #why? because in this case held type could not be set #self.failUnless( 11 == module.ref_shared(py_derived) ) @@ -57,7 +65,7 @@ self.failUnless( 11 == module.const_ref_auto(da) ) self.failUnless( 11 == module.const_ref_shared(ds) ) - + #TODO: find out why this fails #self.failUnless( 19 == module.ref_auto_base_value(da) ) #self.failUnless( 19 == module.ref_shared_base_value(ds) ) @@ -73,9 +81,9 @@ self.failUnless( 19 == module.val_auto_base_value(da) ) self.failUnless( 19 == module.val_shared_base_value(ds) ) self.failUnless( 19 == module.val_shared_base_value(py_derived) ) - + da = module.create_auto() - + self.failUnless( 23 == module.val_auto_some_value(da) ) self.failUnless( 28 == module.val_shared_some_value(py_derived) ) @@ -86,17 +94,22 @@ holder1 = module.shared_data_buffer_holder_t() self.failUnless( holder1.buffer.size == 0 ) - + holder2 = module.shared_data_buffer_holder_t() holder2.buffer.size = 2 - + holder1.buffer = holder2.buffer self.failUnless( holder1.buffer.size == 2 ) holder1.buffer.size = 3 self.failUnless( holder2.buffer.size == 3 ) + a = module.A( 23 ) + b = module.B( 21, a ) + + self.failUnless( b.get_a_value() == 23 ) + def create_suite(): - suite = unittest.TestSuite() + suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) return suite This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |