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