From c0205c088c058b790af3e333a5a1c4d0b76896ca Mon Sep 17 00:00:00 2001 From: Oliver Bolte Date: Fri, 4 Jun 2004 02:14:54 +0000 Subject: INTEGRATION: CWS sb18 (1.2.4); FILE MERGED 2004/06/01 13:27:32 sb 1.2.4.3: #i21150# Work around MS compiler bug that default-initialized primitive class members are left uninitialized. 2004/04/28 09:00:34 sb 1.2.4.2: #i21150# Added struct alignment tests. 2004/04/22 08:28:18 sb 1.2.4.1: #i21150# Added support for polymorphic struct types. --- .../test/cppumaker/test_codemaker_cppumaker.cxx | 87 +++++++++++++++++++++- 1 file changed, 84 insertions(+), 3 deletions(-) (limited to 'codemaker/test') diff --git a/codemaker/test/cppumaker/test_codemaker_cppumaker.cxx b/codemaker/test/cppumaker/test_codemaker_cppumaker.cxx index 497fa182e10d..4a644df88be0 100644 --- a/codemaker/test/cppumaker/test_codemaker_cppumaker.cxx +++ b/codemaker/test/cppumaker/test_codemaker_cppumaker.cxx @@ -2,9 +2,9 @@ * * $RCSfile: test_codemaker_cppumaker.cxx,v $ * - * $Revision: 1.2 $ + * $Revision: 1.3 $ * - * last change: $Author: rt $ $Date: 2004-03-30 16:54:02 $ + * last change: $Author: obo $ $Date: 2004-06-04 03:14:54 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -224,5 +224,86 @@ #include "test/codemaker/cppumaker/std.hpp" #include "test/codemaker/cppumaker/NDEBUG.hpp" #include "test/codemaker/cppumaker/get.hpp" +#include "test/codemaker/cppumaker/HelperEnum.hpp" +#include "test/codemaker/cppumaker/HelperStruct.hpp" +#include "test/codemaker/cppumaker/BigStruct.hpp" +#include "test/codemaker/cppumaker/Struct.hpp" +#include "test/codemaker/cppumaker/StructUsage.hpp" +#include "test/codemaker/cppumaker/AlignmentDerivedStruct.hpp" -//TODO +#include "boost/scoped_array.hpp" +#include "com/sun/star/uno/Any.hxx" +#include "com/sun/star/uno/Type.hxx" +#include "com/sun/star/uno/TypeClass.hpp" +#include "cppunit/simpleheader.hxx" + +#include + +namespace { + +class Test: public CppUnit::TestFixture { +public: + void testBigStruct(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testBigStruct); + CPPUNIT_TEST_SUITE_END(); +}; + +struct Guard { + explicit Guard(void * buffer): + p(new(buffer) test::codemaker::cppumaker::BigStruct) {} + + ~Guard() { p->test::codemaker::cppumaker::BigStruct::~BigStruct(); } + + test::codemaker::cppumaker::BigStruct * const p; +}; + +void Test::testBigStruct() { + // Default-initialize a BigStruct instance on top of a memory buffer filled + // with random data, and make sure that all members are default-initialized: + boost::scoped_array< char > buffer( + new char[sizeof (test::codemaker::cppumaker::BigStruct)]); + for (std::size_t i = 0; i < sizeof (test::codemaker::cppumaker::BigStruct); + ++i) + { + buffer[i] = '\x56'; + } + Guard guard(buffer.get()); + CPPUNIT_ASSERT_EQUAL(guard.p->m1, sal_False); + CPPUNIT_ASSERT_EQUAL(guard.p->m2, static_cast< sal_Int8 >(0)); + CPPUNIT_ASSERT_EQUAL(guard.p->m3, static_cast< sal_Int16 >(0)); + CPPUNIT_ASSERT_EQUAL(guard.p->m4, static_cast< sal_uInt16 >(0)); + CPPUNIT_ASSERT_EQUAL(guard.p->m5, static_cast< sal_Int32 >(0)); + CPPUNIT_ASSERT_EQUAL(guard.p->m6, static_cast< sal_uInt32 >(0)); + CPPUNIT_ASSERT_EQUAL(guard.p->m7, static_cast< sal_Int64 >(0)); + CPPUNIT_ASSERT_EQUAL(guard.p->m8, static_cast< sal_uInt64 >(0)); + CPPUNIT_ASSERT_EQUAL(guard.p->m9, 0.0f); + CPPUNIT_ASSERT_EQUAL(guard.p->m10, 0.0); + CPPUNIT_ASSERT_EQUAL(guard.p->m11, static_cast< sal_Unicode >(0)); + CPPUNIT_ASSERT_EQUAL(guard.p->m12.getLength(), static_cast< sal_Int32 >(0)); + CPPUNIT_ASSERT_EQUAL( + guard.p->m13.getTypeClass(), com::sun::star::uno::TypeClass_VOID); + CPPUNIT_ASSERT_EQUAL(guard.p->m14.hasValue(), sal_False); + CPPUNIT_ASSERT_EQUAL(guard.p->m15.getLength(), static_cast< sal_Int32 >(0)); + CPPUNIT_ASSERT_EQUAL( + guard.p->m16, test::codemaker::cppumaker::HelperEnum_ZERO); + CPPUNIT_ASSERT_EQUAL(guard.p->m17.m1, sal_False); + CPPUNIT_ASSERT_EQUAL(guard.p->m17.m2.is(), sal_False); + CPPUNIT_ASSERT_EQUAL(guard.p->m18.is(), sal_False); + CPPUNIT_ASSERT_EQUAL(guard.p->m19, static_cast< sal_Int8 >(0)); + CPPUNIT_ASSERT_EQUAL( + guard.p->m20, test::codemaker::cppumaker::HelperEnum_ZERO); + +#if defined __GNUC__ && __GNUC__ >= 3 + CPPUNIT_ASSERT_EQUAL( + static_cast< std::size_t >(16), + sizeof (test::codemaker::cppumaker::AlignmentDerivedStruct)); +#endif +} + +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Test, "alltests"); + +} + +NOADDITIONAL; -- cgit