xref: /AOO41X/main/testtools/source/bridgetest/cppobj.cxx (revision cbe4a5e32dd06077057875dd5ecd4d8f1991662a)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_testtools.hxx"
26 #include <stdio.h>
27 
28 #include "cppu/unotype.hxx"
29 #include <osl/diagnose.h>
30 #include "osl/diagnose.hxx"
31 #include <osl/thread.h>
32 #include <osl/mutex.hxx>
33 #include <osl/time.h>
34 
35 #include <cppuhelper/implbase3.hxx>
36 #include <cppuhelper/factory.hxx>
37 #include "cppuhelper/exc_hlp.hxx"
38 #include "cppuhelper/compbase_ex.hxx"
39 #include <com/sun/star/lang/XServiceInfo.hpp>
40 #include <com/sun/star/lang/XComponent.hpp>
41 #include "com/sun/star/uno/Any.hxx"
42 #include "com/sun/star/uno/RuntimeException.hpp"
43 #include "com/sun/star/uno/Sequence.hxx"
44 
45 #include "test/testtools/bridgetest/Constructors.hpp"
46 #include "test/testtools/bridgetest/Constructors2.hpp"
47 #include "test/testtools/bridgetest/TestPolyStruct.hpp"
48 #include "test/testtools/bridgetest/TestPolyStruct2.hpp"
49 #include "test/testtools/bridgetest/XBridgeTest2.hpp"
50 #include "test/testtools/bridgetest/XMulti.hpp"
51 
52 #include "currentcontextchecker.hxx"
53 #include "multi.hxx"
54 
55 using namespace rtl;
56 using namespace osl;
57 using namespace cppu;
58 using namespace com::sun::star::uno;
59 using namespace com::sun::star::lang;
60 using namespace com::sun::star::registry;
61 using namespace test::testtools::bridgetest;
62 
63 #define SERVICENAME     "com.sun.star.test.bridge.CppTestObject"
64 #define IMPLNAME        "com.sun.star.comp.bridge.CppTestObject"
65 
66 namespace bridge_object
67 {
68 
69 //--------------------------------------------------------------------------------------------------
getSupportedServiceNames()70 inline static Sequence< OUString > getSupportedServiceNames()
71 {
72     OUString aName( RTL_CONSTASCII_USTRINGPARAM(SERVICENAME) );
73     return Sequence< OUString >( &aName, 1 );
74 }
75 
76 //==================================================================================================
assign(TestElement & rData,sal_Bool bBool,sal_Unicode cChar,sal_Int8 nByte,sal_Int16 nShort,sal_uInt16 nUShort,sal_Int32 nLong,sal_uInt32 nULong,sal_Int64 nHyper,sal_uInt64 nUHyper,float fFloat,double fDouble,TestEnum eEnum,const::rtl::OUString & rStr,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,const::com::sun::star::uno::Any & rAny)77 static void assign( TestElement & rData,
78                     sal_Bool bBool, sal_Unicode cChar, sal_Int8 nByte,
79                     sal_Int16 nShort, sal_uInt16 nUShort,
80                     sal_Int32 nLong, sal_uInt32 nULong,
81                     sal_Int64 nHyper, sal_uInt64 nUHyper,
82                     float fFloat, double fDouble,
83                     TestEnum eEnum, const ::rtl::OUString& rStr,
84                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
85                     const ::com::sun::star::uno::Any& rAny )
86 {
87     rData.Bool = bBool;
88     rData.Char = cChar;
89     rData.Byte = nByte;
90     rData.Short = nShort;
91     rData.UShort = nUShort;
92     rData.Long = nLong;
93     rData.ULong = nULong;
94     rData.Hyper = nHyper;
95     rData.UHyper = nUHyper;
96     rData.Float = fFloat;
97     rData.Double = fDouble;
98     rData.Enum = eEnum;
99     rData.String = rStr;
100     rData.Interface = xTest;
101     rData.Any = rAny;
102 }
103 //==================================================================================================
assign(TestData & rData,sal_Bool bBool,sal_Unicode cChar,sal_Int8 nByte,sal_Int16 nShort,sal_uInt16 nUShort,sal_Int32 nLong,sal_uInt32 nULong,sal_Int64 nHyper,sal_uInt64 nUHyper,float fFloat,double fDouble,TestEnum eEnum,const::rtl::OUString & rStr,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,const::com::sun::star::uno::Any & rAny,const com::sun::star::uno::Sequence<TestElement> & rSequence)104 static void assign( TestData & rData,
105                     sal_Bool bBool, sal_Unicode cChar, sal_Int8 nByte,
106                     sal_Int16 nShort, sal_uInt16 nUShort,
107                     sal_Int32 nLong, sal_uInt32 nULong,
108                     sal_Int64 nHyper, sal_uInt64 nUHyper,
109                     float fFloat, double fDouble,
110                     TestEnum eEnum, const ::rtl::OUString& rStr,
111                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
112                     const ::com::sun::star::uno::Any& rAny,
113                     const com::sun::star::uno::Sequence< TestElement >& rSequence )
114 {
115     assign( (TestElement &)rData,
116             bBool, cChar, nByte, nShort, nUShort, nLong, nULong, nHyper, nUHyper, fFloat, fDouble,
117             eEnum, rStr, xTest, rAny );
118     rData.Sequence = rSequence;
119 }
120 
121 //==================================================================================================
122 class Test_Impl :
123     public osl::DebugBase<Test_Impl>,
124     public WeakImplHelper3< XBridgeTest2, XServiceInfo , XRecursiveCall >
125 {
126     TestData _aData, _aStructData;
127     sal_Int32 m_nLastCallId;
128     sal_Bool m_bFirstCall;
129     sal_Bool m_bSequenceOfCallTestPassed;
130     Mutex m_mutex;
131 
132     Sequence<sal_Bool> _arBool;
133     Sequence<sal_Unicode> _arChar;
134     Sequence<sal_Int8> _arByte;
135     Sequence<sal_Int16> _arShort;
136     Sequence<sal_uInt16> _arUShort;
137     Sequence<sal_Int32> _arLong;
138     Sequence<sal_uInt32> _arULong;
139     Sequence<sal_Int64> _arHyper;
140     Sequence<sal_uInt64> _arUHyper;
141     Sequence<OUString> _arString;
142     Sequence<float> _arFloat;
143     Sequence<double> _arDouble;
144     Sequence<TestEnum> _arEnum;
145     Sequence<Reference<XInterface> > _arObject;
146     Sequence<Sequence<sal_Int32> > _arLong2;
147     Sequence<Sequence<Sequence<sal_Int32> > > _arLong3;
148     Sequence<Any> _arAny;
149     Sequence<TestElement> _arStruct;
150 
151 public:
Test_Impl()152     Test_Impl() : m_nLastCallId( 0 ),
153                   m_bFirstCall( sal_True ),
154                   m_bSequenceOfCallTestPassed( sal_True )
155         {}
~Test_Impl()156     virtual ~Test_Impl()
157         {
158             OSL_TRACE( "> scalar Test_Impl dtor <" );
159         }
160 
acquire()161     void SAL_CALL acquire() throw ()
162     {
163         OWeakObject::acquire();
164     }
release()165     void SAL_CALL release() throw ()
166     {
167         OWeakObject::release();
168     }
169 
170     // XServiceInfo
171     virtual OUString SAL_CALL getImplementationName() throw (RuntimeException);
172     virtual sal_Bool SAL_CALL supportsService( const OUString & rServiceName ) throw (RuntimeException);
173     virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw (RuntimeException);
174 
175     // XLBTestBase
176     virtual void SAL_CALL setValues( sal_Bool bBool, sal_Unicode cChar, sal_Int8 nByte,
177                                      sal_Int16 nShort, sal_uInt16 nUShort,
178                                      sal_Int32 nLong, sal_uInt32 nULong,
179                                      sal_Int64 nHyper, sal_uInt64 nUHyper,
180                                      float fFloat, double fDouble,
181                                      TestEnum eEnum, const ::rtl::OUString& rStr,
182                                      const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
183                                      const ::com::sun::star::uno::Any& rAny,
184                                      const ::com::sun::star::uno::Sequence<TestElement >& rSequence,
185                                      const TestData& rStruct )
186         throw(com::sun::star::uno::RuntimeException);
187 
188     virtual TestData SAL_CALL setValues2( sal_Bool& bBool, sal_Unicode& cChar, sal_Int8& nByte,
189                                                 sal_Int16& nShort, sal_uInt16& nUShort,
190                                                 sal_Int32& nLong, sal_uInt32& nULong,
191                                                 sal_Int64& nHyper, sal_uInt64& nUHyper,
192                                                 float& fFloat, double& fDouble,
193                                                 TestEnum& eEnum, rtl::OUString& rStr,
194                                                 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
195                                                 ::com::sun::star::uno::Any& rAny,
196                                                 ::com::sun::star::uno::Sequence<TestElement >& rSequence,
197                                                 TestData& rStruct )
198         throw(com::sun::star::uno::RuntimeException);
199 
200     virtual TestData SAL_CALL getValues( sal_Bool& bBool, sal_Unicode& cChar, sal_Int8& nByte,
201                                                sal_Int16& nShort, sal_uInt16& nUShort,
202                                                sal_Int32& nLong, sal_uInt32& nULong,
203                                                sal_Int64& nHyper, sal_uInt64& nUHyper,
204                                                float& fFloat, double& fDouble,
205                                                TestEnum& eEnum, rtl::OUString& rStr,
206                                                ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
207                                                ::com::sun::star::uno::Any& rAny,
208                                                ::com::sun::star::uno::Sequence< TestElement >& rSequence,
209                                                TestData& rStruct )
210         throw(com::sun::star::uno::RuntimeException);
211 
echoSmallStruct(const SmallStruct & rStruct)212     virtual SmallStruct SAL_CALL echoSmallStruct(const SmallStruct& rStruct) throw(com::sun::star::uno::RuntimeException)
213         { return rStruct; }
echoMediumStruct(const MediumStruct & rStruct)214     virtual MediumStruct SAL_CALL echoMediumStruct(const MediumStruct& rStruct) throw(com::sun::star::uno::RuntimeException)
215         { return rStruct; }
echoBigStruct(const BigStruct & rStruct)216     virtual BigStruct SAL_CALL echoBigStruct(const BigStruct& rStruct) throw(com::sun::star::uno::RuntimeException)
217         { return rStruct; }
echoAllFloats(const AllFloats & rStruct)218     virtual AllFloats SAL_CALL echoAllFloats(const AllFloats& rStruct) throw(com::sun::star::uno::RuntimeException)
219         { return rStruct; }
testPPCAlignment(sal_Int64,sal_Int64,sal_Int32,sal_Int64,sal_Int32 i2)220     virtual sal_Int32 SAL_CALL testPPCAlignment( sal_Int64, sal_Int64, sal_Int32, sal_Int64, sal_Int32 i2 ) throw(com::sun::star::uno::RuntimeException)
221         { return i2; }
222 
getBool()223     virtual sal_Bool SAL_CALL getBool() throw(com::sun::star::uno::RuntimeException)
224         { return _aData.Bool; }
getByte()225     virtual sal_Int8 SAL_CALL getByte() throw(com::sun::star::uno::RuntimeException)
226         { return _aData.Byte; }
getChar()227     virtual sal_Unicode SAL_CALL getChar() throw(com::sun::star::uno::RuntimeException)
228         { return _aData.Char; }
getShort()229     virtual sal_Int16 SAL_CALL getShort() throw(com::sun::star::uno::RuntimeException)
230         { return _aData.Short; }
getUShort()231     virtual sal_uInt16 SAL_CALL getUShort() throw(com::sun::star::uno::RuntimeException)
232         { return _aData.UShort; }
getLong()233     virtual sal_Int32 SAL_CALL getLong() throw(com::sun::star::uno::RuntimeException)
234         { return _aData.Long; }
getULong()235     virtual sal_uInt32 SAL_CALL getULong() throw(com::sun::star::uno::RuntimeException)
236         { return _aData.ULong; }
getHyper()237     virtual sal_Int64 SAL_CALL getHyper() throw(com::sun::star::uno::RuntimeException)
238         { return _aData.Hyper; }
getUHyper()239     virtual sal_uInt64 SAL_CALL getUHyper() throw(com::sun::star::uno::RuntimeException)
240         { return _aData.UHyper; }
getFloat()241     virtual float SAL_CALL getFloat() throw(com::sun::star::uno::RuntimeException)
242         { return _aData.Float; }
getDouble()243     virtual double SAL_CALL getDouble() throw(com::sun::star::uno::RuntimeException)
244         { return _aData.Double; }
getEnum()245     virtual TestEnum SAL_CALL getEnum() throw(com::sun::star::uno::RuntimeException)
246         { return _aData.Enum; }
getString()247     virtual rtl::OUString SAL_CALL getString() throw(com::sun::star::uno::RuntimeException)
248         { return _aData.String; }
getInterface()249     virtual com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getInterface(  ) throw(com::sun::star::uno::RuntimeException)
250         { return _aData.Interface; }
getAny()251     virtual com::sun::star::uno::Any SAL_CALL getAny() throw(com::sun::star::uno::RuntimeException)
252         { return _aData.Any; }
getSequence()253     virtual com::sun::star::uno::Sequence< TestElement > SAL_CALL getSequence() throw(com::sun::star::uno::RuntimeException)
254         { return _aData.Sequence; }
getStruct()255     virtual TestData SAL_CALL getStruct() throw(com::sun::star::uno::RuntimeException)
256         { return _aStructData; }
257 
setBool(sal_Bool _bool)258     virtual void SAL_CALL setBool( sal_Bool _bool ) throw(::com::sun::star::uno::RuntimeException)
259         { _aData.Bool = _bool; }
setByte(sal_Int8 _byte)260     virtual void SAL_CALL setByte( sal_Int8 _byte ) throw(::com::sun::star::uno::RuntimeException)
261         { _aData.Byte = _byte; }
setChar(sal_Unicode _char)262     virtual void SAL_CALL setChar( sal_Unicode _char ) throw(::com::sun::star::uno::RuntimeException)
263         { _aData.Char = _char; }
setShort(sal_Int16 _short)264     virtual void SAL_CALL setShort( sal_Int16 _short ) throw(::com::sun::star::uno::RuntimeException)
265         { _aData.Short = _short; }
setUShort(sal_uInt16 _ushort)266     virtual void SAL_CALL setUShort( sal_uInt16 _ushort ) throw(::com::sun::star::uno::RuntimeException)
267         { _aData.UShort = _ushort; }
setLong(sal_Int32 _long)268     virtual void SAL_CALL setLong( sal_Int32 _long ) throw(::com::sun::star::uno::RuntimeException)
269         { _aData.Long = _long; }
setULong(sal_uInt32 _ulong)270     virtual void SAL_CALL setULong( sal_uInt32 _ulong ) throw(::com::sun::star::uno::RuntimeException)
271         { _aData.ULong = _ulong; }
setHyper(sal_Int64 _hyper)272     virtual void SAL_CALL setHyper( sal_Int64 _hyper ) throw(::com::sun::star::uno::RuntimeException)
273         { _aData.Hyper = _hyper; }
setUHyper(sal_uInt64 _uhyper)274     virtual void SAL_CALL setUHyper( sal_uInt64 _uhyper ) throw(::com::sun::star::uno::RuntimeException)
275         { _aData.UHyper = _uhyper; }
setFloat(float _float)276     virtual void SAL_CALL setFloat( float _float ) throw(::com::sun::star::uno::RuntimeException)
277         { _aData.Float = _float; }
setDouble(double _double)278     virtual void SAL_CALL setDouble( double _double ) throw(::com::sun::star::uno::RuntimeException)
279         { _aData.Double = _double; }
setEnum(TestEnum _enum)280     virtual void SAL_CALL setEnum( TestEnum _enum ) throw(::com::sun::star::uno::RuntimeException)
281         { _aData.Enum = _enum; }
setString(const::rtl::OUString & _string)282     virtual void SAL_CALL setString( const ::rtl::OUString& _string ) throw(::com::sun::star::uno::RuntimeException)
283         { _aData.String = _string; }
setInterface(const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & _interface)284     virtual void SAL_CALL setInterface( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _interface ) throw(::com::sun::star::uno::RuntimeException)
285         { _aData.Interface = _interface; }
setAny(const::com::sun::star::uno::Any & _any)286     virtual void SAL_CALL setAny( const ::com::sun::star::uno::Any& _any ) throw(::com::sun::star::uno::RuntimeException)
287         { _aData.Any = _any; }
setSequence(const::com::sun::star::uno::Sequence<TestElement> & _sequence)288     virtual void SAL_CALL setSequence( const ::com::sun::star::uno::Sequence<TestElement >& _sequence ) throw(::com::sun::star::uno::RuntimeException)
289         { _aData.Sequence = _sequence; }
setStruct(const TestData & _struct)290     virtual void SAL_CALL setStruct( const TestData& _struct ) throw(::com::sun::star::uno::RuntimeException)
291         { _aStructData = _struct; }
292 
getRaiseAttr1()293     virtual sal_Int32 SAL_CALL getRaiseAttr1() throw (RuntimeException)
294     { throw RuntimeException(); }
295 
setRaiseAttr1(sal_Int32)296     virtual void SAL_CALL setRaiseAttr1(sal_Int32)
297         throw (IllegalArgumentException, RuntimeException)
298     { throw IllegalArgumentException(); }
299 
getRaiseAttr2()300     virtual sal_Int32 SAL_CALL getRaiseAttr2()
301         throw (IllegalArgumentException, RuntimeException)
302     { throw IllegalArgumentException(); }
303 
transportPolyBoolean(TestPolyStruct<sal_Bool> const & arg)304     virtual TestPolyStruct< sal_Bool > SAL_CALL transportPolyBoolean(
305         TestPolyStruct< sal_Bool > const & arg) throw (RuntimeException)
306     { return arg; }
307 
transportPolyHyper(TestPolyStruct<sal_Int64> &)308     virtual void SAL_CALL transportPolyHyper(TestPolyStruct< sal_Int64 > &)
309         throw (RuntimeException) {}
310 
transportPolySequence(TestPolyStruct<Sequence<Any>> const & arg1,TestPolyStruct<Sequence<Any>> & arg2)311     virtual void SAL_CALL transportPolySequence(
312         TestPolyStruct< Sequence< Any > > const & arg1,
313         TestPolyStruct< Sequence< Any > > & arg2) throw (RuntimeException)
314     { arg2 = arg1; }
315 
getNullPolyLong()316     virtual TestPolyStruct< sal_Int32 > SAL_CALL getNullPolyLong()
317         throw (RuntimeException)
318     { return TestPolyStruct< sal_Int32 >(0); /* work around MS compiler bug */ }
319 
getNullPolyString()320     virtual TestPolyStruct< rtl::OUString > SAL_CALL getNullPolyString()
321         throw (RuntimeException)
322     { return TestPolyStruct< rtl::OUString >(); }
323 
getNullPolyType()324     virtual TestPolyStruct< Type > SAL_CALL getNullPolyType()
325         throw (RuntimeException)
326     { return TestPolyStruct< Type >(); }
327 
getNullPolyAny()328     virtual TestPolyStruct< Any > SAL_CALL getNullPolyAny()
329         throw (RuntimeException)
330     { return TestPolyStruct< Any >(); }
331 
332     virtual TestPolyStruct< Sequence< sal_Bool > > SAL_CALL
getNullPolySequence()333     getNullPolySequence() throw (RuntimeException)
334     { return TestPolyStruct< Sequence< sal_Bool > >(); }
335 
getNullPolyEnum()336     virtual TestPolyStruct< TestEnum > SAL_CALL getNullPolyEnum()
337         throw (RuntimeException)
338     { return TestPolyStruct< TestEnum >(
339         test::testtools::bridgetest::TestEnum_TEST);
340           /* work around MS compiler bug */ }
341 
getNullPolyBadEnum()342     virtual TestPolyStruct< TestBadEnum > SAL_CALL getNullPolyBadEnum()
343         throw (RuntimeException)
344     { return TestPolyStruct< TestBadEnum >(
345         test::testtools::bridgetest::TestBadEnum_M);
346           /* explicitly instantiate with default enumerator */ }
347 
getNullPolyStruct()348     virtual TestPolyStruct< TestStruct > SAL_CALL getNullPolyStruct()
349         throw (RuntimeException)
350     { return TestPolyStruct< TestStruct >(); }
351 
352     virtual TestPolyStruct< Reference< XBridgeTestBase > > SAL_CALL
getNullPolyInterface()353     getNullPolyInterface() throw (RuntimeException)
354     { return TestPolyStruct< Reference< XBridgeTestBase > >(); }
355 
356     virtual ::com::sun::star::uno::Any SAL_CALL transportAny(
357         const ::com::sun::star::uno::Any& value )
358         throw(::com::sun::star::uno::RuntimeException);
359 
360     virtual void SAL_CALL call( sal_Int32 nCallId, sal_Int32 nWaitMUSEC )
361         throw(::com::sun::star::uno::RuntimeException);
362     virtual void SAL_CALL callOneway( sal_Int32 nCallId, sal_Int32 nWaitMUSEC )
363         throw(::com::sun::star::uno::RuntimeException);
364     virtual sal_Bool SAL_CALL sequenceOfCallTestPassed(  )
365         throw(::com::sun::star::uno::RuntimeException);
366     virtual void SAL_CALL startRecursiveCall(
367         const ::com::sun::star::uno::Reference< XRecursiveCall >& xCall, sal_Int32 nToCall )
368         throw(::com::sun::star::uno::RuntimeException);
369 
370     virtual Reference< XMulti > SAL_CALL getMulti() throw (RuntimeException);
371 
372     virtual rtl::OUString SAL_CALL testMulti(Reference< XMulti > const & multi)
373         throw (RuntimeException);
374 
375 public: // XBridgeTest
376     virtual TestData SAL_CALL raiseException( sal_Int16 nArgumentPos, const OUString & rMsg, const Reference< XInterface > & xCOntext )
377         throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
378 
379     virtual void SAL_CALL raiseRuntimeExceptionOneway(
380         const ::rtl::OUString& Message, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Context )
381         throw(::com::sun::star::uno::RuntimeException);
382 
383     virtual sal_Int32 SAL_CALL getRuntimeException() throw(::com::sun::star::uno::RuntimeException);
384     virtual void SAL_CALL setRuntimeException( sal_Int32 _runtimeexception ) throw(::com::sun::star::uno::RuntimeException);
385 
386     // XBridgeTest2
387     virtual Sequence< sal_Bool > SAL_CALL setSequenceBool(
388         const Sequence< sal_Bool >& aSeq ) throw (RuntimeException);
389     virtual Sequence< sal_Unicode > SAL_CALL setSequenceChar(
390         const Sequence< sal_Unicode >& aSeq ) throw (RuntimeException);
391     virtual Sequence< sal_Int8 > SAL_CALL setSequenceByte(
392         const Sequence< sal_Int8 >& aSeq ) throw (RuntimeException);
393     virtual Sequence< sal_Int16 > SAL_CALL setSequenceShort(
394         const Sequence< sal_Int16 >& aSeq ) throw (RuntimeException);
395     virtual Sequence< sal_uInt16 > SAL_CALL setSequenceUShort(
396         const Sequence< sal_uInt16 >& aSeq ) throw (RuntimeException);
397     virtual Sequence< sal_Int32 > SAL_CALL setSequenceLong(
398         const Sequence< sal_Int32 >& aSeq ) throw (RuntimeException);
399     virtual Sequence< sal_uInt32 > SAL_CALL setSequenceULong(
400         const Sequence< sal_uInt32 >& aSeq ) throw (RuntimeException);
401     virtual Sequence< sal_Int64 > SAL_CALL setSequenceHyper(
402         const Sequence< sal_Int64 >& aSeq ) throw (RuntimeException);
403     virtual Sequence< sal_uInt64 > SAL_CALL setSequenceUHyper(
404         const Sequence< sal_uInt64 >& aSeq ) throw (RuntimeException);
405     virtual Sequence< float > SAL_CALL setSequenceFloat(
406         const Sequence< float >& aSeq ) throw (RuntimeException);
407     virtual Sequence< double > SAL_CALL setSequenceDouble(
408         const Sequence< double >& aSeq ) throw (RuntimeException);
409     virtual Sequence< TestEnum > SAL_CALL setSequenceEnum(
410         const Sequence< TestEnum >& aSeq ) throw (RuntimeException) ;
411     virtual Sequence< OUString > SAL_CALL setSequenceString(
412         const Sequence< OUString >& aString ) throw (RuntimeException);
413     virtual Sequence< Reference< XInterface > > SAL_CALL setSequenceXInterface(
414         const Sequence< Reference< XInterface > >& aSeq )
415         throw (RuntimeException);
416     virtual Sequence<Any > SAL_CALL setSequenceAny(
417         const Sequence<Any >& aSeq ) throw (RuntimeException);
418     virtual Sequence<TestElement > SAL_CALL setSequenceStruct(
419         const Sequence< TestElement >& aSeq ) throw (RuntimeException);
420     virtual Sequence< Sequence< sal_Int32 > > SAL_CALL setDim2(
421         const Sequence<Sequence< sal_Int32 > >& aSeq ) throw (RuntimeException);
422     virtual Sequence< Sequence< Sequence< sal_Int32 > > > SAL_CALL setDim3(
423         const Sequence< Sequence< Sequence< sal_Int32 > > >& aSeq )
424         throw (RuntimeException);
425     virtual void SAL_CALL setSequencesInOut(Sequence< sal_Bool >& aSeqBoolean,
426                                 Sequence< sal_Unicode >& aSeqChar,
427                                 Sequence< sal_Int8 >& aSeqByte,
428                                 Sequence< sal_Int16 >& aSeqShort,
429                                 Sequence< sal_uInt16 >& aSeqUShort,
430                                 Sequence< sal_Int32 >& aSeqLong,
431                                 Sequence< sal_uInt32 >& aSeqULong,
432                                 Sequence< sal_Int64 >& aSeqHyper,
433                                 Sequence< sal_uInt64 >& aSeqUHyper,
434                                 Sequence< float >& aSeqFloat,
435                                 Sequence< double >& aSeqDouble,
436                                 Sequence< TestEnum >& aSeqTestEnum,
437                                 Sequence< OUString >& aSeqString,
438                                 Sequence<Reference<XInterface > >& aSeqXInterface,
439                                 Sequence< Any >& aSeqAny,
440                                 Sequence< Sequence< sal_Int32 > >& aSeqDim2,
441                                 Sequence< Sequence< Sequence< sal_Int32 > > >& aSeqDim3 )
442         throw (RuntimeException);
443     virtual void SAL_CALL setSequencesOut( Sequence< sal_Bool >& aSeqBoolean,
444                              Sequence< sal_Unicode >& aSeqChar,
445                              Sequence< sal_Int8 >& aSeqByte,
446                              Sequence< sal_Int16 >& aSeqShort,
447                              Sequence< sal_uInt16 >& aSeqUShort,
448                              Sequence< sal_Int32 >& aSeqLong,
449                              Sequence< sal_uInt32 >& aSeqULong,
450                              Sequence< sal_Int64 >& aSeqHyper,
451                              Sequence< sal_uInt64 >& aSeqUHyper,
452                              Sequence< float >& aSeqFloat,
453                              Sequence< double >& aSeqDouble,
454                              Sequence< TestEnum >& aSeqEnum,
455                              Sequence< OUString >& aSeqString,
456                              Sequence< Reference< XInterface > >& aSeqXInterface,
457                              Sequence< Any >& aSeqAny,
458                              Sequence< Sequence< sal_Int32 > >& aSeqDim2,
459                              Sequence< Sequence< Sequence< sal_Int32 > > >& aSeqDim3 )
460         throw (RuntimeException);
461     virtual void SAL_CALL testConstructorsService(
462         Reference< XComponentContext > const & context)
463         throw (RuntimeException);
464     virtual Reference< XCurrentContextChecker > SAL_CALL
465     getCurrentContextChecker()
466         throw (RuntimeException);
467 
468 public:
469     virtual void SAL_CALL callRecursivly( const ::com::sun::star::uno::Reference< XRecursiveCall >& xCall, sal_Int32 nToCall ) throw(::com::sun::star::uno::RuntimeException);
470 };
471 
472 //Dummy class for XComponent implementation
473 class Dummy : public osl::DebugBase<Dummy>,
474               public WeakComponentImplHelperBase
475 {
476 public:
Dummy()477      Dummy(): WeakComponentImplHelperBase(*Mutex::getGlobalMutex()){}
478 
479 };
480 //__________________________________________________________________________________________________
transportAny(const Any & value)481 Any Test_Impl::transportAny( const Any & value ) throw ( ::com::sun::star::uno::RuntimeException)
482 {
483     return value;
484 }
485 
486 //__________________________________________________________________________________________________
call(sal_Int32 nCallId,sal_Int32 nWaitMUSEC)487 void Test_Impl::call( sal_Int32 nCallId , sal_Int32 nWaitMUSEC ) throw(::com::sun::star::uno::RuntimeException)
488 {
489     TimeValue value = { static_cast<unsigned>(nWaitMUSEC / 1000000), static_cast<unsigned>(nWaitMUSEC * 1000) };
490     osl_waitThread( &value );
491     if( m_bFirstCall )
492     {
493         m_bFirstCall = sal_False;
494     }
495     else
496     {
497         m_bSequenceOfCallTestPassed = m_bSequenceOfCallTestPassed && (nCallId > m_nLastCallId);
498     }
499     m_nLastCallId = nCallId;
500 }
501 
502 //__________________________________________________________________________________________________
callOneway(sal_Int32 nCallId,sal_Int32 nWaitMUSEC)503 void Test_Impl::callOneway( sal_Int32 nCallId , sal_Int32 nWaitMUSEC ) throw (::com::sun::star::uno::RuntimeException)
504 {
505     TimeValue value = { static_cast<unsigned>(nWaitMUSEC / 1000000), static_cast<unsigned>(nWaitMUSEC * 1000) };
506     osl_waitThread( &value );
507     m_bSequenceOfCallTestPassed = m_bSequenceOfCallTestPassed && (nCallId > m_nLastCallId);
508     m_nLastCallId = nCallId;
509 }
510 
511 //__________________________________________________________________________________________________
sequenceOfCallTestPassed()512 sal_Bool Test_Impl::sequenceOfCallTestPassed() throw (::com::sun::star::uno::RuntimeException)
513 {
514     return m_bSequenceOfCallTestPassed;
515 }
516 
517 //__________________________________________________________________________________________________
startRecursiveCall(const::com::sun::star::uno::Reference<XRecursiveCall> & xCall,sal_Int32 nToCall)518 void SAL_CALL Test_Impl::startRecursiveCall(
519     const ::com::sun::star::uno::Reference< XRecursiveCall >& xCall, sal_Int32 nToCall )
520     throw(::com::sun::star::uno::RuntimeException)
521 {
522     MutexGuard guard( m_mutex );
523     if( nToCall )
524     {
525         nToCall --;
526         xCall->callRecursivly( this , nToCall );
527     }
528 }
529 
530 
callRecursivly(const::com::sun::star::uno::Reference<XRecursiveCall> & xCall,sal_Int32 nToCall)531 void SAL_CALL Test_Impl::callRecursivly(
532     const ::com::sun::star::uno::Reference< XRecursiveCall >& xCall,
533     sal_Int32 nToCall )
534     throw(::com::sun::star::uno::RuntimeException)
535 {
536     MutexGuard guard( m_mutex );
537     if( nToCall )
538     {
539         nToCall --;
540         xCall->callRecursivly( this , nToCall );
541     }
542 }
543 
getMulti()544 Reference< XMulti > Test_Impl::getMulti() throw (RuntimeException) {
545     return new testtools::bridgetest::Multi;
546 }
547 
testMulti(Reference<XMulti> const & multi)548 rtl::OUString Test_Impl::testMulti(Reference< XMulti > const & multi)
549     throw (RuntimeException)
550 {
551     return testtools::bridgetest::testMulti(multi);
552 }
553 
554 //__________________________________________________________________________________________________
setValues(sal_Bool bBool,sal_Unicode cChar,sal_Int8 nByte,sal_Int16 nShort,sal_uInt16 nUShort,sal_Int32 nLong,sal_uInt32 nULong,sal_Int64 nHyper,sal_uInt64 nUHyper,float fFloat,double fDouble,TestEnum eEnum,const::rtl::OUString & rStr,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,const::com::sun::star::uno::Any & rAny,const::com::sun::star::uno::Sequence<TestElement> & rSequence,const TestData & rStruct)555 void Test_Impl::setValues( sal_Bool bBool, sal_Unicode cChar, sal_Int8 nByte,
556                            sal_Int16 nShort, sal_uInt16 nUShort,
557                            sal_Int32 nLong, sal_uInt32 nULong,
558                            sal_Int64 nHyper, sal_uInt64 nUHyper,
559                            float fFloat, double fDouble,
560                            TestEnum eEnum, const ::rtl::OUString& rStr,
561                            const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
562                            const ::com::sun::star::uno::Any& rAny,
563                            const ::com::sun::star::uno::Sequence<TestElement >& rSequence,
564                            const TestData& rStruct )
565     throw(com::sun::star::uno::RuntimeException)
566 {
567     assign( _aData,
568             bBool, cChar, nByte, nShort, nUShort, nLong, nULong, nHyper, nUHyper, fFloat, fDouble,
569             eEnum, rStr, xTest, rAny, rSequence );
570     _aStructData = rStruct;
571 }
572 //__________________________________________________________________________________________________
setValues2(sal_Bool & bBool,sal_Unicode & cChar,sal_Int8 & nByte,sal_Int16 & nShort,sal_uInt16 & nUShort,sal_Int32 & nLong,sal_uInt32 & nULong,sal_Int64 & nHyper,sal_uInt64 & nUHyper,float & fFloat,double & fDouble,TestEnum & eEnum,rtl::OUString & rStr,::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,::com::sun::star::uno::Any & rAny,::com::sun::star::uno::Sequence<TestElement> & rSequence,TestData & rStruct)573 TestData Test_Impl::setValues2( sal_Bool& bBool, sal_Unicode& cChar, sal_Int8& nByte,
574                                 sal_Int16& nShort, sal_uInt16& nUShort,
575                                 sal_Int32& nLong, sal_uInt32& nULong,
576                                 sal_Int64& nHyper, sal_uInt64& nUHyper,
577                                 float& fFloat, double& fDouble,
578                                 TestEnum& eEnum, rtl::OUString& rStr,
579                                 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
580                                 ::com::sun::star::uno::Any& rAny,
581                                 ::com::sun::star::uno::Sequence<TestElement >& rSequence,
582                                 TestData& rStruct )
583     throw(com::sun::star::uno::RuntimeException)
584 {
585     assign( _aData,
586             bBool, cChar, nByte, nShort, nUShort, nLong, nULong, nHyper, nUHyper, fFloat, fDouble,
587             eEnum, rStr, xTest, rAny, rSequence );
588     _aStructData = rStruct;
589 
590     TestElement elem = rSequence[ 0 ];
591     rSequence[ 0 ] = rSequence[ 1 ];
592     rSequence[ 1 ] = elem;
593 
594     return _aStructData;
595 }
596 //__________________________________________________________________________________________________
getValues(sal_Bool & bBool,sal_Unicode & cChar,sal_Int8 & nByte,sal_Int16 & nShort,sal_uInt16 & nUShort,sal_Int32 & nLong,sal_uInt32 & nULong,sal_Int64 & nHyper,sal_uInt64 & nUHyper,float & fFloat,double & fDouble,TestEnum & eEnum,rtl::OUString & rStr,::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,::com::sun::star::uno::Any & rAny,::com::sun::star::uno::Sequence<TestElement> & rSequence,TestData & rStruct)597 TestData Test_Impl::getValues( sal_Bool& bBool, sal_Unicode& cChar, sal_Int8& nByte,
598                                sal_Int16& nShort, sal_uInt16& nUShort,
599                                sal_Int32& nLong, sal_uInt32& nULong,
600                                sal_Int64& nHyper, sal_uInt64& nUHyper,
601                                float& fFloat, double& fDouble,
602                                TestEnum& eEnum, rtl::OUString& rStr,
603                                ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
604                                ::com::sun::star::uno::Any& rAny,
605                                ::com::sun::star::uno::Sequence<TestElement >& rSequence,
606                                TestData& rStruct )
607     throw(com::sun::star::uno::RuntimeException)
608 {
609     bBool = _aData.Bool;
610     cChar = _aData.Char;
611     nByte = _aData.Byte;
612     nShort = _aData.Short;
613     nUShort = _aData.UShort;
614     nLong = _aData.Long;
615     nULong = _aData.ULong;
616     nHyper = _aData.Hyper;
617     nUHyper = _aData.UHyper;
618     fFloat = _aData.Float;
619     fDouble = _aData.Double;
620     eEnum = _aData.Enum;
621     rStr = _aData.String;
622     xTest = _aData.Interface;
623     rAny = _aData.Any;
624     rSequence = _aData.Sequence;
625     rStruct = _aStructData;
626     return _aStructData;
627 }
628 //__________________________________________________________________________________________________
raiseException(sal_Int16 nArgumentPos,const OUString & rMsg,const Reference<XInterface> & xContext)629 TestData Test_Impl::raiseException( sal_Int16 nArgumentPos, const OUString & rMsg, const Reference< XInterface > & xContext )
630     throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
631 {
632     IllegalArgumentException aExc;
633     aExc.ArgumentPosition = nArgumentPos;
634     aExc.Message          = _aData.String = rMsg;
635     aExc.Context          = _aData.Interface = xContext;
636     throw aExc;
637 }
638 
raiseRuntimeExceptionOneway(const OUString & rMsg,const Reference<XInterface> & xContext)639 void Test_Impl::raiseRuntimeExceptionOneway( const OUString & rMsg, const Reference< XInterface > & xContext )
640     throw(::com::sun::star::uno::RuntimeException)
641 {
642     RuntimeException aExc;
643     aExc.Message          = _aData.String = rMsg;
644     aExc.Context          = _aData.Interface = xContext;
645     throw aExc;
646 }
647 
dothrow2(RuntimeException e)648 void dothrow2( RuntimeException e )
649 {
650     throw e;
651 }
dothrow(RuntimeException const & e)652 void dothrow( RuntimeException const & e )
653 {
654 #if defined _MSC_VER
655     // currently only for MSVC:
656     // just to test whether all bridges fall back to a RuntimeException
657     // in case of a thrown non-UNO exception:
658     try
659     {
660         throw ::std::bad_alloc();
661     }
662     catch (...)
663     {
664         try
665         {
666             Any a( getCaughtException() );
667             RuntimeException exc;
668             OSL_VERIFY( a >>= exc );
669             OSL_TRACE(
670                 OUStringToOString(
671                     exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
672         }
673         catch (...) // never throws anything
674         {
675             fprintf( stderr, "\ngetCaughtException() failed!\n" );
676             exit( 1 );
677         }
678     }
679 #endif
680     dothrow2( e );
681 }
682 //______________________________________________________________________________
getRuntimeException()683 sal_Int32 Test_Impl::getRuntimeException()
684     throw (RuntimeException)
685 {
686     try
687     {
688         dothrow( RuntimeException( _aData.String, _aData.Interface ) );
689     }
690     catch (Exception &)
691     {
692         Any a( getCaughtException() );
693         throwException( a );
694     }
695     return 0; // for dummy
696 }
697 //__________________________________________________________________________________________________
setRuntimeException(sal_Int32)698 void Test_Impl::setRuntimeException( sal_Int32 ) throw(::com::sun::star::uno::RuntimeException)
699 {
700     RuntimeException aExc;
701     aExc.Message          = _aData.String;
702     aExc.Context          = _aData.Interface;
703     throwException( makeAny( aExc ) );
704 }
705 
706 // XBridgeTest2 -------------------------------------------------------------
setSequenceBool(const Sequence<sal_Bool> & aSeq)707 Sequence< sal_Bool > SAL_CALL Test_Impl::setSequenceBool(
708         const Sequence< sal_Bool >& aSeq ) throw (RuntimeException)
709 {
710     _arBool = aSeq;
711     return aSeq;
712 }
713 
setSequenceChar(const Sequence<sal_Unicode> & aSeq)714 Sequence< sal_Unicode > SAL_CALL Test_Impl::setSequenceChar(
715         const Sequence< sal_Unicode >& aSeq ) throw (RuntimeException)
716 {
717     _arChar = aSeq;
718     return aSeq;
719 }
720 
setSequenceByte(const Sequence<sal_Int8> & aSeq)721 Sequence< sal_Int8 > SAL_CALL Test_Impl::setSequenceByte(
722         const Sequence< sal_Int8 >& aSeq ) throw (RuntimeException)
723 {
724     _arByte = aSeq;
725     return aSeq;
726 }
727 
setSequenceShort(const Sequence<sal_Int16> & aSeq)728 Sequence< sal_Int16 > SAL_CALL Test_Impl::setSequenceShort(
729         const Sequence< sal_Int16 >& aSeq ) throw (RuntimeException)
730 {
731     _arShort = aSeq;
732     return aSeq;
733 }
734 
setSequenceUShort(const Sequence<sal_uInt16> & aSeq)735 Sequence< sal_uInt16 > SAL_CALL Test_Impl::setSequenceUShort(
736         const Sequence< sal_uInt16 >& aSeq ) throw (RuntimeException)
737 {
738     _arUShort = aSeq;
739     return aSeq;
740 }
741 
setSequenceLong(const Sequence<sal_Int32> & aSeq)742 Sequence< sal_Int32 > SAL_CALL Test_Impl::setSequenceLong(
743         const Sequence< sal_Int32 >& aSeq ) throw (RuntimeException)
744 {
745     _arLong = aSeq;
746     return aSeq;
747 }
748 
setSequenceULong(const Sequence<sal_uInt32> & aSeq)749 Sequence< sal_uInt32 > SAL_CALL Test_Impl::setSequenceULong(
750         const Sequence< sal_uInt32 >& aSeq ) throw (RuntimeException)
751 {
752     _arULong = aSeq;
753     return aSeq;
754 }
755 
setSequenceHyper(const Sequence<sal_Int64> & aSeq)756 Sequence< sal_Int64 > SAL_CALL Test_Impl::setSequenceHyper(
757         const Sequence< sal_Int64 >& aSeq ) throw (RuntimeException)
758 {
759     _arHyper = aSeq;
760     return aSeq;
761 }
762 
setSequenceUHyper(const Sequence<sal_uInt64> & aSeq)763 Sequence< sal_uInt64 > SAL_CALL Test_Impl::setSequenceUHyper(
764         const Sequence< sal_uInt64 >& aSeq ) throw (RuntimeException)
765 {
766     _arUHyper = aSeq;
767     return aSeq;
768 }
769 
setSequenceFloat(const Sequence<float> & aSeq)770 Sequence< float > SAL_CALL Test_Impl::setSequenceFloat(
771         const Sequence< float >& aSeq ) throw (RuntimeException)
772 {
773     _arFloat = aSeq;
774     return aSeq;
775 }
776 
setSequenceDouble(const Sequence<double> & aSeq)777 Sequence< double > SAL_CALL Test_Impl::setSequenceDouble(
778     const Sequence< double >& aSeq ) throw (RuntimeException)
779 {
780     _arDouble = aSeq;
781     return aSeq;
782 }
783 
setSequenceEnum(const Sequence<TestEnum> & aSeq)784 Sequence< TestEnum > SAL_CALL Test_Impl::setSequenceEnum(
785     const Sequence< TestEnum >& aSeq ) throw (RuntimeException)
786 {
787     _arEnum = aSeq;
788     return aSeq;
789 }
790 
setSequenceString(const Sequence<OUString> & aSeq)791 Sequence< OUString > SAL_CALL Test_Impl::setSequenceString(
792     const Sequence< OUString >& aSeq ) throw (RuntimeException)
793 {
794     _arString = aSeq;
795     return aSeq;
796 }
797 
setSequenceXInterface(const Sequence<Reference<XInterface>> & aSeq)798 Sequence< Reference< XInterface > > SAL_CALL Test_Impl::setSequenceXInterface(
799         const Sequence< Reference< XInterface > >& aSeq )
800         throw (RuntimeException)
801 {
802     _arObject = aSeq;
803     return aSeq;
804 }
805 
setSequenceAny(const Sequence<Any> & aSeq)806 Sequence<Any > SAL_CALL Test_Impl::setSequenceAny(
807     const Sequence<Any >& aSeq ) throw (RuntimeException)
808 {
809     _arAny = aSeq;
810     return aSeq;
811 }
812 
setSequenceStruct(const Sequence<TestElement> & aSeq)813 Sequence<TestElement > SAL_CALL Test_Impl::setSequenceStruct(
814     const Sequence< TestElement >& aSeq ) throw (RuntimeException)
815 {
816     _arStruct = aSeq;
817     return aSeq;
818 }
819 
setDim2(const Sequence<Sequence<sal_Int32>> & aSeq)820 Sequence< Sequence< sal_Int32 > > SAL_CALL Test_Impl::setDim2(
821         const Sequence<Sequence< sal_Int32 > >& aSeq ) throw (RuntimeException)
822 {
823     _arLong2 = aSeq;
824     return aSeq;
825 }
826 
setDim3(const Sequence<Sequence<Sequence<sal_Int32>>> & aSeq)827 Sequence< Sequence< Sequence< sal_Int32 > > > SAL_CALL Test_Impl::setDim3(
828         const Sequence< Sequence< Sequence< sal_Int32 > > >& aSeq )
829         throw (RuntimeException)
830 {
831     _arLong3 = aSeq;
832     return aSeq;
833 }
834 
setSequencesInOut(Sequence<sal_Bool> & aSeqBoolean,Sequence<sal_Unicode> & aSeqChar,Sequence<sal_Int8> & aSeqByte,Sequence<sal_Int16> & aSeqShort,Sequence<sal_uInt16> & aSeqUShort,Sequence<sal_Int32> & aSeqLong,Sequence<sal_uInt32> & aSeqULong,Sequence<sal_Int64> & aSeqHyper,Sequence<sal_uInt64> & aSeqUHyper,Sequence<float> & aSeqFloat,Sequence<double> & aSeqDouble,Sequence<TestEnum> & aSeqTestEnum,Sequence<OUString> & aSeqString,Sequence<Reference<XInterface>> & aSeqXInterface,Sequence<Any> & aSeqAny,Sequence<Sequence<sal_Int32>> & aSeqDim2,Sequence<Sequence<Sequence<sal_Int32>>> & aSeqDim3)835 void SAL_CALL Test_Impl::setSequencesInOut(Sequence< sal_Bool >& aSeqBoolean,
836                                 Sequence< sal_Unicode >& aSeqChar,
837                                 Sequence< sal_Int8 >& aSeqByte,
838                                 Sequence< sal_Int16 >& aSeqShort,
839                                 Sequence< sal_uInt16 >& aSeqUShort,
840                                 Sequence< sal_Int32 >& aSeqLong,
841                                 Sequence< sal_uInt32 >& aSeqULong,
842                                 Sequence< sal_Int64 >& aSeqHyper,
843                                 Sequence< sal_uInt64 >& aSeqUHyper,
844                                 Sequence< float >& aSeqFloat,
845                                 Sequence< double >& aSeqDouble,
846                                 Sequence< TestEnum >& aSeqTestEnum,
847                                 Sequence< OUString >& aSeqString,
848                                 Sequence<Reference<XInterface > >& aSeqXInterface,
849                                 Sequence< Any >& aSeqAny,
850                                 Sequence< Sequence< sal_Int32 > >& aSeqDim2,
851                                 Sequence< Sequence< Sequence< sal_Int32 > > >& aSeqDim3 )
852         throw (RuntimeException)
853 {
854     _arBool = aSeqBoolean;
855     _arChar = aSeqChar;
856     _arByte = aSeqByte;
857     _arShort = aSeqShort;
858     _arUShort = aSeqUShort;
859     _arLong = aSeqLong;
860     _arULong = aSeqULong;
861     _arHyper  = aSeqHyper;
862     _arUHyper = aSeqUHyper;
863     _arFloat = aSeqFloat;
864     _arDouble = aSeqDouble;
865     _arEnum = aSeqTestEnum;
866     _arString = aSeqString;
867     _arObject = aSeqXInterface;
868     _arAny = aSeqAny;
869     _arLong2 = aSeqDim2;
870     _arLong3 = aSeqDim3;
871 }
872 
setSequencesOut(Sequence<sal_Bool> & aSeqBoolean,Sequence<sal_Unicode> & aSeqChar,Sequence<sal_Int8> & aSeqByte,Sequence<sal_Int16> & aSeqShort,Sequence<sal_uInt16> & aSeqUShort,Sequence<sal_Int32> & aSeqLong,Sequence<sal_uInt32> & aSeqULong,Sequence<sal_Int64> & aSeqHyper,Sequence<sal_uInt64> & aSeqUHyper,Sequence<float> & aSeqFloat,Sequence<double> & aSeqDouble,Sequence<TestEnum> & aSeqEnum,Sequence<OUString> & aSeqString,Sequence<Reference<XInterface>> & aSeqXInterface,Sequence<Any> & aSeqAny,Sequence<Sequence<sal_Int32>> & aSeqDim2,Sequence<Sequence<Sequence<sal_Int32>>> & aSeqDim3)873 void SAL_CALL Test_Impl::setSequencesOut( Sequence< sal_Bool >& aSeqBoolean,
874                              Sequence< sal_Unicode >& aSeqChar,
875                              Sequence< sal_Int8 >& aSeqByte,
876                              Sequence< sal_Int16 >& aSeqShort,
877                              Sequence< sal_uInt16 >& aSeqUShort,
878                              Sequence< sal_Int32 >& aSeqLong,
879                              Sequence< sal_uInt32 >& aSeqULong,
880                              Sequence< sal_Int64 >& aSeqHyper,
881                              Sequence< sal_uInt64 >& aSeqUHyper,
882                              Sequence< float >& aSeqFloat,
883                              Sequence< double >& aSeqDouble,
884                              Sequence< TestEnum >& aSeqEnum,
885                              Sequence< OUString >& aSeqString,
886                              Sequence< Reference< XInterface > >& aSeqXInterface,
887                              Sequence< Any >& aSeqAny,
888                              Sequence< Sequence< sal_Int32 > >& aSeqDim2,
889                              Sequence< Sequence< Sequence< sal_Int32 > > >& aSeqDim3 )
890         throw (RuntimeException)
891 {
892     aSeqBoolean = _arBool;
893     aSeqChar = _arChar;
894     aSeqByte = _arByte;
895     aSeqShort = _arShort;
896     aSeqUShort = _arUShort;
897     aSeqLong = _arLong;
898     aSeqULong = _arULong;
899     aSeqHyper = _arHyper;
900     aSeqUHyper = _arUHyper;
901     aSeqFloat = _arFloat;
902     aSeqDouble = _arDouble;
903     aSeqEnum = _arEnum;
904     aSeqString = _arString;
905     aSeqXInterface = _arObject;
906     aSeqAny = _arAny;
907     aSeqDim2 = _arLong2;
908     aSeqDim3 = _arLong3;
909 }
910 
testConstructorsService(Reference<XComponentContext> const & context)911 void Test_Impl::testConstructorsService(
912     Reference< XComponentContext > const & context) throw (RuntimeException)
913 {
914     Sequence< sal_Bool > arg14(1); arg14[0] = true;
915     Sequence< sal_Int8 > arg15(1); arg15[0] = SAL_MIN_INT8;
916     Sequence< sal_Int16 > arg16(1); arg16[0] = SAL_MIN_INT16;
917     Sequence< sal_uInt16 > arg17(1); arg17[0] = SAL_MAX_UINT16;
918     Sequence< sal_Int32 > arg18(1); arg18[0] = SAL_MIN_INT32;
919     Sequence< sal_uInt32 > arg19(1); arg19[0] = SAL_MAX_UINT32;
920     Sequence< sal_Int64 > arg20(1); arg20[0] = SAL_MIN_INT64;
921     Sequence< sal_uInt64 > arg21(1); arg21[0] = SAL_MAX_UINT64;
922     Sequence< float > arg22(1); arg22[0] = 0.123f;
923     Sequence< double > arg23(1); arg23[0] = 0.456;
924     Sequence< sal_Unicode > arg24(1); arg24[0] = 'X';
925     Sequence< OUString > arg25(1);
926     arg25[0] = OUString(RTL_CONSTASCII_USTRINGPARAM("test"));
927     Sequence< Type > arg26(1); arg26[0] = UnoType< Any >::get();
928     Sequence< Any > arg27(1); arg27[0] <<= true;
929     Sequence< Sequence< sal_Bool > > arg28(1);
930     arg28[0] = Sequence< sal_Bool >(1); arg28[0][0] = true;
931     Sequence< Sequence< Any > > arg29(1); arg29[0] = Sequence< Any >(1);
932     arg29[0][0] <<= true;
933     Sequence< TestEnum > arg30(1); arg30[0] = TestEnum_TWO;
934     Sequence< TestStruct > arg31(1); arg31[0].member = 10;
935     Sequence< TestPolyStruct< sal_Bool > > arg32(1); arg32[0].member = true;
936     Sequence< TestPolyStruct< Any > > arg33(1); arg33[0].member <<= true;
937     Sequence< Reference< XInterface > > arg34(1);
938     Constructors::create1(context,
939         true,
940         SAL_MIN_INT8,
941         SAL_MIN_INT16,
942         SAL_MAX_UINT16,
943         SAL_MIN_INT32,
944         SAL_MAX_UINT32,
945         SAL_MIN_INT64,
946         SAL_MAX_UINT64,
947         0.123f,
948         0.456,
949         'X',
950         OUString(RTL_CONSTASCII_USTRINGPARAM("test")),
951         UnoType< Any >::get(),
952         makeAny(true),
953         arg14,
954         arg15,
955         arg16,
956         arg17,
957         arg18,
958         arg19,
959         arg20,
960         arg21,
961         arg22,
962         arg23,
963         arg24,
964         arg25,
965         arg26,
966         arg27,
967         arg28,
968         arg29,
969         arg30,
970         arg31,
971         arg32,
972         arg33,
973         arg34,
974         TestEnum_TWO,
975         TestStruct(10),
976         TestPolyStruct< sal_Bool >(true),
977         TestPolyStruct< Any >(makeAny(true)),
978         Reference< XInterface >(0));
979     Sequence< Any > args(40);
980     args[0] <<= true;
981     args[1] <<= SAL_MIN_INT8;
982     args[2] <<= SAL_MIN_INT16;
983     args[3] <<= SAL_MAX_UINT16;
984     args[4] <<= SAL_MIN_INT32;
985     args[5] <<= SAL_MAX_UINT32;
986     args[6] <<= SAL_MIN_INT64;
987     args[7] <<= SAL_MAX_UINT64;
988     args[8] <<= 0.123f;
989     args[9] <<= 0.456;
990     sal_Unicode arg10c = 'X';
991     args[10].setValue(&arg10c, UnoType< UnoCharType >::get());
992     args[11] <<= OUString(RTL_CONSTASCII_USTRINGPARAM("test"));
993     args[12] <<= UnoType< Any >::get();
994     args[13] <<= true;
995     args[14] <<= arg14;
996     args[15] <<= arg15;
997     args[16] <<= arg16;
998     args[17] <<= arg17;
999     args[18] <<= arg18;
1000     args[19] <<= arg19;
1001     args[20] <<= arg20;
1002     args[21] <<= arg21;
1003     args[22] <<= arg22;
1004     args[23] <<= arg23;
1005     args[24].setValue(&arg24, UnoType< UnoSequenceType< UnoCharType > >::get());
1006     args[25] <<= arg25;
1007     args[26] <<= arg26;
1008     args[27] <<= arg27;
1009     args[28] <<= arg28;
1010     args[29] <<= arg29;
1011     args[30] <<= arg30;
1012     args[31] <<= arg31;
1013     args[32] <<= arg32;
1014     args[33] <<= arg33;
1015     args[34] <<= arg34;
1016     args[35] <<= TestEnum_TWO;
1017     args[36] <<= TestStruct(10);
1018     args[37] <<= TestPolyStruct< sal_Bool >(true);
1019     args[38] <<= TestPolyStruct< Any >(makeAny(true));
1020     args[39] <<= Reference< XInterface >(0);
1021     Constructors::create2(context, args);
1022 
1023     Sequence<Type> argSeq1(1); argSeq1[0] = cppu::UnoType<sal_Int32>::get();
1024     Sequence<Reference<XInterface> > argSeq2(1); argSeq2[0] = static_cast<XComponent*>(new Dummy());
1025     Sequence<Reference<XComponent> > argSeq2a(1); argSeq2a[0] = static_cast<XComponent*>(new Dummy());
1026 
1027     Sequence<TestPolyStruct2<sal_Unicode, Sequence<Any> > > argSeq3(1);
1028     argSeq3[0] = TestPolyStruct2<sal_Unicode, Sequence<Any> >('X', arg27);
1029     Sequence<TestPolyStruct2<TestPolyStruct<sal_Unicode>, Sequence<Any> > > argSeq4(1);
1030     argSeq4[0] = TestPolyStruct2<TestPolyStruct<sal_Unicode>, Sequence<Any> >(
1031         TestPolyStruct<sal_Unicode>('X'), arg27);
1032     Sequence<Sequence<sal_Int32> > argSeq5(1);
1033     argSeq5[0] = Sequence<sal_Int32>(1); argSeq5[0][0] = SAL_MIN_INT32;
1034     Sequence<TestPolyStruct<sal_Int32> > argSeq6(1);
1035     argSeq6[0] = TestPolyStruct<sal_Int32>(SAL_MIN_INT32);
1036     Sequence<TestPolyStruct<TestPolyStruct2<sal_Unicode, Any> > > argSeq7(1);
1037     argSeq7[0] = TestPolyStruct<TestPolyStruct2<sal_Unicode, Any> >(
1038         TestPolyStruct2<sal_Unicode, Any>('X', Any(true)));
1039     Sequence<TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString> > > argSeq8(1);
1040     argSeq8[0] = TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString> > (
1041         TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString>(
1042             TestPolyStruct2<sal_Unicode, Any>('X', Any(true)), OUString(RTL_CONSTASCII_USTRINGPARAM("test"))));
1043     Sequence<TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > > > argSeq9(1);
1044     argSeq9[0] = TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > >(
1045         OUString(RTL_CONSTASCII_USTRINGPARAM("test")), TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> >(
1046                      'X', TestPolyStruct<Any>(Any(true))));
1047     Sequence<TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>, TestPolyStruct<sal_Unicode> > > argSeq10(1);
1048     argSeq10[0] = TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>, TestPolyStruct<sal_Unicode> >(
1049         TestPolyStruct2<sal_Unicode, Any>('X', Any(true)), TestPolyStruct<sal_Unicode>('X'));
1050     Sequence<Sequence<TestPolyStruct<sal_Unicode > > > argSeq11(1);
1051     argSeq11[0] = Sequence<TestPolyStruct<sal_Unicode > >(1);
1052     argSeq11[0][0] = TestPolyStruct<sal_Unicode>('X');
1053     Sequence<Sequence<TestPolyStruct<TestPolyStruct2<sal_Unicode,Any> > > > argSeq12(1);
1054     argSeq12[0] = Sequence<TestPolyStruct<TestPolyStruct2<sal_Unicode,Any> > >(1);
1055     argSeq12[0][0] = TestPolyStruct<TestPolyStruct2<sal_Unicode,Any> >(
1056         TestPolyStruct2<sal_Unicode,Any>('X', Any(true)));
1057     Sequence<Sequence<TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>,OUString> > > > argSeq13(1);
1058     argSeq13[0] = Sequence<TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>,OUString> > >(1);
1059     argSeq13[0][0] = TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>,OUString> >(
1060         TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>,OUString>(
1061             TestPolyStruct2<sal_Unicode,Any>('X', Any(true)), OUString(RTL_CONSTASCII_USTRINGPARAM("test"))));
1062     Sequence<Sequence<TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > > > > argSeq14(1);
1063     argSeq14[0] = Sequence<TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > > >(1);
1064     argSeq14[0][0] = TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > >(
1065         OUString(RTL_CONSTASCII_USTRINGPARAM("test")), TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> >(
1066             'X', TestPolyStruct<Any>(Any(true))));
1067     Sequence<Sequence<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>, TestPolyStruct<sal_Unicode> > > > argSeq15(1);
1068     argSeq15[0] = Sequence<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>, TestPolyStruct<sal_Unicode> > >(1);
1069     argSeq15[0][0] = TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>, TestPolyStruct<sal_Unicode> >(
1070         TestPolyStruct2<sal_Unicode,Any>('X',Any(true)), TestPolyStruct<sal_Unicode>('X'));
1071 
1072     Constructors2::create1(
1073         context,
1074         TestPolyStruct<Type>(cppu::UnoType<sal_Int32>::get()),
1075         TestPolyStruct<Any>(Any(true)),
1076         TestPolyStruct<sal_Bool>(true),
1077         TestPolyStruct<sal_Int8>(SAL_MIN_INT8),
1078         TestPolyStruct<sal_Int16>(SAL_MIN_INT16),
1079         TestPolyStruct<sal_Int32>(SAL_MIN_INT32),
1080         TestPolyStruct<sal_Int64>(SAL_MIN_INT64),
1081         TestPolyStruct<sal_Unicode>('X'),
1082         TestPolyStruct<OUString>(OUString(RTL_CONSTASCII_USTRINGPARAM("test"))),
1083         TestPolyStruct<float>(0.123f),
1084         TestPolyStruct<double>(0.456),
1085         TestPolyStruct<Reference<XInterface> >(static_cast<XBridgeTest2*>(this)),
1086         TestPolyStruct<Reference<XComponent> >(static_cast<XComponent*>(new Dummy())),
1087         TestPolyStruct<TestEnum>(TestEnum_TWO),
1088         TestPolyStruct<TestPolyStruct2<sal_Unicode, Any> >(
1089             TestPolyStruct2<sal_Unicode, Any>('X', Any(true))),
1090         TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString> > (
1091             TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString>(
1092                 TestPolyStruct2<sal_Unicode, Any>('X', Any(true)), OUString(RTL_CONSTASCII_USTRINGPARAM("test")))),
1093         TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode,TestPolyStruct<Any> > >(
1094             OUString(RTL_CONSTASCII_USTRINGPARAM("test")),
1095             TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> >('X', TestPolyStruct<Any>(Any(true)))),
1096         TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>, TestPolyStruct<sal_Unicode> >(
1097             TestPolyStruct2<sal_Unicode, Any>('X', Any(true)),
1098             TestPolyStruct<sal_Unicode>('X')),
1099         TestPolyStruct<Sequence<Type> >(argSeq1),
1100         TestPolyStruct<Sequence<Any> >(arg27),
1101         TestPolyStruct<Sequence<sal_Bool> >(arg14),
1102         TestPolyStruct<Sequence<sal_Int8> >(arg15),
1103         TestPolyStruct<Sequence<sal_Int16> >(arg16),
1104         TestPolyStruct<Sequence<sal_Int32> >(arg18),
1105         TestPolyStruct<Sequence<sal_Int64> >(arg20),
1106         TestPolyStruct<Sequence<sal_Unicode> >(arg24),
1107         TestPolyStruct<Sequence<OUString> >(arg25),
1108         TestPolyStruct<Sequence<float> >(arg22),
1109         TestPolyStruct<Sequence<double> >(arg23),
1110         TestPolyStruct<Sequence<Reference<XInterface> > >(argSeq2),
1111         TestPolyStruct<Sequence<Reference<XComponent> > >(argSeq2a),
1112         TestPolyStruct<Sequence<TestEnum> >(arg30),
1113         TestPolyStruct<Sequence<TestPolyStruct2<sal_Unicode, Sequence<Any> > > >(argSeq3),
1114         TestPolyStruct<Sequence<TestPolyStruct2<TestPolyStruct<sal_Unicode>, Sequence<Any> > > > (argSeq4),
1115         TestPolyStruct<Sequence<Sequence<sal_Int32> > >(argSeq5),
1116         argSeq6,
1117         argSeq7,
1118         argSeq8,
1119         argSeq9,
1120         argSeq10,
1121         argSeq11,
1122         argSeq12,
1123         argSeq13,
1124         argSeq14,
1125         argSeq15);
1126 }
1127 
getCurrentContextChecker()1128 Reference< XCurrentContextChecker > Test_Impl::getCurrentContextChecker()
1129     throw (RuntimeException)
1130 {
1131     return new testtools::bridgetest::CurrentContextChecker;
1132 }
1133 
1134 // XServiceInfo
1135 //__________________________________________________________________________________________________
getImplementationName()1136 OUString Test_Impl::getImplementationName()
1137     throw (RuntimeException)
1138 {
1139     return OUString( RTL_CONSTASCII_USTRINGPARAM(IMPLNAME) );
1140 }
1141 //__________________________________________________________________________________________________
supportsService(const OUString & rServiceName)1142 sal_Bool Test_Impl::supportsService( const OUString & rServiceName )
1143     throw (RuntimeException)
1144 {
1145     const Sequence< OUString > & rSNL = getSupportedServiceNames();
1146     const OUString * pArray = rSNL.getConstArray();
1147     for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
1148     {
1149         if (pArray[nPos] == rServiceName)
1150             return sal_True;
1151     }
1152     return sal_False;
1153 }
1154 //__________________________________________________________________________________________________
getSupportedServiceNames()1155 Sequence< OUString > Test_Impl::getSupportedServiceNames()
1156     throw (RuntimeException)
1157 {
1158     return bridge_object::getSupportedServiceNames();
1159 }
1160 
1161 // ...
1162 
1163 //==================================================================================================
Test_Impl_create(const Reference<XMultiServiceFactory> &)1164 static Reference< XInterface > SAL_CALL Test_Impl_create( const Reference< XMultiServiceFactory > & )
1165 {
1166     return Reference< XInterface >( (XBridgeTest *)new Test_Impl() );
1167 }
1168 
1169 }
1170 
1171 extern "C"
1172 {
1173 //==================================================================================================
component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName,uno_Environment **)1174 void SAL_CALL component_getImplementationEnvironment(
1175     const sal_Char ** ppEnvTypeName, uno_Environment ** )
1176 {
1177     *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
1178 }
1179 //==================================================================================================
component_getFactory(const sal_Char * pImplName,void * pServiceManager,void *)1180 void * SAL_CALL component_getFactory(
1181     const sal_Char * pImplName, void * pServiceManager, void * )
1182 {
1183     void * pRet = 0;
1184 
1185     if (pServiceManager && rtl_str_compare( pImplName, IMPLNAME ) == 0)
1186     {
1187         Reference< XSingleServiceFactory > xFactory( createSingleFactory(
1188             reinterpret_cast< XMultiServiceFactory * >( pServiceManager ),
1189             OUString( RTL_CONSTASCII_USTRINGPARAM(IMPLNAME) ),
1190             bridge_object::Test_Impl_create,
1191             bridge_object::getSupportedServiceNames() ) );
1192 
1193         if (xFactory.is())
1194         {
1195             xFactory->acquire();
1196             pRet = xFactory.get();
1197         }
1198     }
1199 
1200     return pRet;
1201 }
1202 }
1203 
1204