[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.
|