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
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim JagielskiOption Explicit On
27*b1cdbd2cSJim JagielskiOption Strict On
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielskiimports System
30*b1cdbd2cSJim Jagielskiimports uno
31*b1cdbd2cSJim Jagielskiimports uno.util
32*b1cdbd2cSJim Jagielskiimports unoidl.com.sun.star.lang
33*b1cdbd2cSJim Jagielskiimports unoidl.com.sun.star.uno
34*b1cdbd2cSJim Jagielski'imports unoidl.com.sun.star.test.bridge
35*b1cdbd2cSJim Jagielskiimports unoidl.test.testtools.bridgetest
36*b1cdbd2cSJim Jagielskiimports System.Windows.Forms
37*b1cdbd2cSJim Jagielskiimports System.Diagnostics
38*b1cdbd2cSJim Jagielskiimports System.Reflection
39*b1cdbd2cSJim Jagielski
40*b1cdbd2cSJim JagielskiClass CONSTANTS
41*b1cdbd2cSJim JagielskiFriend Shared STRING_TEST_CONSTANT As String  = """ paco\' chorizo\\\' ""\'"
42*b1cdbd2cSJim JagielskiEnd Class
43*b1cdbd2cSJim Jagielski
44*b1cdbd2cSJim JagielskiNamespace foo
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski    Public Interface MyInterface
47*b1cdbd2cSJim Jagielski    End Interface
48*b1cdbd2cSJim JagielskiEnd Namespace
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim JagielskiNamespace vb_bridetest
51*b1cdbd2cSJim JagielskiClass ORecursiveCall
52*b1cdbd2cSJim Jagielski    Inherits WeakBase
53*b1cdbd2cSJim Jagielski    Implements XRecursiveCall
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski    Overridable Sub callRecursivly(xCall As XRecursiveCall, nToCall As Integer) _
56*b1cdbd2cSJim Jagielski    Implements XRecursiveCall.callRecursivly
57*b1cdbd2cSJim Jagielski		SyncLock Me
58*b1cdbd2cSJim Jagielski            If nToCall > 0
59*b1cdbd2cSJim Jagielski                nToCall = nToCall - 1
60*b1cdbd2cSJim Jagielski                xCall.callRecursivly(Me, nToCall)
61*b1cdbd2cSJim Jagielski            End If
62*b1cdbd2cSJim Jagielski       End SyncLock
63*b1cdbd2cSJim Jagielski    End Sub
64*b1cdbd2cSJim JagielskiEnd Class
65*b1cdbd2cSJim Jagielski
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski
69*b1cdbd2cSJim JagielskiPublic Class BridgeTest
70*b1cdbd2cSJim Jagielski       Inherits uno.util.WeakBase
71*b1cdbd2cSJim Jagielski       Implements XMain
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielski    Private m_xContext As XComponentContext
74*b1cdbd2cSJim Jagielski
75*b1cdbd2cSJim Jagielski    Public Sub New( xContext As unoidl.com.sun.star.uno.XComponentContext )
76*b1cdbd2cSJim Jagielski        mybase.New()
77*b1cdbd2cSJim Jagielski        m_xContext = xContext
78*b1cdbd2cSJim Jagielski    End Sub
79*b1cdbd2cSJim Jagielski
80*b1cdbd2cSJim Jagielski    Private Shared Function check( b As Boolean , message As String  ) As Boolean
81*b1cdbd2cSJim Jagielski        If Not b
82*b1cdbd2cSJim Jagielski            Console.WriteLine("{0} failed\n" , message)
83*b1cdbd2cSJim Jagielski        End If
84*b1cdbd2cSJim Jagielski        Return b
85*b1cdbd2cSJim Jagielski    End Function
86*b1cdbd2cSJim Jagielski
87*b1cdbd2cSJim Jagielski    Private Shared Sub assign( rData As TestElement, bBool As Boolean, _
88*b1cdbd2cSJim Jagielski			aChar As Char, nByte As Byte, nShort As Short, nUShort As UInt16, _
89*b1cdbd2cSJim Jagielski					nLong As Integer, nULong As UInt32, nHyper As Long, _
90*b1cdbd2cSJim Jagielski                    nUHyper As UInt64, fFloat As Single, fDouble As Double, _
91*b1cdbd2cSJim Jagielski					eEnum As TestEnum, rStr As String, xTest As Object, _
92*b1cdbd2cSJim Jagielski					rAny As Any)
93*b1cdbd2cSJim Jagielski
94*b1cdbd2cSJim Jagielski    	rData.Bool = bBool
95*b1cdbd2cSJim Jagielski	    rData.Char = aChar
96*b1cdbd2cSJim Jagielski	    rData.Byte = nByte
97*b1cdbd2cSJim Jagielski	    rData.Short = nShort
98*b1cdbd2cSJim Jagielski	    rData.UShort = nUShort
99*b1cdbd2cSJim Jagielski	    rData.Long = nLong
100*b1cdbd2cSJim Jagielski	    rData.ULong = nULong
101*b1cdbd2cSJim Jagielski	    rData.Hyper = nHyper
102*b1cdbd2cSJim Jagielski	    rData.UHyper = nUHyper
103*b1cdbd2cSJim Jagielski	    rData.Float = fFloat
104*b1cdbd2cSJim Jagielski	    rData.Double = fDouble
105*b1cdbd2cSJim Jagielski	    rData.Enum = eEnum
106*b1cdbd2cSJim Jagielski	    rData.String = rStr
107*b1cdbd2cSJim Jagielski	    rData.Interface = xTest
108*b1cdbd2cSJim Jagielski	    rData.Any = rAny
109*b1cdbd2cSJim Jagielski    End Sub
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski    Private Shared Sub assign( rData As TestDataElements, bBool As Boolean, _
112*b1cdbd2cSJim Jagielski            aChar As Char, nByte As Byte, nShort As Short, nUShort As UInt16, _
113*b1cdbd2cSJim Jagielski			nLong As Integer, nULong As UInt32, nHyper As Long, _
114*b1cdbd2cSJim Jagielski            nUHyper As UInt64, fFloat As Single, fDouble As Double, _
115*b1cdbd2cSJim Jagielski    		eEnum As TestEnum, rStr As String, xTest As Object, _
116*b1cdbd2cSJim Jagielski			rAny As Any, rSequence() As TestElement)
117*b1cdbd2cSJim Jagielski
118*b1cdbd2cSJim Jagielski    	assign( DirectCast( rData,TestElement), _
119*b1cdbd2cSJim Jagielski			bBool, aChar, nByte, nShort, nUShort, nLong, nULong, nHyper, _
120*b1cdbd2cSJim Jagielski            nUHyper, fFloat, fDouble, eEnum, rStr, xTest, rAny )
121*b1cdbd2cSJim Jagielski	    rData.Sequence = rSequence
122*b1cdbd2cSJim Jagielski    End Sub
123*b1cdbd2cSJim Jagielski
124*b1cdbd2cSJim Jagielski	Private Shared Function compareData(val1 As Object, val2 As Object) As Boolean
125*b1cdbd2cSJim Jagielski		If val1 Is Nothing And val2 Is Nothing OrElse _
126*b1cdbd2cSJim Jagielski            val1 Is val2
127*b1cdbd2cSJim Jagielski			Return True
128*b1cdbd2cSJim Jagielski        End If
129*b1cdbd2cSJim Jagielski		If  val1 Is Nothing And Not(val2 Is Nothing)  OrElse _
130*b1cdbd2cSJim Jagielski		    Not (val1 Is Nothing) And val2 Is Nothing OrElse _
131*b1cdbd2cSJim Jagielski            Not val1.GetType().Equals( val2.GetType())
132*b1cdbd2cSJim Jagielski			Return False
133*b1cdbd2cSJim Jagielski		End If
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski		Dim ret As Boolean = False
136*b1cdbd2cSJim Jagielski		Dim t1 As Type = val1.GetType()
137*b1cdbd2cSJim Jagielski        'Sequence
138*b1cdbd2cSJim Jagielski		If t1.IsArray()
139*b1cdbd2cSJim Jagielski			ret = compareSequence(DirectCast( val1, Array), _
140*b1cdbd2cSJim Jagielski                  DirectCast( val2, Array))
141*b1cdbd2cSJim Jagielski		'String
142*b1cdbd2cSJim Jagielski		ElseIf TypeOf val1 Is String
143*b1cdbd2cSJim Jagielski			ret = DirectCast( val1, string) = DirectCast( val2, string)
144*b1cdbd2cSJim Jagielski		' Interface implementation
145*b1cdbd2cSJim Jagielski		ElseIf t1.GetInterfaces().Length > 0 And Not t1.IsValueType
146*b1cdbd2cSJim Jagielski			ret = val1 Is val2
147*b1cdbd2cSJim Jagielski		' Struct
148*b1cdbd2cSJim Jagielski		ElseIf  Not t1.IsValueType
149*b1cdbd2cSJim Jagielski			ret = compareStruct(val1, val2)
150*b1cdbd2cSJim Jagielski		ElseIf TypeOf val1 Is Any
151*b1cdbd2cSJim Jagielski			Dim a1 As Any = DirectCast( val1, Any)
152*b1cdbd2cSJim Jagielski			Dim a2 As Any = DirectCast( val2, Any)
153*b1cdbd2cSJim Jagielski			ret = a1.Type.Equals( a2.Type ) And compareData( a1.Value, a2.Value )
154*b1cdbd2cSJim Jagielski		ElseIf t1.IsValueType
155*b1cdbd2cSJim Jagielski			'Any, enum, int, bool char, float, double etc.
156*b1cdbd2cSJim Jagielski			ret = val1.Equals(val2)
157*b1cdbd2cSJim Jagielski		Else
158*b1cdbd2cSJim Jagielski			Debug.Assert(False)
159*b1cdbd2cSJim Jagielski		End If
160*b1cdbd2cSJim Jagielski		Return ret
161*b1cdbd2cSJim Jagielski	End Function
162*b1cdbd2cSJim Jagielski
163*b1cdbd2cSJim Jagielski	' Arrays have only one dimension
164*b1cdbd2cSJim Jagielski	Private Shared Function compareSequence( ar1 As Array, ar2 As Array) As Boolean
165*b1cdbd2cSJim Jagielski		Debug.Assert( Not (ar1 Is Nothing) And Not (ar2 Is Nothing) )
166*b1cdbd2cSJim Jagielski		Dim t1 As Type  = ar1.GetType()
167*b1cdbd2cSJim Jagielski		Dim t2 As Type  = ar2.GetType()
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski		if ( Not(ar1.Rank = 1 And ar2.Rank = 1 _
170*b1cdbd2cSJim Jagielski			And ar1.Length = ar2.Length And t1.GetElementType().Equals(t2.GetElementType())))
171*b1cdbd2cSJim Jagielski			return False
172*b1cdbd2cSJim Jagielski        End If
173*b1cdbd2cSJim Jagielski		'arrays have same rank and size and element type.
174*b1cdbd2cSJim Jagielski		Dim len As Integer  = ar1.Length
175*b1cdbd2cSJim Jagielski		Dim elemType As Type = t1.GetElementType()
176*b1cdbd2cSJim Jagielski		Dim ret As Boolean = True
177*b1cdbd2cSJim Jagielski        Dim i As Integer
178*b1cdbd2cSJim Jagielski		For i = 0 To len - 1
179*b1cdbd2cSJim Jagielski			If (compareData(ar1.GetValue(i), ar2.GetValue(i)) = False)
180*b1cdbd2cSJim Jagielski				ret = False
181*b1cdbd2cSJim Jagielski				Exit For
182*b1cdbd2cSJim Jagielski			End If
183*b1cdbd2cSJim Jagielski		Next i
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski        Return ret
186*b1cdbd2cSJim Jagielski	End Function
187*b1cdbd2cSJim Jagielski
188*b1cdbd2cSJim Jagielski	Private Shared Function compareStruct( val1 As Object, val2 As Object) As Boolean
189*b1cdbd2cSJim Jagielski		Debug.Assert( Not(val1 Is Nothing) And Not(val2 Is Nothing))
190*b1cdbd2cSJim Jagielski		Dim t1 As Type = val1.GetType()
191*b1cdbd2cSJim Jagielski		Dim t2 As Type = val2.GetType()
192*b1cdbd2cSJim Jagielski		If Not t1.Equals(t2)
193*b1cdbd2cSJim Jagielski			Return False
194*b1cdbd2cSJim Jagielski        End If
195*b1cdbd2cSJim Jagielski		Dim fields() As FieldInfo = t1.GetFields()
196*b1cdbd2cSJim Jagielski		Dim cFields As Integer = fields.Length
197*b1cdbd2cSJim Jagielski		Dim ret As Boolean = True
198*b1cdbd2cSJim Jagielski        Dim i As Integer
199*b1cdbd2cSJim Jagielski		For i = 0 To cFields - 1
200*b1cdbd2cSJim Jagielski			Dim fieldVal1 As Object = fields(i).GetValue(val1)
201*b1cdbd2cSJim Jagielski			Dim fieldVal2 As Object = fields(i).GetValue(val2)
202*b1cdbd2cSJim Jagielski			If Not compareData(fieldVal1, fieldVal2)
203*b1cdbd2cSJim Jagielski				ret = False
204*b1cdbd2cSJim Jagielski				Exit For
205*b1cdbd2cSJim Jagielski			End If
206*b1cdbd2cSJim Jagielski		Next i
207*b1cdbd2cSJim Jagielski		Return ret
208*b1cdbd2cSJim Jagielski	End Function
209*b1cdbd2cSJim Jagielski
210*b1cdbd2cSJim Jagielski
211*b1cdbd2cSJim Jagielski    Private Shared Function performSequenceTest(xBT As XBridgeTest) As Boolean
212*b1cdbd2cSJim Jagielski        Dim bRet As Boolean = True
213*b1cdbd2cSJim Jagielski        'Automati cast ?? like with COM objects
214*b1cdbd2cSJim Jagielski        Dim xBT2 As XBridgeTest2
215*b1cdbd2cSJim Jagielski        Try
216*b1cdbd2cSJim Jagielski            xBT2 = DirectCast(xBT,XBridgeTest2)
217*b1cdbd2cSJim Jagielski        Catch e As InvalidCastException
218*b1cdbd2cSJim Jagielski            Return False
219*b1cdbd2cSJim Jagielski        End Try
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski        ' perform sequence tests (XBridgeTest2)
222*b1cdbd2cSJim Jagielski        'create the sequence which are compared with the results
223*b1cdbd2cSJim Jagielski        Dim arBool() As Boolean = {True, False, True}
224*b1cdbd2cSJim Jagielski        Dim arChar() As Char = {"A"C,"B"C,"C"C}
225*b1cdbd2cSJim Jagielski        Dim arByte() As Byte = { 1,  2,  &Hff}
226*b1cdbd2cSJim Jagielski        Dim arShort() As Short = {Int16.MinValue, 1,  Int16.MaxValue}
227*b1cdbd2cSJim Jagielski        Dim arUShort() As UInt16 = {Convert.ToUInt16(0), Convert.ToUInt16(1), _
228*b1cdbd2cSJim Jagielski                                    Convert.ToUInt16(&Hffff)}
229*b1cdbd2cSJim Jagielski        Dim arLong() As Integer = {Int32.MinValue, 1, Int32.MaxValue}
230*b1cdbd2cSJim Jagielski        Dim arULong() As UInt32 = {Convert.ToUInt32(0), Convert.ToUInt32(1), _
231*b1cdbd2cSJim Jagielski                                   Convert.ToUInt32(&HffffffffL)}
232*b1cdbd2cSJim Jagielski        Dim arHyper() As Long = {Int64.MinValue, 1, Int64.MaxValue}
233*b1cdbd2cSJim Jagielski        Dim arUHyper() As UInt64 = {Convert.ToUInt64(0), Convert.ToUInt64(1), _
234*b1cdbd2cSJim Jagielski                                    Convert.ToUInt64(&Hffffffff5L)}
235*b1cdbd2cSJim Jagielski        Dim arFloat() As Single = {1.1f, 2.2f, 3.3f}
236*b1cdbd2cSJim Jagielski        Dim arDouble() As Double = {1.11, 2.22, 3.33}
237*b1cdbd2cSJim Jagielski        Dim arString() As String = {"String 1", "String 2", "String 3"}
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski        Dim arAny() As Any = {New Any(True), New Any(11111), New Any(3.14)}
240*b1cdbd2cSJim Jagielski        Dim arObject() As Object = {New WeakBase(), New WeakBase(), New WeakBase()}
241*b1cdbd2cSJim Jagielski        Dim arEnum() As TestEnum = {TestEnum.ONE, TestEnum.TWO, TestEnum.CHECK}
242*b1cdbd2cSJim Jagielski
243*b1cdbd2cSJim Jagielski        Dim arStruct() As TestElement = {New TestElement(), New TestElement(), _
244*b1cdbd2cSJim Jagielski                               New TestElement()}
245*b1cdbd2cSJim Jagielski        assign( arStruct(0), True, "@"C, 17, &H1234, Convert.ToUInt16(&Hfedc), _
246*b1cdbd2cSJim Jagielski            &H12345678, Convert.ToUInt32(&H123456), &H123456789abcdef0, _
247*b1cdbd2cSJim Jagielski            Convert.ToUInt64(123456788), 17.0815F, 3.1415926359, _
248*b1cdbd2cSJim Jagielski            TestEnum.LOLA, CONSTANTS.STRING_TEST_CONSTANT, arObject(0), _
249*b1cdbd2cSJim Jagielski            New Any(GetType(System.Object), arObject(0)))
250*b1cdbd2cSJim Jagielski        assign( arStruct(1), True, "A"C, 17, &H1234, Convert.ToUInt16(&Hfedc), _
251*b1cdbd2cSJim Jagielski            &H12345678, Convert.ToUInt32(&H123456), &H123456789abcdef0, _
252*b1cdbd2cSJim Jagielski            Convert.ToUInt64(12345678), 17.0815F, 3.1415926359, _
253*b1cdbd2cSJim Jagielski            TestEnum.TWO, CONSTANTS.STRING_TEST_CONSTANT, arObject(1), _
254*b1cdbd2cSJim Jagielski            New Any(GetType(System.Object), arObject(1)) )
255*b1cdbd2cSJim Jagielski        assign( arStruct(2), True, "B"C, 17, &H1234, Convert.ToUInt16(&Hfedc), _
256*b1cdbd2cSJim Jagielski            &H12345678, Convert.ToUInt32(654321), &H123456789abcdef0, _
257*b1cdbd2cSJim Jagielski            Convert.ToUInt64(87654321), 17.0815F, 3.1415926359, _
258*b1cdbd2cSJim Jagielski            TestEnum.CHECK, Constants.STRING_TEST_CONSTANT, arObject(2), _
259*b1cdbd2cSJim Jagielski            New Any(GetType(System.Object), arObject(2)))
260*b1cdbd2cSJim Jagielski
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski        Dim arLong3()()() As Integer = New Integer()()() { _
263*b1cdbd2cSJim Jagielski        New Integer()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9} }, _
264*b1cdbd2cSJim Jagielski        New Integer ()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9}}, _
265*b1cdbd2cSJim Jagielski        New Integer()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9}}}
266*b1cdbd2cSJim Jagielski
267*b1cdbd2cSJim Jagielski        Dim seqSeqRet()() As Integer = xBT2.setDim2(arLong3(0))
268*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqSeqRet, arLong3(0)), "sequence test") _
269*b1cdbd2cSJim Jagielski               And bRet
270*b1cdbd2cSJim Jagielski        Dim seqSeqRet2()()() As Integer = xBT2.setDim3(arLong3)
271*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqSeqRet2, arLong3), "sequence test") _
272*b1cdbd2cSJim Jagielski               And bRet
273*b1cdbd2cSJim Jagielski        Dim seqAnyRet() As Any = xBT2.setSequenceAny(arAny)
274*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqAnyRet, arAny), "sequence test") And bRet
275*b1cdbd2cSJim Jagielski        Dim seqBoolRet() As Boolean = xBT2.setSequenceBool(arBool)
276*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqBoolRet, arBool), "sequence test") _
277*b1cdbd2cSJim Jagielski               And bRet
278*b1cdbd2cSJim Jagielski        Dim seqByteRet() As Byte = xBT2.setSequenceByte(arByte)
279*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqByteRet, arByte), "sequence test") _
280*b1cdbd2cSJim Jagielski               And bRet
281*b1cdbd2cSJim Jagielski        Dim seqCharRet() As Char = xBT2.setSequenceChar(arChar)
282*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqCharRet, arChar), "sequence test") _
283*b1cdbd2cSJim Jagielski                   And bRet
284*b1cdbd2cSJim Jagielski        Dim seqShortRet() As Short = xBT2.setSequenceShort(arShort)
285*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqShortRet, arShort), "sequence test") _
286*b1cdbd2cSJim Jagielski               And bRet
287*b1cdbd2cSJim Jagielski        Dim seqLongRet() As Integer = xBT2.setSequenceLong(arLong)
288*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqLongRet, arLong), "sequence test") _
289*b1cdbd2cSJim Jagielski                   And bRet
290*b1cdbd2cSJim Jagielski        Dim seqHyperRet() As Long = xBT2.setSequenceHyper(arHyper)
291*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqHyperRet,arHyper), "sequence test") _
292*b1cdbd2cSJim Jagielski               And bRet
293*b1cdbd2cSJim Jagielski        Dim seqFloatRet() As Single = xBT2.setSequenceFloat(arFloat)
294*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqFloatRet, arFloat), "sequence test") _
295*b1cdbd2cSJim Jagielski               And bRet
296*b1cdbd2cSJim Jagielski        Dim seqDoubleRet() As Double= xBT2.setSequenceDouble(arDouble)
297*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqDoubleRet, arDouble), "sequence test") _
298*b1cdbd2cSJim Jagielski               And bRet
299*b1cdbd2cSJim Jagielski        Dim seqEnumRet() As TestEnum = xBT2.setSequenceEnum(arEnum)
300*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqEnumRet, arEnum), "sequence test") _
301*b1cdbd2cSJim Jagielski               And bRet
302*b1cdbd2cSJim Jagielski        Dim seqUShortRet() As UInt16 = xBT2.setSequenceUShort(arUShort)
303*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqUShortRet, arUShort), "sequence test") _
304*b1cdbd2cSJim Jagielski               And bRet
305*b1cdbd2cSJim Jagielski        Dim seqULongRet() As UInt32 = xBT2.setSequenceULong(arULong)
306*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqULongRet, arULong), "sequence test") _
307*b1cdbd2cSJim Jagielski               And bRet
308*b1cdbd2cSJim Jagielski        Dim seqUHyperRet() As UInt64 = xBT2.setSequenceUHyper(arUHyper)
309*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqUHyperRet, arUHyper), "sequence test") _
310*b1cdbd2cSJim Jagielski               And bRet
311*b1cdbd2cSJim Jagielski        Dim seqObjectRet() As Object = xBT2.setSequenceXInterface(arObject)
312*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqObjectRet, arObject), "sequence test") _
313*b1cdbd2cSJim Jagielski               And bRet
314*b1cdbd2cSJim Jagielski        Dim seqStringRet() As String = xBT2.setSequenceString(arString)
315*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqStringRet, arString), "sequence test") _
316*b1cdbd2cSJim Jagielski               And bRet
317*b1cdbd2cSJim Jagielski        Dim seqStructRet() As TestElement = xBT2.setSequenceStruct(arStruct)
318*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqStructRet, arStruct), "sequence test") _
319*b1cdbd2cSJim Jagielski               And bRet
320*b1cdbd2cSJim Jagielski
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski        Dim arBoolTemp() As Boolean = DirectCast(arBool.Clone(), Boolean())
323*b1cdbd2cSJim Jagielski        Dim arCharTemp() As Char = DirectCast(arChar.Clone(), Char())
324*b1cdbd2cSJim Jagielski        Dim arByteTemp() As Byte = DirectCast(arByte.Clone(), Byte())
325*b1cdbd2cSJim Jagielski        Dim arShortTemp() As Short = DirectCast(arShort.Clone(), Short())
326*b1cdbd2cSJim Jagielski        Dim arUShortTemp() As UInt16 = DirectCast(arUShort.Clone(), UInt16())
327*b1cdbd2cSJim Jagielski        Dim arLongTemp() As Integer= DirectCast(arLong.Clone(), Integer())
328*b1cdbd2cSJim Jagielski        Dim arULongTemp() As UInt32 =  DirectCast(arULong.Clone(), UInt32())
329*b1cdbd2cSJim Jagielski        Dim arHyperTemp() As Long = DirectCast(arHyper.Clone(), Long())
330*b1cdbd2cSJim Jagielski        Dim arUHyperTemp() As UInt64 = DirectCast(arUHyper.Clone(), UInt64())
331*b1cdbd2cSJim Jagielski        Dim arFloatTemp() As Single = DirectCast(arFloat.Clone(), Single())
332*b1cdbd2cSJim Jagielski        Dim arDoubleTemp() As Double = DirectCast(arDouble.Clone(), Double())
333*b1cdbd2cSJim Jagielski        Dim arEnumTemp() As TestEnum = DirectCast(arEnum.Clone(), TestEnum())
334*b1cdbd2cSJim Jagielski        Dim arStringTemp() As String = DirectCast(arString.Clone(), String())
335*b1cdbd2cSJim Jagielski        Dim arObjectTemp() As Object = DirectCast(arObject.Clone(), Object())
336*b1cdbd2cSJim Jagielski        Dim arAnyTemp() As Any = DirectCast(arAny.Clone(), Any())
337*b1cdbd2cSJim Jagielski        ' make sure this are has the same contents as arLong3(0)
338*b1cdbd2cSJim Jagielski        Dim arLong2Temp()() As Integer = New Integer()(){New Integer(){1,2,3}, _
339*b1cdbd2cSJim Jagielski                                         New Integer(){4,5,6}, New Integer(){7,8,9} }
340*b1cdbd2cSJim Jagielski        ' make sure this are has the same contents as arLong3
341*b1cdbd2cSJim Jagielski        Dim arLong3Temp()()() As Integer = New Integer()()(){ _
342*b1cdbd2cSJim Jagielski            New Integer()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9} }, _
343*b1cdbd2cSJim Jagielski            New Integer ()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9}}, _
344*b1cdbd2cSJim Jagielski            New Integer()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9}}}
345*b1cdbd2cSJim Jagielski
346*b1cdbd2cSJim Jagielski        xBT2.setSequencesInOut( arBoolTemp, arCharTemp,  arByteTemp, _
347*b1cdbd2cSJim Jagielski                            arShortTemp,  arUShortTemp,  arLongTemp, _
348*b1cdbd2cSJim Jagielski                            arULongTemp, arHyperTemp,  arUHyperTemp, _
349*b1cdbd2cSJim Jagielski                            arFloatTemp, arDoubleTemp,  arEnumTemp, _
350*b1cdbd2cSJim Jagielski                            arStringTemp,   arObjectTemp, _
351*b1cdbd2cSJim Jagielski                             arAnyTemp,  arLong2Temp,  arLong3Temp)
352*b1cdbd2cSJim Jagielski        bRet = check( _
353*b1cdbd2cSJim Jagielski            compareData(arBoolTemp, arBool) And _
354*b1cdbd2cSJim Jagielski            compareData(arCharTemp , arChar) And _
355*b1cdbd2cSJim Jagielski            compareData(arByteTemp , arByte) And _
356*b1cdbd2cSJim Jagielski            compareData(arShortTemp , arShort) And _
357*b1cdbd2cSJim Jagielski            compareData(arUShortTemp , arUShort) And _
358*b1cdbd2cSJim Jagielski            compareData(arLongTemp , arLong) And _
359*b1cdbd2cSJim Jagielski            compareData(arULongTemp , arULong) And _
360*b1cdbd2cSJim Jagielski            compareData(arHyperTemp , arHyper) And _
361*b1cdbd2cSJim Jagielski            compareData(arUHyperTemp , arUHyper) And _
362*b1cdbd2cSJim Jagielski            compareData(arFloatTemp , arFloat) And _
363*b1cdbd2cSJim Jagielski            compareData(arDoubleTemp , arDouble) And _
364*b1cdbd2cSJim Jagielski            compareData(arEnumTemp , arEnum) And _
365*b1cdbd2cSJim Jagielski            compareData(arStringTemp , arString) And _
366*b1cdbd2cSJim Jagielski            compareData(arObjectTemp , arObject) And _
367*b1cdbd2cSJim Jagielski            compareData(arAnyTemp , arAny) And _
368*b1cdbd2cSJim Jagielski            compareData(arLong2Temp , arLong3(0)) And _
369*b1cdbd2cSJim Jagielski            compareData(arLong3Temp , arLong3), "sequence test") And bRet
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski        Dim arBoolOut() As Boolean
372*b1cdbd2cSJim Jagielski        Dim arCharOut() As Char
373*b1cdbd2cSJim Jagielski        Dim arByteOut() As Byte
374*b1cdbd2cSJim Jagielski        Dim arShortOut() As Short
375*b1cdbd2cSJim Jagielski        Dim arUShortOut() As UInt16
376*b1cdbd2cSJim Jagielski        Dim arLongOut() As Integer
377*b1cdbd2cSJim Jagielski        Dim arULongOut() As UInt32
378*b1cdbd2cSJim Jagielski        Dim arHyperOut() As Long
379*b1cdbd2cSJim Jagielski        Dim arUHyperOut() As UInt64
380*b1cdbd2cSJim Jagielski        Dim arFloatOut() As Single
381*b1cdbd2cSJim Jagielski        Dim arDoubleOut() As Double
382*b1cdbd2cSJim Jagielski        Dim arEnumOut() As TestEnum
383*b1cdbd2cSJim Jagielski        Dim arStringOut() As String
384*b1cdbd2cSJim Jagielski        Dim arObjectOut() As Object
385*b1cdbd2cSJim Jagielski        Dim arAnyOut() As Any
386*b1cdbd2cSJim Jagielski        Dim arLong2Out()() As Integer
387*b1cdbd2cSJim Jagielski        Dim arLong3Out()()() As Integer
388*b1cdbd2cSJim Jagielski
389*b1cdbd2cSJim Jagielski        xBT2.setSequencesOut( arBoolOut,  arCharOut,  arByteOut, _
390*b1cdbd2cSJim Jagielski                             arShortOut,  arUShortOut,  arLongOut, _
391*b1cdbd2cSJim Jagielski                             arULongOut,  arHyperOut,  arUHyperOut, _
392*b1cdbd2cSJim Jagielski                             arFloatOut,  arDoubleOut,  arEnumOut, _
393*b1cdbd2cSJim Jagielski                             arStringOut,  arObjectOut,  arAnyOut, _
394*b1cdbd2cSJim Jagielski                             arLong2Out,  arLong3Out)
395*b1cdbd2cSJim Jagielski        bRet = check( _
396*b1cdbd2cSJim Jagielski            compareData(arBoolOut, arBool) And _
397*b1cdbd2cSJim Jagielski            compareData(arCharOut, arChar) And _
398*b1cdbd2cSJim Jagielski            compareData(arByteOut, arByte) And _
399*b1cdbd2cSJim Jagielski            compareData(arShortOut, arShort) And _
400*b1cdbd2cSJim Jagielski            compareData(arUShortOut, arUShort) And _
401*b1cdbd2cSJim Jagielski            compareData(arLongOut, arLong) And _
402*b1cdbd2cSJim Jagielski            compareData(arULongOut, arULong) And _
403*b1cdbd2cSJim Jagielski            compareData(arHyperOut, arHyper) And _
404*b1cdbd2cSJim Jagielski            compareData(arUHyperOut, arUHyper) And _
405*b1cdbd2cSJim Jagielski            compareData(arFloatOut, arFloat) And _
406*b1cdbd2cSJim Jagielski            compareData(arDoubleOut, arDouble) And _
407*b1cdbd2cSJim Jagielski            compareData(arEnumOut, arEnum) And _
408*b1cdbd2cSJim Jagielski            compareData(arStringOut, arString) And _
409*b1cdbd2cSJim Jagielski            compareData(arObjectOut, arObject) And _
410*b1cdbd2cSJim Jagielski            compareData(arAnyOut, arAny) And _
411*b1cdbd2cSJim Jagielski            compareData(arLong2Out, arLong3(0)) And _
412*b1cdbd2cSJim Jagielski            compareData(arLong3Out, arLong3), "sequence test") And bRet
413*b1cdbd2cSJim Jagielski
414*b1cdbd2cSJim Jagielski
415*b1cdbd2cSJim Jagielski        'test with empty sequences
416*b1cdbd2cSJim Jagielski        Dim _arLong2()() As Integer = New Integer()(){}
417*b1cdbd2cSJim Jagielski        seqSeqRet = xBT2.setDim2(_arLong2)
418*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqSeqRet, _arLong2), "sequence test") And bRet
419*b1cdbd2cSJim Jagielski        Dim _arLong3()()() As Integer = New Integer()()(){}
420*b1cdbd2cSJim Jagielski        seqSeqRet2 = xBT2.setDim3(_arLong3)
421*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqSeqRet2, _arLong3), "sequence test") And bRet
422*b1cdbd2cSJim Jagielski        Dim _arAny() As Any = New Any(){}
423*b1cdbd2cSJim Jagielski        seqAnyRet = xBT2.setSequenceAny(_arAny)
424*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqAnyRet, _arAny), "sequence test") And bRet
425*b1cdbd2cSJim Jagielski        Dim _arBool() As Boolean = New Boolean() {}
426*b1cdbd2cSJim Jagielski        seqBoolRet = xBT2.setSequenceBool(_arBool)
427*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqBoolRet, _arBool), "sequence test") And bRet
428*b1cdbd2cSJim Jagielski        Dim _arByte() As Byte = New Byte() {}
429*b1cdbd2cSJim Jagielski        seqByteRet = xBT2.setSequenceByte(_arByte)
430*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqByteRet, _arByte), "sequence test") And bRet
431*b1cdbd2cSJim Jagielski        Dim _arChar() As Char = New Char() {}
432*b1cdbd2cSJim Jagielski        seqCharRet  = xBT2.setSequenceChar(_arChar)
433*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqCharRet, _arChar), "sequence test") And bRet
434*b1cdbd2cSJim Jagielski        Dim _arShort() As Short = New Short() {}
435*b1cdbd2cSJim Jagielski        seqShortRet = xBT2.setSequenceShort(_arShort)
436*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqShortRet, _arShort), "sequence test") And bRet
437*b1cdbd2cSJim Jagielski        Dim _arLong() As Integer = New Integer() {}
438*b1cdbd2cSJim Jagielski        seqLongRet = xBT2.setSequenceLong(_arLong)
439*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqLongRet, _arLong), "sequence test") And bRet
440*b1cdbd2cSJim Jagielski        Dim _arHyper() As Long = New Long(){}
441*b1cdbd2cSJim Jagielski        seqHyperRet = xBT2.setSequenceHyper(_arHyper)
442*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqHyperRet, _arHyper), "sequence test") And bRet
443*b1cdbd2cSJim Jagielski        Dim _arFloat() As Single = New Single(){}
444*b1cdbd2cSJim Jagielski        seqFloatRet = xBT2.setSequenceFloat(_arFloat)
445*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqFloatRet, _arFloat), "sequence test") And bRet
446*b1cdbd2cSJim Jagielski        Dim _arDouble() As Double = New Double(){}
447*b1cdbd2cSJim Jagielski        seqDoubleRet = xBT2.setSequenceDouble(_arDouble)
448*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqDoubleRet, _arDouble), "sequence test") And bRet
449*b1cdbd2cSJim Jagielski        Dim _arEnum() As TestEnum = New TestEnum(){}
450*b1cdbd2cSJim Jagielski        seqEnumRet = xBT2.setSequenceEnum(_arEnum)
451*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqEnumRet, _arEnum), "sequence test") And bRet
452*b1cdbd2cSJim Jagielski        Dim  _arUShort() As UInt16 = New UInt16(){}
453*b1cdbd2cSJim Jagielski        seqUShortRet = xBT2.setSequenceUShort(_arUShort)
454*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqUShortRet, _arUShort), "sequence test") And bRet
455*b1cdbd2cSJim Jagielski        Dim _arULong() As UInt32 = New UInt32(){}
456*b1cdbd2cSJim Jagielski        seqULongRet = xBT2.setSequenceULong(_arULong)
457*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqULongRet, _arULong), "sequence test") And bRet
458*b1cdbd2cSJim Jagielski        Dim  _arUHyper() As UInt64 = New UInt64(){}
459*b1cdbd2cSJim Jagielski        seqUHyperRet = xBT2.setSequenceUHyper(_arUHyper)
460*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqUHyperRet, _arUHyper), "sequence test") And bRet
461*b1cdbd2cSJim Jagielski        Dim _arObject() As Object = New Object(){}
462*b1cdbd2cSJim Jagielski        seqObjectRet = xBT2.setSequenceXInterface(_arObject)
463*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqObjectRet, _arObject), "sequence test") And bRet
464*b1cdbd2cSJim Jagielski        Dim _arString() As String = New String(){}
465*b1cdbd2cSJim Jagielski        seqStringRet = xBT2.setSequenceString(_arString)
466*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqStringRet, _arString), "sequence test") And bRet
467*b1cdbd2cSJim Jagielski        Dim _arStruct() As TestElement = New TestElement(){}
468*b1cdbd2cSJim Jagielski        seqStructRet = xBT2.setSequenceStruct(_arStruct)
469*b1cdbd2cSJim Jagielski        bRet = check( compareData(seqStructRet, _arStruct), "sequence test") And bRet
470*b1cdbd2cSJim Jagielski        Return bRet
471*b1cdbd2cSJim Jagielski    End Function
472*b1cdbd2cSJim Jagielski
473*b1cdbd2cSJim Jagielski    Private Shared Function testAny(typ As Type, value As  Object, _
474*b1cdbd2cSJim Jagielski                                    xLBT As  XBridgeTest ) As Boolean
475*b1cdbd2cSJim Jagielski
476*b1cdbd2cSJim Jagielski	    Dim any As Any
477*b1cdbd2cSJim Jagielski	    If (typ Is Nothing)
478*b1cdbd2cSJim Jagielski		    any = New Any(value.GetType(), value)
479*b1cdbd2cSJim Jagielski	    Else
480*b1cdbd2cSJim Jagielski		    any = New Any(typ, value)
481*b1cdbd2cSJim Jagielski        End If
482*b1cdbd2cSJim Jagielski
483*b1cdbd2cSJim Jagielski	    Dim any2 As Any = xLBT.transportAny(any)
484*b1cdbd2cSJim Jagielski	    Dim ret As Boolean = compareData(any, any2)
485*b1cdbd2cSJim Jagielski	    If ret = False
486*b1cdbd2cSJim Jagielski            Console.WriteLine("any is different after roundtrip: in {0}, " _
487*b1cdbd2cSJim Jagielski                              & "out {1}\n", _
488*b1cdbd2cSJim Jagielski                            any.Type.FullName, any2.Type.FullName)
489*b1cdbd2cSJim Jagielski        End If
490*b1cdbd2cSJim Jagielski	    Return ret
491*b1cdbd2cSJim Jagielski    End Function
492*b1cdbd2cSJim Jagielski
493*b1cdbd2cSJim Jagielski    Private Shared Function performAnyTest(xLBT As XBridgeTest, _
494*b1cdbd2cSJim Jagielski                                           data As TestDataElements) As Boolean
495*b1cdbd2cSJim Jagielski        Dim bReturn As Boolean = True
496*b1cdbd2cSJim Jagielski	    bReturn = testAny( Nothing, data.Byte ,xLBT ) And bReturn
497*b1cdbd2cSJim Jagielski	    bReturn = testAny( Nothing, data.Short,xLBT ) And bReturn
498*b1cdbd2cSJim Jagielski	    bReturn = testAny(  Nothing, data.UShort,xLBT ) And bReturn
499*b1cdbd2cSJim Jagielski	    bReturn = testAny(  Nothing, data.Long,xLBT ) And bReturn
500*b1cdbd2cSJim Jagielski	    bReturn = testAny(  Nothing, data.ULong,xLBT ) And bReturn
501*b1cdbd2cSJim Jagielski	    bReturn = testAny(  Nothing, data.Hyper,xLBT ) And bReturn
502*b1cdbd2cSJim Jagielski	    bReturn = testAny(  Nothing,data.UHyper,xLBT ) And bReturn
503*b1cdbd2cSJim Jagielski	    bReturn = testAny( Nothing, data.Float,xLBT ) And bReturn
504*b1cdbd2cSJim Jagielski	    bReturn = testAny( Nothing, data.Double,xLBT ) And bReturn
505*b1cdbd2cSJim Jagielski	    bReturn = testAny( Nothing, data.Enum,xLBT ) And bReturn
506*b1cdbd2cSJim Jagielski	    bReturn = testAny( Nothing, data.String,xLBT ) And bReturn
507*b1cdbd2cSJim Jagielski	    bReturn = testAny(GetType(unoidl.com.sun.star.uno.XWeak), _
508*b1cdbd2cSJim Jagielski                     data.Interface,xLBT ) And bReturn
509*b1cdbd2cSJim Jagielski	    bReturn = testAny(Nothing, data, xLBT ) And bReturn
510*b1cdbd2cSJim Jagielski
511*b1cdbd2cSJim Jagielski        Dim a1 As Any = New Any(True)
512*b1cdbd2cSJim Jagielski        Dim a2 As Any = xLBT.transportAny( a1 )
513*b1cdbd2cSJim Jagielski	    bReturn = compareData(a2, a1) And bReturn
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski        Dim a3 As Any = New Any("A"C)
516*b1cdbd2cSJim Jagielski	    Dim a4 As Any = xLBT.transportAny(a3)
517*b1cdbd2cSJim Jagielski	    bReturn = compareData(a4, a3) And bReturn
518*b1cdbd2cSJim Jagielski
519*b1cdbd2cSJim Jagielski	    Return bReturn
520*b1cdbd2cSJim Jagielski    End Function
521*b1cdbd2cSJim Jagielski
522*b1cdbd2cSJim Jagielski    Private Shared Function performSequenceOfCallTest(xLBT As XBridgeTest) As Boolean
523*b1cdbd2cSJim Jagielski
524*b1cdbd2cSJim Jagielski	    Dim i, nRounds As Integer
525*b1cdbd2cSJim Jagielski	    Dim nGlobalIndex As Integer = 0
526*b1cdbd2cSJim Jagielski	    const nWaitTimeSpanMUSec As Integer = 10000
527*b1cdbd2cSJim Jagielski	    For nRounds = 0 To 9
528*b1cdbd2cSJim Jagielski		    For i = 0 To  nRounds - 1
529*b1cdbd2cSJim Jagielski			    ' fire oneways
530*b1cdbd2cSJim Jagielski			    xLBT.callOneway(nGlobalIndex, nWaitTimeSpanMUSec)
531*b1cdbd2cSJim Jagielski			    nGlobalIndex = nGlobalIndex + 1
532*b1cdbd2cSJim Jagielski		    Next
533*b1cdbd2cSJim Jagielski
534*b1cdbd2cSJim Jagielski		    ' call synchron
535*b1cdbd2cSJim Jagielski		    xLBT.call(nGlobalIndex, nWaitTimeSpanMUSec)
536*b1cdbd2cSJim Jagielski		    nGlobalIndex = nGlobalIndex + 1
537*b1cdbd2cSJim Jagielski	    Next
538*b1cdbd2cSJim Jagielski 	    Return xLBT.sequenceOfCallTestPassed()
539*b1cdbd2cSJim Jagielski    End Function
540*b1cdbd2cSJim Jagielski
541*b1cdbd2cSJim Jagielski    Private Shared Function performRecursiveCallTest(xLBT As XBridgeTest) As Boolean
542*b1cdbd2cSJim Jagielski	    xLBT.startRecursiveCall(new ORecursiveCall(), 50)
543*b1cdbd2cSJim Jagielski	    ' on failure, the test would lock up or crash
544*b1cdbd2cSJim Jagielski	    Return True
545*b1cdbd2cSJim Jagielski    End Function
546*b1cdbd2cSJim Jagielski
547*b1cdbd2cSJim Jagielski
548*b1cdbd2cSJim Jagielski    Private Shared Function performTest(xLBT As XBridgeTest) As Boolean
549*b1cdbd2cSJim Jagielski	    check( Not xLBT Is Nothing, "### no test interface!" )
550*b1cdbd2cSJim Jagielski        Dim bRet As Boolean = True
551*b1cdbd2cSJim Jagielski	    If xLBT Is Nothing
552*b1cdbd2cSJim Jagielski            Return False
553*b1cdbd2cSJim Jagielski        End If
554*b1cdbd2cSJim Jagielski		'this data is never ever granted access to by calls other than equals(), assign()!
555*b1cdbd2cSJim Jagielski		Dim aData As New TestDataElements' test against this data
556*b1cdbd2cSJim Jagielski		Dim xI As New WeakBase
557*b1cdbd2cSJim Jagielski
558*b1cdbd2cSJim Jagielski        Dim aAny As New Any(GetType(System.Object), xI)
559*b1cdbd2cSJim Jagielski		assign( DirectCast(aData, TestElement), _
560*b1cdbd2cSJim Jagielski			True, "@"C, 17, &H1234, Convert.ToUInt16(&HdcS), &H12345678, _
561*b1cdbd2cSJim Jagielski            Convert.ToUInt32(4294967294), _
562*b1cdbd2cSJim Jagielski			&H123456789abcdef0, Convert.ToUInt64(14294967294), _
563*b1cdbd2cSJim Jagielski			17.0815f, 3.1415926359, TestEnum.LOLA, _
564*b1cdbd2cSJim Jagielski			CONSTANTS.STRING_TEST_CONSTANT, xI, _
565*b1cdbd2cSJim Jagielski			aAny)
566*b1cdbd2cSJim Jagielski
567*b1cdbd2cSJim Jagielski		bRet = check( aData.Any.Value Is xI, "### unexpected any!" ) And bRet
568*b1cdbd2cSJim Jagielski
569*b1cdbd2cSJim Jagielski		aData.Sequence = New TestElement(1){}
570*b1cdbd2cSJim Jagielski        aData.Sequence(0) = New TestElement( _
571*b1cdbd2cSJim Jagielski			aData.Bool, aData.Char, aData.Byte, aData.Short, _
572*b1cdbd2cSJim Jagielski			aData.UShort, aData.Long, aData.ULong, _
573*b1cdbd2cSJim Jagielski			aData.Hyper, aData.UHyper, aData.Float, _
574*b1cdbd2cSJim Jagielski			aData.Double, aData.Enum, aData.String, _
575*b1cdbd2cSJim Jagielski			aData.Interface, aData.Any)
576*b1cdbd2cSJim Jagielski        aData.Sequence(1) = New TestElement 'is empty
577*b1cdbd2cSJim Jagielski
578*b1cdbd2cSJim Jagielski		' aData complete
579*b1cdbd2cSJim Jagielski		'
580*b1cdbd2cSJim Jagielski		' this is a manually copy of aData for first setting...
581*b1cdbd2cSJim Jagielski		Dim aSetData As New TestDataElements
582*b1cdbd2cSJim Jagielski		Dim aAnySet As New Any(GetType(System.Object), xI)
583*b1cdbd2cSJim Jagielski		assign( DirectCast(aSetData, TestElement), _
584*b1cdbd2cSJim Jagielski				aData.Bool, aData.Char, aData.Byte, aData.Short, aData.UShort, _
585*b1cdbd2cSJim Jagielski				aData.Long, aData.ULong, aData.Hyper, aData.UHyper, aData.Float, _
586*b1cdbd2cSJim Jagielski                aData.Double, aData.Enum, aData.String, xI, aAnySet)
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski		aSetData.Sequence = New TestElement(1){}
589*b1cdbd2cSJim Jagielski        aSetData.Sequence(0) = New TestElement( _
590*b1cdbd2cSJim Jagielski			aSetData.Bool, aSetData.Char, aSetData.Byte, aSetData.Short, _
591*b1cdbd2cSJim Jagielski			aSetData.UShort, aSetData.Long, aSetData.ULong, _
592*b1cdbd2cSJim Jagielski			aSetData.Hyper, aSetData.UHyper, aSetData.Float, _
593*b1cdbd2cSJim Jagielski			aSetData.Double, aSetData.Enum, aSetData.String, _
594*b1cdbd2cSJim Jagielski			aSetData.Interface, aSetData.Any)
595*b1cdbd2cSJim Jagielski        aSetData.Sequence(1) = New TestElement ' empty struct
596*b1cdbd2cSJim Jagielski
597*b1cdbd2cSJim Jagielski		xLBT.setValues( _
598*b1cdbd2cSJim Jagielski				aSetData.Bool, aSetData.Char, aSetData.Byte, aSetData.Short, _
599*b1cdbd2cSJim Jagielski                aSetData.UShort, aSetData.Long, aSetData.ULong, _
600*b1cdbd2cSJim Jagielski                aSetData.Hyper, aSetData.UHyper, aSetData.Float, _
601*b1cdbd2cSJim Jagielski                aSetData.Double, aSetData.Enum, aSetData.String, _
602*b1cdbd2cSJim Jagielski                aSetData.Interface, aSetData.Any, aSetData.Sequence, _
603*b1cdbd2cSJim Jagielski                aSetData )
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski
606*b1cdbd2cSJim Jagielski		Dim aRet As New TestDataElements
607*b1cdbd2cSJim Jagielski        Dim aRet2 As New TestDataElements
608*b1cdbd2cSJim Jagielski		xLBT.getValues( _
609*b1cdbd2cSJim Jagielski			aRet.Bool, aRet.Char, aRet.Byte, aRet.Short, _
610*b1cdbd2cSJim Jagielski            aRet.UShort, aRet.Long, aRet.ULong, _
611*b1cdbd2cSJim Jagielski            aRet.Hyper, aRet.UHyper, aRet.Float, _
612*b1cdbd2cSJim Jagielski            aRet.Double, aRet.Enum, aRet.String, _
613*b1cdbd2cSJim Jagielski            aRet.Interface, aRet.Any, aRet.Sequence, _
614*b1cdbd2cSJim Jagielski            aRet2 )
615*b1cdbd2cSJim Jagielski
616*b1cdbd2cSJim Jagielski		bRet = check( compareData( aData, aRet ) And _
617*b1cdbd2cSJim Jagielski                      compareData( aData, aRet2 ) , "getValues test") And bRet
618*b1cdbd2cSJim Jagielski
619*b1cdbd2cSJim Jagielski		' set last retrieved values
620*b1cdbd2cSJim Jagielski		Dim  aSV2ret As TestDataElements= xLBT.setValues2( _
621*b1cdbd2cSJim Jagielski			aRet.Bool, aRet.Char, aRet.Byte, _
622*b1cdbd2cSJim Jagielski            aRet.Short, aRet.UShort, aRet.Long, _
623*b1cdbd2cSJim Jagielski            aRet.ULong, aRet.Hyper, aRet.UHyper, _
624*b1cdbd2cSJim Jagielski            aRet.Float, aRet.Double, aRet.Enum, _
625*b1cdbd2cSJim Jagielski            aRet.String, aRet.Interface, aRet.Any, _
626*b1cdbd2cSJim Jagielski            aRet.Sequence, aRet2 )
627*b1cdbd2cSJim Jagielski
628*b1cdbd2cSJim Jagielski        ' check inout sequence order
629*b1cdbd2cSJim Jagielski        ' => inout sequence parameter was switched by test objects
630*b1cdbd2cSJim Jagielski		Dim temp As TestElement = aRet.Sequence( 0 )
631*b1cdbd2cSJim Jagielski        aRet.Sequence( 0 ) = aRet.Sequence( 1 )
632*b1cdbd2cSJim Jagielski        aRet.Sequence( 1 ) = temp
633*b1cdbd2cSJim Jagielski
634*b1cdbd2cSJim Jagielski		bRet = check( _
635*b1cdbd2cSJim Jagielski            compareData( aData, aSV2ret ) And compareData( aData, aRet2 ), _
636*b1cdbd2cSJim Jagielski            "getValues2 test") And bRet
637*b1cdbd2cSJim Jagielski
638*b1cdbd2cSJim Jagielski
639*b1cdbd2cSJim Jagielski		aRet = New TestDataElements
640*b1cdbd2cSJim Jagielski        aRet2 = New TestDataElements
641*b1cdbd2cSJim Jagielski		Dim  aGVret As TestDataElements= xLBT.getValues( _
642*b1cdbd2cSJim Jagielski			aRet.Bool, aRet.Char, aRet.Byte, _
643*b1cdbd2cSJim Jagielski            aRet.Short, aRet.UShort, aRet.Long, _
644*b1cdbd2cSJim Jagielski            aRet.ULong, aRet.Hyper, aRet.UHyper, _
645*b1cdbd2cSJim Jagielski            aRet.Float, aRet.Double, aRet.Enum, _
646*b1cdbd2cSJim Jagielski            aRet.String, aRet.Interface, aRet.Any, _
647*b1cdbd2cSJim Jagielski            aRet.Sequence, aRet2 )
648*b1cdbd2cSJim Jagielski
649*b1cdbd2cSJim Jagielski		bRet = check( compareData( aData, aRet ) And _
650*b1cdbd2cSJim Jagielski                      compareData( aData, aRet2 ) And _
651*b1cdbd2cSJim Jagielski                      compareData( aData, aGVret ), "getValues test" ) And bRet
652*b1cdbd2cSJim Jagielski
653*b1cdbd2cSJim Jagielski		' set last retrieved values
654*b1cdbd2cSJim Jagielski		xLBT.Bool = aRet.Bool
655*b1cdbd2cSJim Jagielski		xLBT.Char = aRet.Char
656*b1cdbd2cSJim Jagielski		xLBT.Byte = aRet.Byte
657*b1cdbd2cSJim Jagielski		xLBT.Short = aRet.Short
658*b1cdbd2cSJim Jagielski		xLBT.UShort = aRet.UShort
659*b1cdbd2cSJim Jagielski        xLBT.Long = aRet.Long
660*b1cdbd2cSJim Jagielski		xLBT.ULong = aRet.ULong
661*b1cdbd2cSJim Jagielski		xLBT.Hyper = aRet.Hyper
662*b1cdbd2cSJim Jagielski		xLBT.UHyper = aRet.UHyper
663*b1cdbd2cSJim Jagielski		xLBT.Float = aRet.Float
664*b1cdbd2cSJim Jagielski		xLBT.Double = aRet.Double
665*b1cdbd2cSJim Jagielski		xLBT.Enum = aRet.Enum
666*b1cdbd2cSJim Jagielski		xLBT.String = aRet.String
667*b1cdbd2cSJim Jagielski		xLBT.Interface = aRet.Interface
668*b1cdbd2cSJim Jagielski		xLBT.Any = aRet.Any
669*b1cdbd2cSJim Jagielski		xLBT.Sequence = aRet.Sequence
670*b1cdbd2cSJim Jagielski		xLBT.Struct = aRet2
671*b1cdbd2cSJim Jagielski
672*b1cdbd2cSJim Jagielski
673*b1cdbd2cSJim Jagielski		aRet = New TestDataElements
674*b1cdbd2cSJim Jagielski        aRet2 = New TestDataElements
675*b1cdbd2cSJim Jagielski		aRet.Hyper = xLBT.Hyper
676*b1cdbd2cSJim Jagielski		aRet.UHyper = xLBT.UHyper
677*b1cdbd2cSJim Jagielski		aRet.Float = xLBT.Float
678*b1cdbd2cSJim Jagielski		aRet.Double = xLBT.Double
679*b1cdbd2cSJim Jagielski		aRet.Byte = xLBT.Byte
680*b1cdbd2cSJim Jagielski		aRet.Char = xLBT.Char
681*b1cdbd2cSJim Jagielski		aRet.Bool = xLBT.Bool
682*b1cdbd2cSJim Jagielski		aRet.Short = xLBT.Short
683*b1cdbd2cSJim Jagielski		aRet.UShort = xLBT.UShort
684*b1cdbd2cSJim Jagielski		aRet.Long = xLBT.Long
685*b1cdbd2cSJim Jagielski		aRet.ULong = xLBT.ULong
686*b1cdbd2cSJim Jagielski		aRet.Enum = xLBT.Enum
687*b1cdbd2cSJim Jagielski		aRet.String = xLBT.String
688*b1cdbd2cSJim Jagielski		aRet.Interface = xLBT.Interface
689*b1cdbd2cSJim Jagielski		aRet.Any = xLBT.Any
690*b1cdbd2cSJim Jagielski		aRet.Sequence = xLBT.Sequence
691*b1cdbd2cSJim Jagielski		aRet2 = xLBT.Struct
692*b1cdbd2cSJim Jagielski
693*b1cdbd2cSJim Jagielski		bRet = check( compareData( aData, aRet ) And _
694*b1cdbd2cSJim Jagielski                      compareData( aData, aRet2 ) , "struct comparison test") _
695*b1cdbd2cSJim Jagielski                     And bRet
696*b1cdbd2cSJim Jagielski
697*b1cdbd2cSJim Jagielski		bRet = check(performSequenceTest(xLBT), "sequence test") And bRet
698*b1cdbd2cSJim Jagielski
699*b1cdbd2cSJim Jagielski		' any test
700*b1cdbd2cSJim Jagielski		bRet = check( performAnyTest( xLBT , aData ) , "any test" ) And bRet
701*b1cdbd2cSJim Jagielski
702*b1cdbd2cSJim Jagielski		'sequence of call test
703*b1cdbd2cSJim Jagielski		bRet = check( performSequenceOfCallTest( xLBT ) , _
704*b1cdbd2cSJim Jagielski                      "sequence of call test" ) And bRet
705*b1cdbd2cSJim Jagielski
706*b1cdbd2cSJim Jagielski		' recursive call test
707*b1cdbd2cSJim Jagielski		bRet = check( performRecursiveCallTest( xLBT ) , "recursive test" ) _
708*b1cdbd2cSJim Jagielski                And bRet
709*b1cdbd2cSJim Jagielski
710*b1cdbd2cSJim Jagielski		bRet = (compareData( aData, aRet ) And compareData( aData, aRet2 )) _
711*b1cdbd2cSJim Jagielski                And bRet
712*b1cdbd2cSJim Jagielski
713*b1cdbd2cSJim Jagielski        ' check setting of null reference
714*b1cdbd2cSJim Jagielski        xLBT.Interface = Nothing
715*b1cdbd2cSJim Jagielski        aRet.Interface = xLBT.Interface
716*b1cdbd2cSJim Jagielski        bRet = (aRet.Interface Is Nothing) And bRet
717*b1cdbd2cSJim Jagielski
718*b1cdbd2cSJim Jagielski        Return bRet
719*b1cdbd2cSJim Jagielski    End Function
720*b1cdbd2cSJim Jagielski
721*b1cdbd2cSJim Jagielski    Private Shared Function raiseException(xLBT As XBridgeTest) As Boolean
722*b1cdbd2cSJim Jagielski	    Dim nCount As Integer = 0
723*b1cdbd2cSJim Jagielski	    Try
724*b1cdbd2cSJim Jagielski		    Try
725*b1cdbd2cSJim Jagielski			    Try
726*b1cdbd2cSJim Jagielski				    Dim aRet As TestDataElements = New TestDataElements
727*b1cdbd2cSJim Jagielski                    Dim aRet2 As TestDataElements = New TestDataElements
728*b1cdbd2cSJim Jagielski				    xLBT.raiseException( _
729*b1cdbd2cSJim Jagielski					    5, CONSTANTS.STRING_TEST_CONSTANT, xLBT.Interface )
730*b1cdbd2cSJim Jagielski			    Catch  rExc As unoidl.com.sun.star.lang.IllegalArgumentException
731*b1cdbd2cSJim Jagielski				    If rExc.ArgumentPosition = 5 And _
732*b1cdbd2cSJim Jagielski                        rExc.Context Is xLBT.Interface
733*b1cdbd2cSJim Jagielski					    nCount = nCount + 1
734*b1cdbd2cSJim Jagielski				    Else
735*b1cdbd2cSJim Jagielski					    check( False, "### unexpected exception content!" )
736*b1cdbd2cSJim Jagielski				    End If
737*b1cdbd2cSJim Jagielski
738*b1cdbd2cSJim Jagielski				    'it is certain, that the RuntimeException testing will fail,
739*b1cdbd2cSJim Jagielski                    '    if no
740*b1cdbd2cSJim Jagielski				    xLBT.RuntimeException = 0
741*b1cdbd2cSJim Jagielski			    End Try
742*b1cdbd2cSJim Jagielski		    Catch rExc As unoidl.com.sun.star.uno.RuntimeException
743*b1cdbd2cSJim Jagielski			    If rExc.Context Is xLBT.Interface
744*b1cdbd2cSJim Jagielski			       nCount = nCount + 1
745*b1cdbd2cSJim Jagielski			    Else
746*b1cdbd2cSJim Jagielski				    check( False, "### unexpected exception content!" )
747*b1cdbd2cSJim Jagielski			    End If
748*b1cdbd2cSJim Jagielski                xLBT.RuntimeException = CType(&Hcafebabe, Integer)
749*b1cdbd2cSJim Jagielski    	    End Try
750*b1cdbd2cSJim Jagielski	    Catch rExc As unoidl.com.sun.star.uno.Exception
751*b1cdbd2cSJim Jagielski		    If rExc.Context Is xLBT.Interface
752*b1cdbd2cSJim Jagielski		        nCount = nCount + 1
753*b1cdbd2cSJim Jagielski		    Else
754*b1cdbd2cSJim Jagielski			    check( False, "### unexpected exception content!" )
755*b1cdbd2cSJim Jagielski            End If
756*b1cdbd2cSJim Jagielski		    Return nCount = 3
757*b1cdbd2cSJim Jagielski	    End Try
758*b1cdbd2cSJim Jagielski        Return False
759*b1cdbd2cSJim Jagielski    End Function
760*b1cdbd2cSJim Jagielski
761*b1cdbd2cSJim Jagielski    Private Shared Function raiseOnewayException(xLBT As XBridgeTest) As Boolean
762*b1cdbd2cSJim Jagielski        Dim bReturn As Boolean= True
763*b1cdbd2cSJim Jagielski	    Dim sCompare As String = CONSTANTS.STRING_TEST_CONSTANT
764*b1cdbd2cSJim Jagielski	    Try
765*b1cdbd2cSJim Jagielski		    ' Note : the exception may fly or not (e.g. remote scenario).
766*b1cdbd2cSJim Jagielski		    '        When it flies, it must contain the correct elements.
767*b1cdbd2cSJim Jagielski		    xLBT.raiseRuntimeExceptionOneway(sCompare, xLBT.Interface )
768*b1cdbd2cSJim Jagielski	    Catch e As RuntimeException
769*b1cdbd2cSJim Jagielski		    bReturn =  xLBT.Interface Is e.Context
770*b1cdbd2cSJim Jagielski	    End Try
771*b1cdbd2cSJim Jagielski        Return bReturn
772*b1cdbd2cSJim Jagielski    End Function
773*b1cdbd2cSJim Jagielski
774*b1cdbd2cSJim Jagielski    'Test the System::Object method on the proxy object
775*b1cdbd2cSJim Jagielski    '
776*b1cdbd2cSJim Jagielski    Private Shared Function testObjectMethodsImplemention(xLBT As XBridgeTest) As Boolean
777*b1cdbd2cSJim Jagielski        Dim ret As Boolean = False
778*b1cdbd2cSJim Jagielski        Dim obj As Object = New Object
779*b1cdbd2cSJim Jagielski	    Dim xInt As Object = DirectCast(xLBT, Object)
780*b1cdbd2cSJim Jagielski	    Dim xBase As XBridgeTestBase = DirectCast(xLBT, XBridgeTestBase)
781*b1cdbd2cSJim Jagielski	    ' Object.Equals
782*b1cdbd2cSJim Jagielski	    ret = DirectCast(xLBT, Object).Equals(obj) = False
783*b1cdbd2cSJim Jagielski	    ret = DirectCast(xLBT, Object).Equals(xLBT) And ret
784*b1cdbd2cSJim Jagielski	    ret = Object.Equals(obj, obj) And ret
785*b1cdbd2cSJim Jagielski	    ret = Object.Equals(xLBT, xBase) And ret
786*b1cdbd2cSJim Jagielski	    'Object.GetHashCode
787*b1cdbd2cSJim Jagielski	    ' Don't know how to verify this. Currently it is not possible to get the object id from a proxy
788*b1cdbd2cSJim Jagielski	    Dim nHash As Integer = DirectCast(xLBT, Object).GetHashCode()
789*b1cdbd2cSJim Jagielski	    ret = nHash = DirectCast(xBase, Object).GetHashCode() And ret
790*b1cdbd2cSJim Jagielski
791*b1cdbd2cSJim Jagielski	    'Object.ToString
792*b1cdbd2cSJim Jagielski        ' Don't know how to verify this automatically.
793*b1cdbd2cSJim Jagielski	    Dim s As String = DirectCast(xLBT, Object).ToString()
794*b1cdbd2cSJim Jagielski        ret = (s.Length > 0) And ret
795*b1cdbd2cSJim Jagielski        Return ret
796*b1cdbd2cSJim Jagielski    End Function
797*b1cdbd2cSJim Jagielski
798*b1cdbd2cSJim Jagielski    Private Shared Function performQueryForUnknownType(xLBT As XBridgeTest) As Boolean
799*b1cdbd2cSJim Jagielski        Dim bRet As Boolean = False
800*b1cdbd2cSJim Jagielski        ' test queryInterface for an unknown type
801*b1cdbd2cSJim Jagielski        Try
802*b1cdbd2cSJim Jagielski            Dim a As foo.MyInterface = DirectCast(xLBT, foo.MyInterface)
803*b1cdbd2cSJim Jagielski        Catch e As System.InvalidCastException
804*b1cdbd2cSJim Jagielski            bRet = True
805*b1cdbd2cSJim Jagielski        End Try
806*b1cdbd2cSJim Jagielski
807*b1cdbd2cSJim Jagielski        Return bRet
808*b1cdbd2cSJim Jagielski    End Function
809*b1cdbd2cSJim Jagielski
810*b1cdbd2cSJim Jagielski
811*b1cdbd2cSJim Jagielski    Private Shared Sub perform_test( xLBT As XBridgeTest)
812*b1cdbd2cSJim Jagielski        Dim bRet As Boolean = True
813*b1cdbd2cSJim Jagielski        bRet = check( performTest( xLBT ), "standard test" ) And bRet
814*b1cdbd2cSJim Jagielski        bRet = check( raiseException( xLBT ) , "exception test" ) And bRet
815*b1cdbd2cSJim Jagielski        bRet = check( raiseOnewayException( xLBT ), "oneway exception test" ) _
816*b1cdbd2cSJim Jagielski               And bRet
817*b1cdbd2cSJim Jagielski        bRet = check( testObjectMethodsImplemention(xLBT), _
818*b1cdbd2cSJim Jagielski               "object methods test") And bRet
819*b1cdbd2cSJim Jagielski        bRet = performQueryForUnknownType( xLBT ) And bRet
820*b1cdbd2cSJim Jagielski        If  Not bRet
821*b1cdbd2cSJim Jagielski            Throw New unoidl.com.sun.star.uno.RuntimeException( "error: test failed!", Nothing)
822*b1cdbd2cSJim Jagielski        End If
823*b1cdbd2cSJim Jagielski    End Sub
824*b1cdbd2cSJim Jagielski
825*b1cdbd2cSJim Jagielski
826*b1cdbd2cSJim Jagielski
827*b1cdbd2cSJim Jagielski    Public Overridable Function run(args() As String) As Integer _
828*b1cdbd2cSJim Jagielski	   Implements XMain.run
829*b1cdbd2cSJim Jagielski        Try
830*b1cdbd2cSJim Jagielski            If (args.Length < 1)
831*b1cdbd2cSJim Jagielski                Throw New RuntimeException( _
832*b1cdbd2cSJim Jagielski                    "missing argument for bridgetest!", Me )
833*b1cdbd2cSJim Jagielski            End If
834*b1cdbd2cSJim Jagielski
835*b1cdbd2cSJim Jagielski            Dim test_obj As Object = _
836*b1cdbd2cSJim Jagielski                m_xContext.getServiceManager().createInstanceWithContext( _
837*b1cdbd2cSJim Jagielski                    args( 0 ), m_xContext )
838*b1cdbd2cSJim Jagielski
839*b1cdbd2cSJim Jagielski            Debug.WriteLine( _
840*b1cdbd2cSJim Jagielski                "cli target bridgetest obj: {0}", test_obj.ToString() )
841*b1cdbd2cSJim Jagielski            Dim xTest As XBridgeTest = DirectCast(test_obj, XBridgeTest)
842*b1cdbd2cSJim Jagielski            perform_test( xTest )
843*b1cdbd2cSJim Jagielski            Console.WriteLine("### cli_uno VB bridgetest succeeded.")
844*b1cdbd2cSJim Jagielski            return 0
845*b1cdbd2cSJim Jagielski	Catch e as unoidl.com.sun.star.uno.RuntimeException
846*b1cdbd2cSJim Jagielski	     Throw
847*b1cdbd2cSJim Jagielski        Catch e as System.Exception
848*b1cdbd2cSJim Jagielski	      Throw New unoidl.com.sun.star.uno.RuntimeException( _
849*b1cdbd2cSJim Jagielski		    "cli_vb_bridgetest.vb: unexpected exception occured in XMain::run. " _
850*b1cdbd2cSJim Jagielski		    & "Original exception: " + e.GetType().Name + "\n Message: " _
851*b1cdbd2cSJim Jagielski		    & e.Message , Nothing)
852*b1cdbd2cSJim Jagielski
853*b1cdbd2cSJim Jagielski        End Try
854*b1cdbd2cSJim Jagielski    End Function
855*b1cdbd2cSJim Jagielski
856*b1cdbd2cSJim JagielskiEnd Class
857*b1cdbd2cSJim Jagielski
858*b1cdbd2cSJim JagielskiEnd Namespace
859