1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski using System;
25*b1cdbd2cSJim Jagielski using System.Diagnostics;
26*b1cdbd2cSJim Jagielski using System.Threading;
27*b1cdbd2cSJim Jagielski using System.Runtime.CompilerServices;
28*b1cdbd2cSJim Jagielski using uno;
29*b1cdbd2cSJim Jagielski using uno.util;
30*b1cdbd2cSJim Jagielski using unoidl.com.sun.star.uno;
31*b1cdbd2cSJim Jagielski using unoidl.com.sun.star.lang;
32*b1cdbd2cSJim Jagielski using unoidl.test.testtools.bridgetest;
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski namespace cs_testobj
35*b1cdbd2cSJim Jagielski {
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski class CheckFailed: System.Exception {
CheckFailed(string message)38*b1cdbd2cSJim Jagielski     public CheckFailed(string message): base(message) {}
39*b1cdbd2cSJim Jagielski }
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski public class BridgeTestObject : WeakBase, XRecursiveCall, XBridgeTest2
42*b1cdbd2cSJim Jagielski {
43*b1cdbd2cSJim Jagielski     private XComponentContext m_xContext;
44*b1cdbd2cSJim Jagielski 
BridgeTestObject( XComponentContext xContext )45*b1cdbd2cSJim Jagielski     public BridgeTestObject( XComponentContext xContext )
46*b1cdbd2cSJim Jagielski     {
47*b1cdbd2cSJim Jagielski         m_xContext = xContext;
48*b1cdbd2cSJim Jagielski     }
BridgeTestObject()49*b1cdbd2cSJim Jagielski     public BridgeTestObject()
50*b1cdbd2cSJim Jagielski     {
51*b1cdbd2cSJim Jagielski     }
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski     private bool  _bool;
54*b1cdbd2cSJim Jagielski     private char     _char;
55*b1cdbd2cSJim Jagielski     private byte     _byte;
56*b1cdbd2cSJim Jagielski     private short    _short;
57*b1cdbd2cSJim Jagielski     private ushort    _ushort;
58*b1cdbd2cSJim Jagielski     private int      _long;
59*b1cdbd2cSJim Jagielski     private uint      _ulong;
60*b1cdbd2cSJim Jagielski     private long     _hyper;
61*b1cdbd2cSJim Jagielski     private ulong     _uhyper;
62*b1cdbd2cSJim Jagielski     private float    _float;
63*b1cdbd2cSJim Jagielski     private double   _double;
64*b1cdbd2cSJim Jagielski     private String   _string;
65*b1cdbd2cSJim Jagielski     private Object   _xInterface;
66*b1cdbd2cSJim Jagielski     private Any   _any;
67*b1cdbd2cSJim Jagielski     private TestEnum _testEnum = TestEnum.TEST;
68*b1cdbd2cSJim Jagielski     private TestElement[] _testElements = new TestElement[0];
69*b1cdbd2cSJim Jagielski     private TestDataElements _testDataElements = new TestDataElements();
70*b1cdbd2cSJim Jagielski     private int     _nLastCallId = 0;
71*b1cdbd2cSJim Jagielski     private bool _bFirstCall = true;
72*b1cdbd2cSJim Jagielski     private bool _bSequenceOfCallTestPassed = true;
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski     private bool[] _arBool;
75*b1cdbd2cSJim Jagielski     private char[] _arChar;
76*b1cdbd2cSJim Jagielski     private byte[] _arByte;
77*b1cdbd2cSJim Jagielski     private short[]_arShort;
78*b1cdbd2cSJim Jagielski     private int[] _arLong;
79*b1cdbd2cSJim Jagielski     private long[] _arHyper;
80*b1cdbd2cSJim Jagielski     private UInt16[] _arUShort;
81*b1cdbd2cSJim Jagielski     private UInt32[] _arULong;
82*b1cdbd2cSJim Jagielski     private UInt64[] _arUHyper;
83*b1cdbd2cSJim Jagielski     private string[] _arString;
84*b1cdbd2cSJim Jagielski     private float[] _arFloat;
85*b1cdbd2cSJim Jagielski     private double[] _arDouble;
86*b1cdbd2cSJim Jagielski     private TestEnum[] _arEnum;
87*b1cdbd2cSJim Jagielski     private Object[] _arObject;
88*b1cdbd2cSJim Jagielski     private int[][] _arLong2;
89*b1cdbd2cSJim Jagielski     private int[][][] _arLong3;
90*b1cdbd2cSJim Jagielski     private Any[] _arAny;
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski //    private int _raiseAttr1;
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski 
setValues( bool bBool, char cChar, byte nByte, short nShort, ushort nUShort, int nLong, uint nULong, long nHyper, ulong nUHyper, float fFloat, double fDouble, TestEnum testEnum, String str, Object xInterface, Any any, TestElement [] testElements, TestDataElements testDataElements )95*b1cdbd2cSJim Jagielski     public void setValues(
96*b1cdbd2cSJim Jagielski         bool          bBool,
97*b1cdbd2cSJim Jagielski         char             cChar,
98*b1cdbd2cSJim Jagielski         byte             nByte,
99*b1cdbd2cSJim Jagielski         short            nShort,
100*b1cdbd2cSJim Jagielski         ushort            nUShort,
101*b1cdbd2cSJim Jagielski         int              nLong,
102*b1cdbd2cSJim Jagielski         uint              nULong,
103*b1cdbd2cSJim Jagielski         long             nHyper,
104*b1cdbd2cSJim Jagielski         ulong             nUHyper,
105*b1cdbd2cSJim Jagielski         float            fFloat,
106*b1cdbd2cSJim Jagielski         double           fDouble,
107*b1cdbd2cSJim Jagielski         TestEnum         testEnum,
108*b1cdbd2cSJim Jagielski         String           str,
109*b1cdbd2cSJim Jagielski         Object           xInterface,
110*b1cdbd2cSJim Jagielski         Any              any,
111*b1cdbd2cSJim Jagielski         TestElement []      testElements,
112*b1cdbd2cSJim Jagielski         TestDataElements testDataElements )
113*b1cdbd2cSJim Jagielski     {
114*b1cdbd2cSJim Jagielski          Debug.WriteLine( "##### " + GetType().FullName + ".setValues:" + any );
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski         _bool             = bBool;
117*b1cdbd2cSJim Jagielski         _char             = cChar;
118*b1cdbd2cSJim Jagielski         _byte             = nByte;
119*b1cdbd2cSJim Jagielski         _short            = nShort;
120*b1cdbd2cSJim Jagielski         _ushort           = nUShort;
121*b1cdbd2cSJim Jagielski         _long             = nLong;
122*b1cdbd2cSJim Jagielski         _ulong            = nULong;
123*b1cdbd2cSJim Jagielski         _hyper            = nHyper;
124*b1cdbd2cSJim Jagielski         _uhyper           = nUHyper;
125*b1cdbd2cSJim Jagielski         _float            = fFloat;
126*b1cdbd2cSJim Jagielski         _double           = fDouble;
127*b1cdbd2cSJim Jagielski         _testEnum         = testEnum;
128*b1cdbd2cSJim Jagielski         _string           = str;
129*b1cdbd2cSJim Jagielski         _xInterface       = xInterface;
130*b1cdbd2cSJim Jagielski         _any              = any;
131*b1cdbd2cSJim Jagielski         _testElements     = testElements;
132*b1cdbd2cSJim Jagielski         _testDataElements = testDataElements;
133*b1cdbd2cSJim Jagielski     }
134*b1cdbd2cSJim Jagielski 
setValues2( ref bool io_bool, ref char io_char, ref byte io_byte, ref short io_short, ref ushort io_ushort, ref int io_long, ref uint io_ulong, ref long io_hyper, ref ulong io_uhyper, ref float io_float, ref double io_double, ref TestEnum io_testEnum, ref String io_string, ref Object io_xInterface, ref Any io_any, ref TestElement[] io_testElements, ref TestDataElements io_testDataElements )135*b1cdbd2cSJim Jagielski     public TestDataElements setValues2(
136*b1cdbd2cSJim Jagielski         /*INOUT*/ref bool          io_bool,
137*b1cdbd2cSJim Jagielski         /*INOUT*/ref char             io_char,
138*b1cdbd2cSJim Jagielski         /*INOUT*/ref byte             io_byte,
139*b1cdbd2cSJim Jagielski         /*INOUT*/ref short            io_short,
140*b1cdbd2cSJim Jagielski         /*INOUT*/ref ushort            io_ushort,
141*b1cdbd2cSJim Jagielski         /*INOUT*/ref int              io_long,
142*b1cdbd2cSJim Jagielski         /*INOUT*/ref uint              io_ulong,
143*b1cdbd2cSJim Jagielski         /*INOUT*/ref long             io_hyper,
144*b1cdbd2cSJim Jagielski         /*INOUT*/ref ulong             io_uhyper,
145*b1cdbd2cSJim Jagielski         /*INOUT*/ref float            io_float,
146*b1cdbd2cSJim Jagielski         /*INOUT*/ref double           io_double,
147*b1cdbd2cSJim Jagielski         /*INOUT*/ref TestEnum         io_testEnum,
148*b1cdbd2cSJim Jagielski         /*INOUT*/ref String           io_string,
149*b1cdbd2cSJim Jagielski         /*INOUT*/ref Object           io_xInterface,
150*b1cdbd2cSJim Jagielski         /*INOUT*/ref Any           io_any,
151*b1cdbd2cSJim Jagielski         /*INOUT*/ref TestElement[]    io_testElements,
152*b1cdbd2cSJim Jagielski         /*INOUT*/ref TestDataElements io_testDataElements )
153*b1cdbd2cSJim Jagielski     {
154*b1cdbd2cSJim Jagielski         Debug.WriteLine( "##### " + GetType().FullName + ".setValues2:" + io_any );
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski         _bool             = io_bool;
157*b1cdbd2cSJim Jagielski         _char             = io_char;
158*b1cdbd2cSJim Jagielski         _byte             = io_byte;
159*b1cdbd2cSJim Jagielski         _short            = io_short;
160*b1cdbd2cSJim Jagielski         _ushort           = io_ushort;
161*b1cdbd2cSJim Jagielski         _long             = io_long;
162*b1cdbd2cSJim Jagielski         _ulong            = io_ulong;
163*b1cdbd2cSJim Jagielski         _hyper            = io_hyper;
164*b1cdbd2cSJim Jagielski         _uhyper           = io_uhyper;
165*b1cdbd2cSJim Jagielski         _float            = io_float;
166*b1cdbd2cSJim Jagielski         _double           = io_double;
167*b1cdbd2cSJim Jagielski         _testEnum         = io_testEnum;
168*b1cdbd2cSJim Jagielski         _string           = io_string;
169*b1cdbd2cSJim Jagielski         _xInterface       = io_xInterface;
170*b1cdbd2cSJim Jagielski         _any              = io_any;
171*b1cdbd2cSJim Jagielski         _testElements     = (TestElement[]) io_testElements.Clone();
172*b1cdbd2cSJim Jagielski         _testDataElements = io_testDataElements;
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski         TestElement temp = io_testElements[ 0 ];
175*b1cdbd2cSJim Jagielski         io_testElements[ 0 ] = io_testElements[ 1 ];
176*b1cdbd2cSJim Jagielski         io_testElements[ 1 ] = temp;
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski         return _testDataElements;
179*b1cdbd2cSJim Jagielski     }
180*b1cdbd2cSJim Jagielski 
getValues( out bool o_bool, out char o_char, out byte o_byte, out short o_short, out ushort o_ushort, out int o_long, out uint o_ulong, out long o_hyper, out ulong o_uhyper, out float o_float, out double o_double, out TestEnum o_testEnum, out String o_string, out Object o_xInterface, out Any o_any, out TestElement[] o_testElements, out TestDataElements o_testDataElements )181*b1cdbd2cSJim Jagielski     public TestDataElements getValues(
182*b1cdbd2cSJim Jagielski         /*OUT*/out bool          o_bool,
183*b1cdbd2cSJim Jagielski         /*OUT*/out char             o_char,
184*b1cdbd2cSJim Jagielski         /*OUT*/out byte             o_byte,
185*b1cdbd2cSJim Jagielski         /*OUT*/out short            o_short,
186*b1cdbd2cSJim Jagielski         /*OUT*/out ushort            o_ushort,
187*b1cdbd2cSJim Jagielski         /*OUT*/out int              o_long,
188*b1cdbd2cSJim Jagielski         /*OUT*/out uint              o_ulong,
189*b1cdbd2cSJim Jagielski         /*OUT*/out long             o_hyper,
190*b1cdbd2cSJim Jagielski         /*OUT*/out ulong             o_uhyper,
191*b1cdbd2cSJim Jagielski         /*OUT*/out float            o_float,
192*b1cdbd2cSJim Jagielski         /*OUT*/out double           o_double,
193*b1cdbd2cSJim Jagielski         /*OUT*/out TestEnum         o_testEnum,
194*b1cdbd2cSJim Jagielski         /*OUT*/out String           o_string,
195*b1cdbd2cSJim Jagielski         /*OUT*/out Object           o_xInterface,
196*b1cdbd2cSJim Jagielski         /*OUT*/out Any           o_any,
197*b1cdbd2cSJim Jagielski         /*OUT*/out TestElement[]    o_testElements,
198*b1cdbd2cSJim Jagielski         /*OUT*/out TestDataElements o_testDataElements )
199*b1cdbd2cSJim Jagielski     {
200*b1cdbd2cSJim Jagielski         Debug.WriteLine( "##### " + GetType().FullName + ".getValues" );
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski         o_bool             = _bool;
203*b1cdbd2cSJim Jagielski         o_char             = _char;
204*b1cdbd2cSJim Jagielski         o_byte             = _byte;
205*b1cdbd2cSJim Jagielski         o_short            = _short;
206*b1cdbd2cSJim Jagielski         o_ushort           = _ushort;
207*b1cdbd2cSJim Jagielski         o_long             = _long;
208*b1cdbd2cSJim Jagielski         o_ulong            = _ulong;
209*b1cdbd2cSJim Jagielski         o_hyper            = _hyper;
210*b1cdbd2cSJim Jagielski         o_uhyper           = _uhyper;
211*b1cdbd2cSJim Jagielski         o_float            = _float;
212*b1cdbd2cSJim Jagielski         o_double           = _double;
213*b1cdbd2cSJim Jagielski         o_testEnum         = _testEnum;
214*b1cdbd2cSJim Jagielski         o_string           = _string;
215*b1cdbd2cSJim Jagielski         o_xInterface       = _xInterface;
216*b1cdbd2cSJim Jagielski         o_any              = _any;
217*b1cdbd2cSJim Jagielski         o_testElements     = _testElements;
218*b1cdbd2cSJim Jagielski         o_testDataElements = _testDataElements;
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski         return _testDataElements;
221*b1cdbd2cSJim Jagielski     }
222*b1cdbd2cSJim Jagielski 
echoSmallStruct( SmallStruct arg)223*b1cdbd2cSJim Jagielski     public SmallStruct echoSmallStruct(/*[in]*/SmallStruct arg)
224*b1cdbd2cSJim Jagielski     {
225*b1cdbd2cSJim Jagielski         return arg;
226*b1cdbd2cSJim Jagielski     }
227*b1cdbd2cSJim Jagielski 
echoMediumStruct( MediumStruct arg)228*b1cdbd2cSJim Jagielski     public MediumStruct echoMediumStruct(/*[in]*/MediumStruct arg)
229*b1cdbd2cSJim Jagielski     {
230*b1cdbd2cSJim Jagielski         return arg;
231*b1cdbd2cSJim Jagielski     }
232*b1cdbd2cSJim Jagielski 
echoBigStruct( BigStruct arg)233*b1cdbd2cSJim Jagielski     public BigStruct echoBigStruct(/*[in]*/BigStruct arg)
234*b1cdbd2cSJim Jagielski     {
235*b1cdbd2cSJim Jagielski         return arg;
236*b1cdbd2cSJim Jagielski     }
237*b1cdbd2cSJim Jagielski 
echoAllFloats( AllFloats arg)238*b1cdbd2cSJim Jagielski     public AllFloats echoAllFloats(/*[in]*/AllFloats arg)
239*b1cdbd2cSJim Jagielski     {
240*b1cdbd2cSJim Jagielski         return arg;
241*b1cdbd2cSJim Jagielski     }
242*b1cdbd2cSJim Jagielski 
testPPCAlignment( long l1, long l2, int i1, long l3, int i2 )243*b1cdbd2cSJim Jagielski     public int testPPCAlignment( long l1, long l2, int i1, long l3, int i2 )
244*b1cdbd2cSJim Jagielski     {
245*b1cdbd2cSJim Jagielski         return i2;
246*b1cdbd2cSJim Jagielski     }
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski     // Attributes
249*b1cdbd2cSJim Jagielski     public bool Bool
250*b1cdbd2cSJim Jagielski     {
251*b1cdbd2cSJim Jagielski         get { return _bool; }
252*b1cdbd2cSJim Jagielski         set { _bool = value; }
253*b1cdbd2cSJim Jagielski     }
254*b1cdbd2cSJim Jagielski     public byte Byte
255*b1cdbd2cSJim Jagielski     {
256*b1cdbd2cSJim Jagielski         get { return _byte; }
257*b1cdbd2cSJim Jagielski         set { _byte = value; }
258*b1cdbd2cSJim Jagielski     }
259*b1cdbd2cSJim Jagielski     public char Char
260*b1cdbd2cSJim Jagielski     {
261*b1cdbd2cSJim Jagielski         get { return _char; }
262*b1cdbd2cSJim Jagielski         set { _char = value; }
263*b1cdbd2cSJim Jagielski     }
264*b1cdbd2cSJim Jagielski     public short Short
265*b1cdbd2cSJim Jagielski     {
266*b1cdbd2cSJim Jagielski         get { return _short; }
267*b1cdbd2cSJim Jagielski         set { _short = value; }
268*b1cdbd2cSJim Jagielski     }
269*b1cdbd2cSJim Jagielski     public ushort UShort
270*b1cdbd2cSJim Jagielski     {
271*b1cdbd2cSJim Jagielski         get { return _ushort; }
272*b1cdbd2cSJim Jagielski         set { _ushort = value; }
273*b1cdbd2cSJim Jagielski     }
274*b1cdbd2cSJim Jagielski     public int Long
275*b1cdbd2cSJim Jagielski     {
276*b1cdbd2cSJim Jagielski         get { return _long; }
277*b1cdbd2cSJim Jagielski         set { _long = value; }
278*b1cdbd2cSJim Jagielski     }
279*b1cdbd2cSJim Jagielski     public uint ULong
280*b1cdbd2cSJim Jagielski     {
281*b1cdbd2cSJim Jagielski         get { return _ulong; }
282*b1cdbd2cSJim Jagielski         set { _ulong = value; }
283*b1cdbd2cSJim Jagielski     }
284*b1cdbd2cSJim Jagielski     public long Hyper
285*b1cdbd2cSJim Jagielski     {
286*b1cdbd2cSJim Jagielski         get { return _hyper; }
287*b1cdbd2cSJim Jagielski         set { _hyper = value; }
288*b1cdbd2cSJim Jagielski     }
289*b1cdbd2cSJim Jagielski     public ulong UHyper
290*b1cdbd2cSJim Jagielski     {
291*b1cdbd2cSJim Jagielski         get { return _uhyper; }
292*b1cdbd2cSJim Jagielski         set { _uhyper = value; }
293*b1cdbd2cSJim Jagielski     }
294*b1cdbd2cSJim Jagielski     public float Float
295*b1cdbd2cSJim Jagielski     {
296*b1cdbd2cSJim Jagielski         get { return _float; }
297*b1cdbd2cSJim Jagielski         set { _float = value; }
298*b1cdbd2cSJim Jagielski     }
299*b1cdbd2cSJim Jagielski     public double Double
300*b1cdbd2cSJim Jagielski     {
301*b1cdbd2cSJim Jagielski         get { return _double; }
302*b1cdbd2cSJim Jagielski         set { _double = value; }
303*b1cdbd2cSJim Jagielski     }
304*b1cdbd2cSJim Jagielski     public TestEnum Enum
305*b1cdbd2cSJim Jagielski     {
306*b1cdbd2cSJim Jagielski         get { return _testEnum; }
307*b1cdbd2cSJim Jagielski         set { _testEnum = value; }
308*b1cdbd2cSJim Jagielski     }
309*b1cdbd2cSJim Jagielski     public String String
310*b1cdbd2cSJim Jagielski     {
311*b1cdbd2cSJim Jagielski         get { return _string; }
312*b1cdbd2cSJim Jagielski         set { _string = value; }
313*b1cdbd2cSJim Jagielski     }
314*b1cdbd2cSJim Jagielski     public Object Interface
315*b1cdbd2cSJim Jagielski     {
316*b1cdbd2cSJim Jagielski         get { return _xInterface; }
317*b1cdbd2cSJim Jagielski         set { _xInterface = value; }
318*b1cdbd2cSJim Jagielski     }
319*b1cdbd2cSJim Jagielski     public uno.Any Any
320*b1cdbd2cSJim Jagielski     {
321*b1cdbd2cSJim Jagielski         get {
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski             Debug.WriteLine( "##### " + GetType().FullName + ".Any" );
324*b1cdbd2cSJim Jagielski             return _any;
325*b1cdbd2cSJim Jagielski         }
326*b1cdbd2cSJim Jagielski         set {
327*b1cdbd2cSJim Jagielski             Debug.WriteLine( "##### " + GetType().FullName + ".Any:" + value );
328*b1cdbd2cSJim Jagielski             _any = value;
329*b1cdbd2cSJim Jagielski         }
330*b1cdbd2cSJim Jagielski     }
331*b1cdbd2cSJim Jagielski     public TestElement [] Sequence
332*b1cdbd2cSJim Jagielski     {
333*b1cdbd2cSJim Jagielski         get { return _testElements; }
334*b1cdbd2cSJim Jagielski         set { _testElements = value; }
335*b1cdbd2cSJim Jagielski     }
336*b1cdbd2cSJim Jagielski     public TestDataElements Struct
337*b1cdbd2cSJim Jagielski     {
338*b1cdbd2cSJim Jagielski         get { return _testDataElements; }
339*b1cdbd2cSJim Jagielski         set { _testDataElements = value; }
340*b1cdbd2cSJim Jagielski     }
transportAny(Any value)341*b1cdbd2cSJim Jagielski     public Any transportAny(Any value)
342*b1cdbd2cSJim Jagielski     {
343*b1cdbd2cSJim Jagielski         return value;
344*b1cdbd2cSJim Jagielski     }
call(int nCallId , int nWaitMUSEC)345*b1cdbd2cSJim Jagielski     public void call(int nCallId , int nWaitMUSEC)
346*b1cdbd2cSJim Jagielski     {
347*b1cdbd2cSJim Jagielski         Thread.Sleep(nWaitMUSEC / 10000);
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski         if(_bFirstCall)
350*b1cdbd2cSJim Jagielski             _bFirstCall = false;
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski         else
353*b1cdbd2cSJim Jagielski             _bSequenceOfCallTestPassed = _bSequenceOfCallTestPassed && (nCallId > _nLastCallId);
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski         _nLastCallId = nCallId;
356*b1cdbd2cSJim Jagielski     }
callOneway( int nCallId , int nWaitMUSEC )357*b1cdbd2cSJim Jagielski     public void callOneway( int nCallId , int nWaitMUSEC )
358*b1cdbd2cSJim Jagielski     {
359*b1cdbd2cSJim Jagielski         Thread.Sleep(nWaitMUSEC / 10000);
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski         _bSequenceOfCallTestPassed = _bSequenceOfCallTestPassed && (nCallId > _nLastCallId);
362*b1cdbd2cSJim Jagielski         _nLastCallId = nCallId;
363*b1cdbd2cSJim Jagielski     }
sequenceOfCallTestPassed()364*b1cdbd2cSJim Jagielski     public bool sequenceOfCallTestPassed()
365*b1cdbd2cSJim Jagielski     {
366*b1cdbd2cSJim Jagielski         return _bSequenceOfCallTestPassed;
367*b1cdbd2cSJim Jagielski     }
368*b1cdbd2cSJim Jagielski     [MethodImpl( MethodImplOptions.Synchronized )]
callRecursivly( XRecursiveCall xCall, int nToCall )369*b1cdbd2cSJim Jagielski     public void callRecursivly( XRecursiveCall xCall,   int nToCall )
370*b1cdbd2cSJim Jagielski     {
371*b1cdbd2cSJim Jagielski         lock (this)
372*b1cdbd2cSJim Jagielski         {
373*b1cdbd2cSJim Jagielski             if(nToCall != 0)
374*b1cdbd2cSJim Jagielski             {
375*b1cdbd2cSJim Jagielski                 nToCall --;
376*b1cdbd2cSJim Jagielski                 xCall.callRecursivly(this , nToCall);
377*b1cdbd2cSJim Jagielski             }
378*b1cdbd2cSJim Jagielski         }
379*b1cdbd2cSJim Jagielski     }
380*b1cdbd2cSJim Jagielski     [MethodImpl( MethodImplOptions.Synchronized )]
startRecursiveCall( XRecursiveCall xCall, int nToCall )381*b1cdbd2cSJim Jagielski     public void startRecursiveCall( XRecursiveCall xCall, int nToCall )
382*b1cdbd2cSJim Jagielski     {
383*b1cdbd2cSJim Jagielski         lock (this)
384*b1cdbd2cSJim Jagielski         {
385*b1cdbd2cSJim Jagielski             if(nToCall != 0)
386*b1cdbd2cSJim Jagielski             {
387*b1cdbd2cSJim Jagielski                 nToCall --;
388*b1cdbd2cSJim Jagielski                 xCall.callRecursivly( this , nToCall );
389*b1cdbd2cSJim Jagielski             }
390*b1cdbd2cSJim Jagielski         }
391*b1cdbd2cSJim Jagielski     }
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski     // XBridgeTest
raiseException( short nArgumentPos, String rMsg, Object xContext )394*b1cdbd2cSJim Jagielski     public TestDataElements raiseException(
395*b1cdbd2cSJim Jagielski         short nArgumentPos, String rMsg, Object xContext )
396*b1cdbd2cSJim Jagielski     {
397*b1cdbd2cSJim Jagielski         throw new IllegalArgumentException(rMsg, xContext, nArgumentPos);
398*b1cdbd2cSJim Jagielski     }
raiseRuntimeExceptionOneway( String rMsg, Object xContext )399*b1cdbd2cSJim Jagielski     public void raiseRuntimeExceptionOneway( String rMsg, Object xContext )
400*b1cdbd2cSJim Jagielski     {
401*b1cdbd2cSJim Jagielski         throw new RuntimeException(rMsg, xContext);
402*b1cdbd2cSJim Jagielski     }
403*b1cdbd2cSJim Jagielski 
dothrow( System.Exception e )404*b1cdbd2cSJim Jagielski     private void dothrow( System.Exception e )
405*b1cdbd2cSJim Jagielski     {
406*b1cdbd2cSJim Jagielski         throw e;
407*b1cdbd2cSJim Jagielski     }
408*b1cdbd2cSJim Jagielski     public int RuntimeException
409*b1cdbd2cSJim Jagielski     {
410*b1cdbd2cSJim Jagielski         get {
411*b1cdbd2cSJim Jagielski             try
412*b1cdbd2cSJim Jagielski             {
413*b1cdbd2cSJim Jagielski                 dothrow( new RuntimeException(_string, _xInterface) );
414*b1cdbd2cSJim Jagielski                 return 0; // dummy
415*b1cdbd2cSJim Jagielski             }
416*b1cdbd2cSJim Jagielski             catch (System.Exception exc)
417*b1cdbd2cSJim Jagielski             {
418*b1cdbd2cSJim Jagielski                 throw exc;
419*b1cdbd2cSJim Jagielski             }
420*b1cdbd2cSJim Jagielski         }
421*b1cdbd2cSJim Jagielski         set { throw new RuntimeException(_string, _xInterface); }
422*b1cdbd2cSJim Jagielski     }
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski     // XBridgeTest2
setDim2(int[][] val)425*b1cdbd2cSJim Jagielski     public int[][] setDim2(int[][] val)
426*b1cdbd2cSJim Jagielski     {
427*b1cdbd2cSJim Jagielski         _arLong2 = val;
428*b1cdbd2cSJim Jagielski         return val;
429*b1cdbd2cSJim Jagielski     }
430*b1cdbd2cSJim Jagielski 
setDim3(int[][][] val)431*b1cdbd2cSJim Jagielski     public int[][][] setDim3(int[][][] val)
432*b1cdbd2cSJim Jagielski     {
433*b1cdbd2cSJim Jagielski         _arLong3 = val;
434*b1cdbd2cSJim Jagielski         return val;
435*b1cdbd2cSJim Jagielski     }
436*b1cdbd2cSJim Jagielski 
setSequenceAny(Any[] val)437*b1cdbd2cSJim Jagielski     public Any[] setSequenceAny(Any[] val)
438*b1cdbd2cSJim Jagielski     {
439*b1cdbd2cSJim Jagielski         _arAny = val;
440*b1cdbd2cSJim Jagielski         return val;
441*b1cdbd2cSJim Jagielski     }
442*b1cdbd2cSJim Jagielski 
setSequenceBool(bool[] val)443*b1cdbd2cSJim Jagielski     public bool[] setSequenceBool(bool[] val)
444*b1cdbd2cSJim Jagielski     {
445*b1cdbd2cSJim Jagielski         _arBool = val;
446*b1cdbd2cSJim Jagielski         return val;
447*b1cdbd2cSJim Jagielski     }
448*b1cdbd2cSJim Jagielski 
setSequenceByte(byte[] val)449*b1cdbd2cSJim Jagielski     public byte[] setSequenceByte(byte[] val)
450*b1cdbd2cSJim Jagielski     {
451*b1cdbd2cSJim Jagielski         _arByte = val;
452*b1cdbd2cSJim Jagielski         return val;
453*b1cdbd2cSJim Jagielski     }
454*b1cdbd2cSJim Jagielski 
setSequenceChar(char[] val)455*b1cdbd2cSJim Jagielski     public char[] setSequenceChar(char[] val)
456*b1cdbd2cSJim Jagielski     {
457*b1cdbd2cSJim Jagielski         _arChar = val;
458*b1cdbd2cSJim Jagielski         return val;
459*b1cdbd2cSJim Jagielski     }
460*b1cdbd2cSJim Jagielski 
setSequenceShort(short[] val)461*b1cdbd2cSJim Jagielski     public short[] setSequenceShort(short[] val)
462*b1cdbd2cSJim Jagielski     {
463*b1cdbd2cSJim Jagielski         _arShort = val;
464*b1cdbd2cSJim Jagielski         return val;
465*b1cdbd2cSJim Jagielski     }
466*b1cdbd2cSJim Jagielski 
setSequenceLong(int[] val)467*b1cdbd2cSJim Jagielski     public int[] setSequenceLong(int[] val)
468*b1cdbd2cSJim Jagielski     {
469*b1cdbd2cSJim Jagielski         _arLong = val;
470*b1cdbd2cSJim Jagielski         return val;
471*b1cdbd2cSJim Jagielski     }
472*b1cdbd2cSJim Jagielski 
setSequenceHyper(long[] val)473*b1cdbd2cSJim Jagielski     public long[] setSequenceHyper(long[] val)
474*b1cdbd2cSJim Jagielski     {
475*b1cdbd2cSJim Jagielski         _arHyper = val;
476*b1cdbd2cSJim Jagielski         return val;
477*b1cdbd2cSJim Jagielski     }
478*b1cdbd2cSJim Jagielski 
setSequenceFloat(float[] val)479*b1cdbd2cSJim Jagielski     public float[] setSequenceFloat(float[] val)
480*b1cdbd2cSJim Jagielski     {
481*b1cdbd2cSJim Jagielski         _arFloat = val;
482*b1cdbd2cSJim Jagielski         return val;
483*b1cdbd2cSJim Jagielski     }
484*b1cdbd2cSJim Jagielski 
setSequenceDouble(double[] val)485*b1cdbd2cSJim Jagielski     public double[] setSequenceDouble(double[] val)
486*b1cdbd2cSJim Jagielski     {
487*b1cdbd2cSJim Jagielski         _arDouble = val;
488*b1cdbd2cSJim Jagielski         return val;
489*b1cdbd2cSJim Jagielski     }
490*b1cdbd2cSJim Jagielski 
setSequenceEnum(TestEnum[] val)491*b1cdbd2cSJim Jagielski     public TestEnum[] setSequenceEnum(TestEnum[] val)
492*b1cdbd2cSJim Jagielski     {
493*b1cdbd2cSJim Jagielski         _arEnum = val;
494*b1cdbd2cSJim Jagielski         return val;
495*b1cdbd2cSJim Jagielski     }
496*b1cdbd2cSJim Jagielski 
setSequenceUShort(UInt16[] val)497*b1cdbd2cSJim Jagielski     public UInt16[] setSequenceUShort(UInt16[] val)
498*b1cdbd2cSJim Jagielski     {
499*b1cdbd2cSJim Jagielski         _arUShort = val;
500*b1cdbd2cSJim Jagielski         return val;
501*b1cdbd2cSJim Jagielski     }
502*b1cdbd2cSJim Jagielski 
setSequenceULong(UInt32[] val)503*b1cdbd2cSJim Jagielski     public UInt32[] setSequenceULong(UInt32[] val)
504*b1cdbd2cSJim Jagielski     {
505*b1cdbd2cSJim Jagielski         _arULong = val;
506*b1cdbd2cSJim Jagielski         return  val;
507*b1cdbd2cSJim Jagielski     }
508*b1cdbd2cSJim Jagielski 
setSequenceUHyper(UInt64[] val)509*b1cdbd2cSJim Jagielski     public UInt64[] setSequenceUHyper(UInt64[] val)
510*b1cdbd2cSJim Jagielski     {
511*b1cdbd2cSJim Jagielski         _arUHyper = val;
512*b1cdbd2cSJim Jagielski         return val;
513*b1cdbd2cSJim Jagielski     }
514*b1cdbd2cSJim Jagielski 
setSequenceXInterface(Object[] val)515*b1cdbd2cSJim Jagielski     public Object[] setSequenceXInterface(Object[] val)
516*b1cdbd2cSJim Jagielski     {
517*b1cdbd2cSJim Jagielski         _arObject = val;
518*b1cdbd2cSJim Jagielski         return val;
519*b1cdbd2cSJim Jagielski     }
520*b1cdbd2cSJim Jagielski 
setSequenceString(string[] val)521*b1cdbd2cSJim Jagielski     public string[] setSequenceString(string[] val)
522*b1cdbd2cSJim Jagielski     {
523*b1cdbd2cSJim Jagielski         _arString = val;
524*b1cdbd2cSJim Jagielski         return val;
525*b1cdbd2cSJim Jagielski     }
526*b1cdbd2cSJim Jagielski 
setSequenceStruct(TestElement[] val)527*b1cdbd2cSJim Jagielski     public TestElement[] setSequenceStruct(TestElement[] val)
528*b1cdbd2cSJim Jagielski     {
529*b1cdbd2cSJim Jagielski         _testElements = val;
530*b1cdbd2cSJim Jagielski         return val;
531*b1cdbd2cSJim Jagielski     }
532*b1cdbd2cSJim Jagielski 
setSequencesInOut(ref bool[] aSeqBoolean, ref char[] aSeqChar, ref byte[] aSeqByte, ref short[] aSeqShort, ref UInt16[] aSeqUShort, ref int[] aSeqLong, ref UInt32[] aSeqULong, ref long[] aSeqHyper, ref UInt64[] aSeqUHyper, ref float[] aSeqFloat, ref double[] aSeqDouble, ref TestEnum[] aSeqTestEnum, ref string[] aSeqString, ref object[] aSeqXInterface, ref Any[] aSeqAny, ref int[][] aSeqDim2, ref int[][][] aSeqDim3)533*b1cdbd2cSJim Jagielski     public void setSequencesInOut(ref bool[] aSeqBoolean,
534*b1cdbd2cSJim Jagielski                                ref char[] aSeqChar,
535*b1cdbd2cSJim Jagielski                                ref byte[] aSeqByte,
536*b1cdbd2cSJim Jagielski                                ref short[] aSeqShort,
537*b1cdbd2cSJim Jagielski                                ref UInt16[] aSeqUShort,
538*b1cdbd2cSJim Jagielski                                ref int[] aSeqLong,
539*b1cdbd2cSJim Jagielski                                ref UInt32[] aSeqULong,
540*b1cdbd2cSJim Jagielski                                ref long[] aSeqHyper,
541*b1cdbd2cSJim Jagielski                                ref UInt64[] aSeqUHyper,
542*b1cdbd2cSJim Jagielski                                ref float[] aSeqFloat,
543*b1cdbd2cSJim Jagielski                                ref double[] aSeqDouble,
544*b1cdbd2cSJim Jagielski                                ref TestEnum[] aSeqTestEnum,
545*b1cdbd2cSJim Jagielski                                ref string[] aSeqString,
546*b1cdbd2cSJim Jagielski                                ref object[] aSeqXInterface,
547*b1cdbd2cSJim Jagielski                                ref Any[] aSeqAny,
548*b1cdbd2cSJim Jagielski                                ref int[][] aSeqDim2,
549*b1cdbd2cSJim Jagielski                                ref int[][][] aSeqDim3)
550*b1cdbd2cSJim Jagielski     {
551*b1cdbd2cSJim Jagielski         _arBool = aSeqBoolean;
552*b1cdbd2cSJim Jagielski         _arChar = aSeqChar;
553*b1cdbd2cSJim Jagielski         _arByte = aSeqByte;
554*b1cdbd2cSJim Jagielski         _arShort = aSeqShort;
555*b1cdbd2cSJim Jagielski         _arUShort = aSeqUShort;
556*b1cdbd2cSJim Jagielski         _arLong = aSeqLong;
557*b1cdbd2cSJim Jagielski         _arULong = aSeqULong;
558*b1cdbd2cSJim Jagielski         _arHyper  = aSeqHyper;
559*b1cdbd2cSJim Jagielski         _arUHyper = aSeqUHyper;
560*b1cdbd2cSJim Jagielski         _arFloat = aSeqFloat;
561*b1cdbd2cSJim Jagielski         _arDouble = aSeqDouble;
562*b1cdbd2cSJim Jagielski         _arEnum = aSeqTestEnum;
563*b1cdbd2cSJim Jagielski         _arString = aSeqString;
564*b1cdbd2cSJim Jagielski         _arObject = aSeqXInterface;
565*b1cdbd2cSJim Jagielski         _arAny = aSeqAny;
566*b1cdbd2cSJim Jagielski         _arLong2 = aSeqDim2;
567*b1cdbd2cSJim Jagielski         _arLong3 = aSeqDim3;
568*b1cdbd2cSJim Jagielski     }
569*b1cdbd2cSJim Jagielski 
setSequencesOut(out bool[] aSeqBoolean, out char[] aSeqChar, out byte[] aSeqByte, out short[] aSeqShort, out UInt16[] aSeqUShort, out int[] aSeqLong, out UInt32[] aSeqULong, out long[] aSeqHyper, out UInt64[] aSeqUHyper, out float[] aSeqFloat, out double[] aSeqDouble, out TestEnum[] aSeqTestEnum, out string[] aSeqString, out object[] aSeqXInterface, out Any[] aSeqAny, out int[][] aSeqDim2, out int[][][] aSeqDim3)570*b1cdbd2cSJim Jagielski     public void setSequencesOut(out bool[] aSeqBoolean,
571*b1cdbd2cSJim Jagielski                                out char[] aSeqChar,
572*b1cdbd2cSJim Jagielski                                out byte[] aSeqByte,
573*b1cdbd2cSJim Jagielski                                out short[] aSeqShort,
574*b1cdbd2cSJim Jagielski                                out UInt16[] aSeqUShort,
575*b1cdbd2cSJim Jagielski                                out int[] aSeqLong,
576*b1cdbd2cSJim Jagielski                                out UInt32[] aSeqULong,
577*b1cdbd2cSJim Jagielski                                out long[] aSeqHyper,
578*b1cdbd2cSJim Jagielski                                out UInt64[] aSeqUHyper,
579*b1cdbd2cSJim Jagielski                                out float[] aSeqFloat,
580*b1cdbd2cSJim Jagielski                                out double[] aSeqDouble,
581*b1cdbd2cSJim Jagielski                                out TestEnum[] aSeqTestEnum,
582*b1cdbd2cSJim Jagielski                                out string[] aSeqString,
583*b1cdbd2cSJim Jagielski                                out object[] aSeqXInterface,
584*b1cdbd2cSJim Jagielski                                out Any[] aSeqAny,
585*b1cdbd2cSJim Jagielski                                out int[][] aSeqDim2,
586*b1cdbd2cSJim Jagielski                                out int[][][] aSeqDim3)
587*b1cdbd2cSJim Jagielski     {
588*b1cdbd2cSJim Jagielski         aSeqBoolean = _arBool;
589*b1cdbd2cSJim Jagielski         aSeqChar = _arChar;
590*b1cdbd2cSJim Jagielski         aSeqByte = _arByte;
591*b1cdbd2cSJim Jagielski         aSeqShort = _arShort;
592*b1cdbd2cSJim Jagielski         aSeqUShort = _arUShort;
593*b1cdbd2cSJim Jagielski         aSeqLong = _arLong;
594*b1cdbd2cSJim Jagielski         aSeqULong = _arULong;
595*b1cdbd2cSJim Jagielski         aSeqHyper = _arHyper;
596*b1cdbd2cSJim Jagielski         aSeqUHyper = _arUHyper;
597*b1cdbd2cSJim Jagielski         aSeqFloat = _arFloat;
598*b1cdbd2cSJim Jagielski         aSeqDouble = _arDouble;
599*b1cdbd2cSJim Jagielski         aSeqTestEnum = _arEnum;
600*b1cdbd2cSJim Jagielski         aSeqString = _arString;
601*b1cdbd2cSJim Jagielski         aSeqXInterface = _arObject;
602*b1cdbd2cSJim Jagielski         aSeqAny = _arAny;
603*b1cdbd2cSJim Jagielski         aSeqDim2 = _arLong2;
604*b1cdbd2cSJim Jagielski         aSeqDim3 = _arLong3;
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski     }
607*b1cdbd2cSJim Jagielski 
608*b1cdbd2cSJim Jagielski     /* Attention: Debugging this code (probably in mixed mode) may lead to exceptions
609*b1cdbd2cSJim Jagielski      * which do not occur when running normally (Visual Studio 2003)
610*b1cdbd2cSJim Jagielski      */
testConstructorsService(XComponentContext context)611*b1cdbd2cSJim Jagielski     public void testConstructorsService(XComponentContext context)
612*b1cdbd2cSJim Jagielski 	{
613*b1cdbd2cSJim Jagielski 		Constructors.create1(context,
614*b1cdbd2cSJim Jagielski 			true,
615*b1cdbd2cSJim Jagielski 			0x80, // -128 in C++,
616*b1cdbd2cSJim Jagielski 			Int16.MinValue,
617*b1cdbd2cSJim Jagielski 			UInt16.MaxValue,
618*b1cdbd2cSJim Jagielski 			Int32.MinValue,
619*b1cdbd2cSJim Jagielski 			UInt32.MaxValue,
620*b1cdbd2cSJim Jagielski 			Int64.MinValue,
621*b1cdbd2cSJim Jagielski 			UInt64.MaxValue,
622*b1cdbd2cSJim Jagielski 			0.123f,
623*b1cdbd2cSJim Jagielski 			0.456,
624*b1cdbd2cSJim Jagielski 			'X',
625*b1cdbd2cSJim Jagielski 			"test",
626*b1cdbd2cSJim Jagielski 			typeof(Any),
627*b1cdbd2cSJim Jagielski 			new Any(true),
628*b1cdbd2cSJim Jagielski 			new bool[] { true },
629*b1cdbd2cSJim Jagielski 			new byte[] { 0x80}, // in C++ the value is compared with SAL_MIN_INT8 which is -128
630*b1cdbd2cSJim Jagielski 			new short[] { Int16.MinValue },
631*b1cdbd2cSJim Jagielski 			new UInt16[] { UInt16.MaxValue },
632*b1cdbd2cSJim Jagielski 			new Int32[] {Int32.MinValue},
633*b1cdbd2cSJim Jagielski 			new UInt32[] { UInt32.MaxValue },
634*b1cdbd2cSJim Jagielski 			new long[] { Int64.MinValue },
635*b1cdbd2cSJim Jagielski 			new UInt64[] { UInt64.MaxValue },
636*b1cdbd2cSJim Jagielski 			new float[] { 0.123f },
637*b1cdbd2cSJim Jagielski 			new double[] { 0.456 },
638*b1cdbd2cSJim Jagielski 			new char[] { 'X' },
639*b1cdbd2cSJim Jagielski 			new string[] { "test" },
640*b1cdbd2cSJim Jagielski 			new Type[] { typeof(Any) },
641*b1cdbd2cSJim Jagielski 			new Any[] { new Any(true) },
642*b1cdbd2cSJim Jagielski 			new bool[][] { new bool[] { true } },
643*b1cdbd2cSJim Jagielski 			new Any[][] { new Any[] { new Any(true) } },
644*b1cdbd2cSJim Jagielski 			new TestEnum[] { TestEnum.TWO },
645*b1cdbd2cSJim Jagielski 			new TestStruct[] { new TestStruct(10) },
646*b1cdbd2cSJim Jagielski 			new TestPolyStruct[] { new TestPolyStruct(true) },
647*b1cdbd2cSJim Jagielski 			new TestPolyStruct[] { new TestPolyStruct(new Any(true)) },
648*b1cdbd2cSJim Jagielski 			new object[] { null },
649*b1cdbd2cSJim Jagielski 			TestEnum.TWO,
650*b1cdbd2cSJim Jagielski 			new TestStruct(10),
651*b1cdbd2cSJim Jagielski 			new TestPolyStruct(true),
652*b1cdbd2cSJim Jagielski 			new TestPolyStruct(new Any(true)),
653*b1cdbd2cSJim Jagielski 			null
654*b1cdbd2cSJim Jagielski 			);
655*b1cdbd2cSJim Jagielski 
656*b1cdbd2cSJim Jagielski 	Constructors.create2(context,
657*b1cdbd2cSJim Jagielski              new Any(true),
658*b1cdbd2cSJim Jagielski              new Any((System.Byte) 0x80),
659*b1cdbd2cSJim Jagielski              new Any(Int16.MinValue),
660*b1cdbd2cSJim Jagielski              new Any(UInt16.MaxValue),
661*b1cdbd2cSJim Jagielski              new Any(Int32.MinValue),
662*b1cdbd2cSJim Jagielski              new Any(UInt32.MaxValue),
663*b1cdbd2cSJim Jagielski              new Any(Int64.MinValue),
664*b1cdbd2cSJim Jagielski              new Any(UInt64.MaxValue),
665*b1cdbd2cSJim Jagielski              new Any(0.123f),
666*b1cdbd2cSJim Jagielski              new Any(0.456),
667*b1cdbd2cSJim Jagielski              new Any('X'),
668*b1cdbd2cSJim Jagielski              new Any("test"),
669*b1cdbd2cSJim Jagielski              new Any(typeof(Any)),
670*b1cdbd2cSJim Jagielski              new Any(true),
671*b1cdbd2cSJim Jagielski              new Any(typeof(bool[]), new bool[] { true }),
672*b1cdbd2cSJim Jagielski              new Any(typeof(byte[]), new byte[] { (System.Byte) 0x80}),
673*b1cdbd2cSJim Jagielski              new Any(typeof(short[]), new short[] { Int16.MinValue }),
674*b1cdbd2cSJim Jagielski              new Any(typeof(UInt16[]), new UInt16[] { UInt16.MaxValue }),
675*b1cdbd2cSJim Jagielski              new Any(typeof(int[]), new int[] { Int32.MinValue }),
676*b1cdbd2cSJim Jagielski              new Any(typeof(UInt32[]), new UInt32[] { UInt32.MaxValue }),
677*b1cdbd2cSJim Jagielski              new Any(typeof(long[]), new long[] { Int64.MinValue }),
678*b1cdbd2cSJim Jagielski              new Any(typeof(UInt64[]), new UInt64[] { UInt64.MaxValue }),
679*b1cdbd2cSJim Jagielski              new Any(typeof(float[]), new float[] { 0.123f }),
680*b1cdbd2cSJim Jagielski              new Any(typeof(double[]), new double[] { 0.456 }),
681*b1cdbd2cSJim Jagielski              new Any(typeof(char[]), new char[] { 'X' }),
682*b1cdbd2cSJim Jagielski              new Any(typeof(string[]), new string[] { "test" }),
683*b1cdbd2cSJim Jagielski              new Any(typeof(Type[]), new Type[] { typeof(Any) }),
684*b1cdbd2cSJim Jagielski              new Any(typeof(Any[]), new Any[] { new Any(true) }),
685*b1cdbd2cSJim Jagielski              new Any(typeof(bool[][]), new bool[][] { new bool[] { true } }),
686*b1cdbd2cSJim Jagielski              new Any(
687*b1cdbd2cSJim Jagielski                  typeof(Any[][]), new Any[][] { new Any[] { new Any(true) } }),
688*b1cdbd2cSJim Jagielski              new Any(typeof(TestEnum[]), new TestEnum[] { TestEnum.TWO }),
689*b1cdbd2cSJim Jagielski              new Any(
690*b1cdbd2cSJim Jagielski                  typeof(TestStruct[]), new TestStruct[] { new TestStruct(10) }),
691*b1cdbd2cSJim Jagielski              new Any(
692*b1cdbd2cSJim Jagielski                  PolymorphicType.GetType(
693*b1cdbd2cSJim Jagielski                      typeof(TestPolyStruct[]),
694*b1cdbd2cSJim Jagielski                      "unoidl.test.testtools.bridgetest.TestPolyStruct<System.Boolean>[]"),
695*b1cdbd2cSJim Jagielski                  new TestPolyStruct[] { new TestPolyStruct(true) }) ,
696*b1cdbd2cSJim Jagielski              new Any(
697*b1cdbd2cSJim Jagielski                  PolymorphicType.GetType(
698*b1cdbd2cSJim Jagielski                      typeof(TestPolyStruct[]),
699*b1cdbd2cSJim Jagielski                      "unoidl.test.testtools.bridgetest.TestPolyStruct<uno.Any>[]"),
700*b1cdbd2cSJim Jagielski                  new TestPolyStruct[] { new TestPolyStruct(new Any(true)) }),
701*b1cdbd2cSJim Jagielski              new Any(typeof(object[])/*TODO*/, new object[] { null }),
702*b1cdbd2cSJim Jagielski              new Any(typeof(TestEnum), TestEnum.TWO),
703*b1cdbd2cSJim Jagielski              new Any(typeof(TestStruct), new TestStruct(10)),
704*b1cdbd2cSJim Jagielski              new Any(
705*b1cdbd2cSJim Jagielski                  PolymorphicType.GetType(
706*b1cdbd2cSJim Jagielski                      typeof(TestPolyStruct),
707*b1cdbd2cSJim Jagielski                      "unoidl.test.testtools.bridgetest.TestPolyStruct<System.Boolean>"),
708*b1cdbd2cSJim Jagielski                  new TestPolyStruct(true)),
709*b1cdbd2cSJim Jagielski              new Any(
710*b1cdbd2cSJim Jagielski                  PolymorphicType.GetType(
711*b1cdbd2cSJim Jagielski                      typeof(TestPolyStruct),
712*b1cdbd2cSJim Jagielski                      "unoidl.test.testtools.bridgetest.TestPolyStruct<uno.Any>"),
713*b1cdbd2cSJim Jagielski                  new TestPolyStruct(new Any(true))),
714*b1cdbd2cSJim Jagielski              new Any(typeof(object), null)
715*b1cdbd2cSJim Jagielski 		);
716*b1cdbd2cSJim Jagielski 
717*b1cdbd2cSJim Jagielski 
718*b1cdbd2cSJim Jagielski     XMultiBase1 xMulti = Constructors2.create1(
719*b1cdbd2cSJim Jagielski             context,
720*b1cdbd2cSJim Jagielski             new TestPolyStruct(typeof(int)),
721*b1cdbd2cSJim Jagielski             new TestPolyStruct(new Any(true)),
722*b1cdbd2cSJim Jagielski             new TestPolyStruct(true),
723*b1cdbd2cSJim Jagielski             new TestPolyStruct((Byte) 0x80),
724*b1cdbd2cSJim Jagielski             new TestPolyStruct(Int16.MinValue),
725*b1cdbd2cSJim Jagielski             new TestPolyStruct(Int32.MinValue),
726*b1cdbd2cSJim Jagielski             new TestPolyStruct(Int64.MinValue),
727*b1cdbd2cSJim Jagielski             new TestPolyStruct('X'),
728*b1cdbd2cSJim Jagielski             new TestPolyStruct("test"),
729*b1cdbd2cSJim Jagielski             new TestPolyStruct(0.123f),
730*b1cdbd2cSJim Jagielski             new TestPolyStruct(0.456d),
731*b1cdbd2cSJim Jagielski             new TestPolyStruct(new object()),
732*b1cdbd2cSJim Jagielski             new TestPolyStruct(new uno.util.WeakComponentBase()),
733*b1cdbd2cSJim Jagielski             new TestPolyStruct(TestEnum.TWO),
734*b1cdbd2cSJim Jagielski             new TestPolyStruct(new TestPolyStruct2('X', new Any(true))),
735*b1cdbd2cSJim Jagielski             new TestPolyStruct(new TestPolyStruct2(new TestPolyStruct2('X', new Any(true)), "test")),
736*b1cdbd2cSJim Jagielski             new TestPolyStruct2("test", new TestPolyStruct2('X', new TestPolyStruct(new Any(true)))),
737*b1cdbd2cSJim Jagielski             new TestPolyStruct2( new TestPolyStruct2('X', new Any(true)), new TestPolyStruct('X')),
738*b1cdbd2cSJim Jagielski             new TestPolyStruct(new Type[] { typeof(int)}),
739*b1cdbd2cSJim Jagielski             new TestPolyStruct(new Any[] { new Any(true) }),
740*b1cdbd2cSJim Jagielski             new TestPolyStruct(new bool[] {true}),
741*b1cdbd2cSJim Jagielski             new TestPolyStruct(new byte[] {0x80}),
742*b1cdbd2cSJim Jagielski             new TestPolyStruct(new short[] {Int16.MinValue}),
743*b1cdbd2cSJim Jagielski             new TestPolyStruct(new int[] {Int32.MinValue}),
744*b1cdbd2cSJim Jagielski             new TestPolyStruct(new long[] {Int64.MinValue}),
745*b1cdbd2cSJim Jagielski             new TestPolyStruct(new char[] {'X'}),
746*b1cdbd2cSJim Jagielski             new TestPolyStruct(new string[] {"test"}),
747*b1cdbd2cSJim Jagielski             new TestPolyStruct(new float[] {0.123f}),
748*b1cdbd2cSJim Jagielski             new TestPolyStruct(new double[] {0.456d}),
749*b1cdbd2cSJim Jagielski             new TestPolyStruct(new object[] {new object()}),
750*b1cdbd2cSJim Jagielski             new TestPolyStruct(new unoidl.com.sun.star.lang.XComponent[] {new uno.util.WeakComponentBase()}),
751*b1cdbd2cSJim Jagielski             new TestPolyStruct(new TestEnum[] {TestEnum.TWO}),
752*b1cdbd2cSJim Jagielski             new TestPolyStruct(new TestPolyStruct2[] {new TestPolyStruct2('X', new Any[] {new Any(true)})}),
753*b1cdbd2cSJim Jagielski             new TestPolyStruct(new TestPolyStruct2[] {
754*b1cdbd2cSJim Jagielski                 new TestPolyStruct2(new TestPolyStruct('X'), new Any[] {new Any(true)})}),
755*b1cdbd2cSJim Jagielski             new TestPolyStruct(new int[][] { new int[] {Int32.MinValue} }),
756*b1cdbd2cSJim Jagielski             new TestPolyStruct[]{ new TestPolyStruct(Int32.MinValue)},
757*b1cdbd2cSJim Jagielski             new TestPolyStruct[]{new TestPolyStruct(new TestPolyStruct2('X', new Any(true)))},
758*b1cdbd2cSJim Jagielski             new TestPolyStruct[]{new TestPolyStruct(new TestPolyStruct2(new TestPolyStruct2('X', new Any(true)), "test"))},
759*b1cdbd2cSJim Jagielski             new TestPolyStruct2[]{new TestPolyStruct2("test", new TestPolyStruct2('X', new TestPolyStruct(new Any(true))))},
760*b1cdbd2cSJim Jagielski             new TestPolyStruct2[]{new TestPolyStruct2(new TestPolyStruct2('X', new Any(true)),new TestPolyStruct('X'))},
761*b1cdbd2cSJim Jagielski             new TestPolyStruct[][]{new TestPolyStruct[]{new TestPolyStruct('X')}},
762*b1cdbd2cSJim Jagielski             new TestPolyStruct[][]{new TestPolyStruct[]{new TestPolyStruct(new TestPolyStruct2('X', new Any(true)))}},
763*b1cdbd2cSJim Jagielski             new TestPolyStruct[][]{new TestPolyStruct[] {new TestPolyStruct(new TestPolyStruct2(new TestPolyStruct2('X',new Any(true)), "test"))}},
764*b1cdbd2cSJim Jagielski             new TestPolyStruct2[][]{new TestPolyStruct2[]{new TestPolyStruct2("test", new TestPolyStruct2('X',new TestPolyStruct(new Any(true))))}},
765*b1cdbd2cSJim Jagielski             new TestPolyStruct2[][]{new TestPolyStruct2[]{new TestPolyStruct2(new TestPolyStruct2('X',new Any(true)),new TestPolyStruct('X'))}}
766*b1cdbd2cSJim Jagielski             );
767*b1cdbd2cSJim Jagielski 
768*b1cdbd2cSJim Jagielski     //test the returned interface
769*b1cdbd2cSJim Jagielski     xMulti.fn11(1);
770*b1cdbd2cSJim Jagielski 
771*b1cdbd2cSJim Jagielski 
772*b1cdbd2cSJim Jagielski     }
773*b1cdbd2cSJim Jagielski 
getCurrentContextChecker()774*b1cdbd2cSJim Jagielski     public XCurrentContextChecker getCurrentContextChecker()
775*b1cdbd2cSJim Jagielski     {
776*b1cdbd2cSJim Jagielski         return null; //TODO: not yet tested in CLI UNO
777*b1cdbd2cSJim Jagielski     }
778*b1cdbd2cSJim Jagielski 
transportPolyBoolean( TestPolyStruct arg)779*b1cdbd2cSJim Jagielski     public TestPolyStruct transportPolyBoolean(/*[in]*/TestPolyStruct arg)
780*b1cdbd2cSJim Jagielski     {
781*b1cdbd2cSJim Jagielski         return arg;
782*b1cdbd2cSJim Jagielski     }
783*b1cdbd2cSJim Jagielski 
transportPolyHyper( ref TestPolyStruct arg)784*b1cdbd2cSJim Jagielski     public  void  transportPolyHyper(/*[in][out]*/ ref TestPolyStruct arg)
785*b1cdbd2cSJim Jagielski     {
786*b1cdbd2cSJim Jagielski     }
787*b1cdbd2cSJim Jagielski 
transportPolySequence(TestPolyStruct arg1, out TestPolyStruct arg2)788*b1cdbd2cSJim Jagielski     public void  transportPolySequence(TestPolyStruct arg1,
789*b1cdbd2cSJim Jagielski                                        out TestPolyStruct arg2)
790*b1cdbd2cSJim Jagielski     {
791*b1cdbd2cSJim Jagielski         arg2 = arg1;
792*b1cdbd2cSJim Jagielski     }
793*b1cdbd2cSJim Jagielski 
getNullPolyBadEnum()794*b1cdbd2cSJim Jagielski     public TestPolyStruct getNullPolyBadEnum()
795*b1cdbd2cSJim Jagielski     {
796*b1cdbd2cSJim Jagielski         return new TestPolyStruct(unoidl.test.testtools.bridgetest.TestBadEnum.M);
797*b1cdbd2cSJim Jagielski     }
798*b1cdbd2cSJim Jagielski 
getNullPolyLong()799*b1cdbd2cSJim Jagielski     public TestPolyStruct getNullPolyLong()
800*b1cdbd2cSJim Jagielski     {
801*b1cdbd2cSJim Jagielski         return new TestPolyStruct();
802*b1cdbd2cSJim Jagielski     }
803*b1cdbd2cSJim Jagielski 
getNullPolyString()804*b1cdbd2cSJim Jagielski     public TestPolyStruct getNullPolyString()
805*b1cdbd2cSJim Jagielski     {
806*b1cdbd2cSJim Jagielski         return new TestPolyStruct();
807*b1cdbd2cSJim Jagielski     }
808*b1cdbd2cSJim Jagielski 
getNullPolyType()809*b1cdbd2cSJim Jagielski     public TestPolyStruct getNullPolyType()
810*b1cdbd2cSJim Jagielski     {
811*b1cdbd2cSJim Jagielski         return new TestPolyStruct();
812*b1cdbd2cSJim Jagielski     }
813*b1cdbd2cSJim Jagielski 
getNullPolyAny()814*b1cdbd2cSJim Jagielski     public TestPolyStruct getNullPolyAny()
815*b1cdbd2cSJim Jagielski     {
816*b1cdbd2cSJim Jagielski         return new TestPolyStruct();
817*b1cdbd2cSJim Jagielski     }
818*b1cdbd2cSJim Jagielski 
getNullPolySequence()819*b1cdbd2cSJim Jagielski     public TestPolyStruct getNullPolySequence()
820*b1cdbd2cSJim Jagielski     {
821*b1cdbd2cSJim Jagielski         return new TestPolyStruct();
822*b1cdbd2cSJim Jagielski     }
823*b1cdbd2cSJim Jagielski 
getNullPolyEnum()824*b1cdbd2cSJim Jagielski     public TestPolyStruct getNullPolyEnum()
825*b1cdbd2cSJim Jagielski     {
826*b1cdbd2cSJim Jagielski         return new TestPolyStruct();
827*b1cdbd2cSJim Jagielski     }
828*b1cdbd2cSJim Jagielski 
getNullPolyStruct()829*b1cdbd2cSJim Jagielski     public TestPolyStruct getNullPolyStruct()
830*b1cdbd2cSJim Jagielski     {
831*b1cdbd2cSJim Jagielski         return new TestPolyStruct();
832*b1cdbd2cSJim Jagielski     }
833*b1cdbd2cSJim Jagielski 
getNullPolyInterface()834*b1cdbd2cSJim Jagielski     public TestPolyStruct getNullPolyInterface()
835*b1cdbd2cSJim Jagielski     {
836*b1cdbd2cSJim Jagielski         return new TestPolyStruct();
837*b1cdbd2cSJim Jagielski     }
838*b1cdbd2cSJim Jagielski 
getMulti()839*b1cdbd2cSJim Jagielski     public XMulti getMulti()
840*b1cdbd2cSJim Jagielski     {
841*b1cdbd2cSJim Jagielski         return new testtools.bridgetest.cli_cs.Multi();
842*b1cdbd2cSJim Jagielski     }
843*b1cdbd2cSJim Jagielski 
checkEqual(int value, int argument)844*b1cdbd2cSJim Jagielski     private static void checkEqual(int value, int argument) {
845*b1cdbd2cSJim Jagielski         if (argument != value) {
846*b1cdbd2cSJim Jagielski             throw new CheckFailed(value + " != " + argument);
847*b1cdbd2cSJim Jagielski         }
848*b1cdbd2cSJim Jagielski     }
849*b1cdbd2cSJim Jagielski 
checkEqual(double value, double argument)850*b1cdbd2cSJim Jagielski     private static void checkEqual(double value, double argument) {
851*b1cdbd2cSJim Jagielski         if (argument != value) {
852*b1cdbd2cSJim Jagielski             throw new CheckFailed(value + " != " + argument);
853*b1cdbd2cSJim Jagielski         }
854*b1cdbd2cSJim Jagielski     }
855*b1cdbd2cSJim Jagielski 
checkEqual(string value, string argument)856*b1cdbd2cSJim Jagielski     private static void checkEqual(string value, string argument) {
857*b1cdbd2cSJim Jagielski         if (argument != value) {
858*b1cdbd2cSJim Jagielski             throw new CheckFailed(value + " != " + argument);
859*b1cdbd2cSJim Jagielski         }
860*b1cdbd2cSJim Jagielski     }
861*b1cdbd2cSJim Jagielski 
testMulti(XMulti multi)862*b1cdbd2cSJim Jagielski     public string testMulti(XMulti multi)
863*b1cdbd2cSJim Jagielski     {
864*b1cdbd2cSJim Jagielski         try {
865*b1cdbd2cSJim Jagielski             checkEqual(0.0, multi.att1);
866*b1cdbd2cSJim Jagielski             multi.att1 = 0.1;
867*b1cdbd2cSJim Jagielski             checkEqual(0.1, multi.att1);
868*b1cdbd2cSJim Jagielski             checkEqual(11 * 1, multi.fn11(1));
869*b1cdbd2cSJim Jagielski             checkEqual("12" + "abc", multi.fn12("abc"));
870*b1cdbd2cSJim Jagielski             checkEqual(21 * 2, multi.fn21(2));
871*b1cdbd2cSJim Jagielski             checkEqual("22" + "de", multi.fn22("de"));
872*b1cdbd2cSJim Jagielski             checkEqual(0.0, multi.att3);
873*b1cdbd2cSJim Jagielski             multi.att3 = 0.3;
874*b1cdbd2cSJim Jagielski             checkEqual(0.3, multi.att3);
875*b1cdbd2cSJim Jagielski             checkEqual(31 * 3, multi.fn31(3));
876*b1cdbd2cSJim Jagielski             checkEqual("32" + "f", multi.fn32("f"));
877*b1cdbd2cSJim Jagielski             checkEqual(33, multi.fn33());
878*b1cdbd2cSJim Jagielski             checkEqual(41 * 4, multi.fn41(4));
879*b1cdbd2cSJim Jagielski             checkEqual(61 * 6, multi.fn61(6));
880*b1cdbd2cSJim Jagielski             checkEqual("62" + "", multi.fn62(""));
881*b1cdbd2cSJim Jagielski             checkEqual(71 * 7, multi.fn71(7));
882*b1cdbd2cSJim Jagielski             checkEqual("72" + "g", multi.fn72("g"));
883*b1cdbd2cSJim Jagielski             checkEqual(73, multi.fn73());
884*b1cdbd2cSJim Jagielski         } catch (CheckFailed f) {
885*b1cdbd2cSJim Jagielski             return f.Message;
886*b1cdbd2cSJim Jagielski         }
887*b1cdbd2cSJim Jagielski         return "";
888*b1cdbd2cSJim Jagielski     }
889*b1cdbd2cSJim Jagielski 
890*b1cdbd2cSJim Jagielski     public int RaiseAttr1
891*b1cdbd2cSJim Jagielski     {
892*b1cdbd2cSJim Jagielski         get { throw new RuntimeException(); }
893*b1cdbd2cSJim Jagielski         set { throw new IllegalArgumentException(); }
894*b1cdbd2cSJim Jagielski     }
895*b1cdbd2cSJim Jagielski 
896*b1cdbd2cSJim Jagielski     public int RaiseAttr2
897*b1cdbd2cSJim Jagielski     {
898*b1cdbd2cSJim Jagielski         get { throw new IllegalArgumentException(); }
899*b1cdbd2cSJim Jagielski         set { throw new IllegalArgumentException(); }
900*b1cdbd2cSJim Jagielski     }
901*b1cdbd2cSJim Jagielski 
902*b1cdbd2cSJim Jagielski 
903*b1cdbd2cSJim Jagielski }
904*b1cdbd2cSJim Jagielski 
905*b1cdbd2cSJim Jagielski }
906