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