forked from amazingfate/loongoffice
20 builds in a row with the old value all succeeded for me on F38 anyway, so if the problem still exists this almost certainly doesn't do anything. But it's nice for debugging to use something that is printed the same by a debugger as seen in the source. also see: tdf#125978 Change-Id: I42dc5f18c22acc006bffb57578bacb65dbc16013 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143116 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
917 lines
35 KiB
VB.net
917 lines
35 KiB
VB.net
'
|
|
' This file is part of the LibreOffice project.
|
|
'
|
|
' This Source Code Form is subject to the terms of the Mozilla Public
|
|
' License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
' file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
'
|
|
' This file incorporates work covered by the following license notice:
|
|
'
|
|
' Licensed to the Apache Software Foundation (ASF) under one or more
|
|
' contributor license agreements. See the NOTICE file distributed
|
|
' with this work for additional information regarding copyright
|
|
' ownership. The ASF licenses this file to you under the Apache
|
|
' License, Version 2.0 (the "License"); you may not use this file
|
|
' except in compliance with the License. You may obtain a copy of
|
|
' the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
'
|
|
|
|
Option Explicit On
|
|
Option Strict On
|
|
|
|
imports System
|
|
imports uno
|
|
imports uno.util
|
|
imports unoidl.com.sun.star.lang
|
|
imports unoidl.com.sun.star.uno
|
|
'imports unoidl.com.sun.star.test.bridge
|
|
imports unoidl.test.testtools.bridgetest
|
|
imports System.Windows.Forms
|
|
imports System.Diagnostics
|
|
imports System.Reflection
|
|
|
|
Class CONSTANTS
|
|
Friend Shared STRING_TEST_CONSTANT As String = """ paco\' chorizo\\\' ""\'"
|
|
End Class
|
|
|
|
Namespace foo
|
|
|
|
Public Interface MyInterface
|
|
End Interface
|
|
End Namespace
|
|
|
|
Namespace vb_bridetest
|
|
Class ORecursiveCall
|
|
Inherits WeakBase
|
|
Implements XRecursiveCall
|
|
|
|
Overridable Sub callRecursivly(xCall As XRecursiveCall, nToCall As Integer) _
|
|
Implements XRecursiveCall.callRecursivly
|
|
SyncLock Me
|
|
If nToCall > 0
|
|
nToCall = nToCall - 1
|
|
xCall.callRecursivly(Me, nToCall)
|
|
End If
|
|
End SyncLock
|
|
End Sub
|
|
End Class
|
|
|
|
|
|
|
|
|
|
Public Class BridgeTest
|
|
Inherits uno.util.WeakBase
|
|
Implements XMain
|
|
|
|
Private m_xContext As XComponentContext
|
|
|
|
Public Sub New( xContext As unoidl.com.sun.star.uno.XComponentContext )
|
|
mybase.New()
|
|
m_xContext = xContext
|
|
End Sub
|
|
|
|
Private Shared Function check( b As Boolean , message As String ) As Boolean
|
|
If Not b
|
|
Console.WriteLine("{0} failed\n" , message)
|
|
End If
|
|
Return b
|
|
End Function
|
|
|
|
Private Shared Sub assign( rData As TestElement, bBool As Boolean, _
|
|
aChar As Char, nByte As Byte, nShort As Short, nUShort As UInt16, _
|
|
nLong As Integer, nULong As UInt32, nHyper As Long, _
|
|
UHyper As UInt64, fFloat As Single, fDouble As Double, _
|
|
eEnum As TestEnum, rStr As String, _
|
|
nByte2 As Byte, nShort2 As Short, _
|
|
xTest As Object, _
|
|
rAny As Any)
|
|
|
|
rData.Bool = bBool
|
|
rData.Char = aChar
|
|
rData.Byte = nByte
|
|
rData.Short = nShort
|
|
rData.UShort = nUShort
|
|
rData.Long = nLong
|
|
rData.ULong = nULong
|
|
rData.Hyper = nHyper
|
|
rData.UHyper = nUHyper
|
|
rData.Float = fFloat
|
|
rData.Double = fDouble
|
|
rData.Enum = eEnum
|
|
rData.String = rStr
|
|
rData.Byte2 = nByte2
|
|
rData.Short2 = nShort2
|
|
rData.Interface = xTest
|
|
rData.Any = rAny
|
|
End Sub
|
|
|
|
Private Shared Sub assign( rData As TestDataElements, bBool As Boolean, _
|
|
aChar As Char, nByte As Byte, nShort As Short, nUShort As UInt16, _
|
|
nLong As Integer, nULong As UInt32, nHyper As Long, _
|
|
nUHyper As UInt64, fFloat As Single, fDouble As Double, _
|
|
eEnum As TestEnum, rStr As String, _
|
|
nByte2 As Byte, nShort2 As Short, _
|
|
xTest As Object, _
|
|
rAny As Any, rSequence() As TestElement)
|
|
|
|
assign( DirectCast( rData,TestElement), _
|
|
bBool, aChar, nByte, nShort, nUShort, nLong, nULong, nHyper, _
|
|
nUHyper, fFloat, fDouble, eEnum, rStr, nByte2, nShort2, xTest, rAny )
|
|
rData.Sequence = rSequence
|
|
End Sub
|
|
|
|
Private Shared Function compareData(val1 As Object, val2 As Object) As Boolean
|
|
If val1 Is Nothing And val2 Is Nothing OrElse _
|
|
val1 Is val2
|
|
Return True
|
|
End If
|
|
If val1 Is Nothing And Not(val2 Is Nothing) OrElse _
|
|
Not (val1 Is Nothing) And val2 Is Nothing OrElse _
|
|
Not val1.GetType().Equals( val2.GetType())
|
|
Return False
|
|
End If
|
|
|
|
Dim ret As Boolean = False
|
|
Dim t1 As Type = val1.GetType()
|
|
'Sequence
|
|
If t1.IsArray()
|
|
ret = compareSequence(DirectCast( val1, Array), _
|
|
DirectCast( val2, Array))
|
|
'String
|
|
ElseIf TypeOf val1 Is String
|
|
ret = DirectCast( val1, string) = DirectCast( val2, string)
|
|
' Interface implementation
|
|
ElseIf t1.GetInterfaces().Length > 0 And Not t1.IsValueType
|
|
ret = val1 Is val2
|
|
' Struct
|
|
ElseIf Not t1.IsValueType
|
|
ret = compareStruct(val1, val2)
|
|
ElseIf TypeOf val1 Is Any
|
|
Dim a1 As Any = DirectCast( val1, Any)
|
|
Dim a2 As Any = DirectCast( val2, Any)
|
|
ret = a1.Type.Equals( a2.Type ) And compareData( a1.Value, a2.Value )
|
|
ElseIf t1.IsValueType
|
|
'Any, enum, int, bool char, float, double etc.
|
|
ret = val1.Equals(val2)
|
|
Else
|
|
Debug.Assert(False)
|
|
End If
|
|
Return ret
|
|
End Function
|
|
|
|
' Arrays have only one dimension
|
|
Private Shared Function compareSequence( ar1 As Array, ar2 As Array) As Boolean
|
|
Debug.Assert( Not (ar1 Is Nothing) And Not (ar2 Is Nothing) )
|
|
Dim t1 As Type = ar1.GetType()
|
|
Dim t2 As Type = ar2.GetType()
|
|
|
|
if ( Not(ar1.Rank = 1 And ar2.Rank = 1 _
|
|
And ar1.Length = ar2.Length And t1.GetElementType().Equals(t2.GetElementType())))
|
|
return False
|
|
End If
|
|
'arrays have same rank and size and element type.
|
|
Dim len As Integer = ar1.Length
|
|
Dim elemType As Type = t1.GetElementType()
|
|
Dim ret As Boolean = True
|
|
Dim i As Integer
|
|
For i = 0 To len - 1
|
|
If (compareData(ar1.GetValue(i), ar2.GetValue(i)) = False)
|
|
ret = False
|
|
Exit For
|
|
End If
|
|
Next i
|
|
|
|
Return ret
|
|
End Function
|
|
|
|
Private Shared Function compareStruct( val1 As Object, val2 As Object) As Boolean
|
|
Debug.Assert( Not(val1 Is Nothing) And Not(val2 Is Nothing))
|
|
Dim t1 As Type = val1.GetType()
|
|
Dim t2 As Type = val2.GetType()
|
|
If Not t1.Equals(t2)
|
|
Return False
|
|
End If
|
|
Dim fields() As FieldInfo = t1.GetFields()
|
|
Dim cFields As Integer = fields.Length
|
|
Dim ret As Boolean = True
|
|
Dim i As Integer
|
|
For i = 0 To cFields - 1
|
|
Dim fieldVal1 As Object = fields(i).GetValue(val1)
|
|
Dim fieldVal2 As Object = fields(i).GetValue(val2)
|
|
If Not compareData(fieldVal1, fieldVal2)
|
|
ret = False
|
|
Exit For
|
|
End If
|
|
Next i
|
|
Return ret
|
|
End Function
|
|
|
|
|
|
Private Shared Function performSequenceTest(xBT As XBridgeTest) As Boolean
|
|
Dim bRet As Boolean = True
|
|
'Automati cast ?? like with COM objects
|
|
Dim xBT2 As XBridgeTest2
|
|
Try
|
|
xBT2 = DirectCast(xBT,XBridgeTest2)
|
|
Catch e As InvalidCastException
|
|
Return False
|
|
End Try
|
|
|
|
' perform sequence tests (XBridgeTest2)
|
|
'create the sequence which are compared with the results
|
|
Dim arBool() As Boolean = {True, False, True}
|
|
Dim arChar() As Char = {"A"C,"B"C,"C"C}
|
|
Dim arByte() As Byte = { 1, 2, &Hff}
|
|
Dim arShort() As Short = {Int16.MinValue, 1, Int16.MaxValue}
|
|
Dim arUShort() As UInt16 = {Convert.ToUInt16(0), Convert.ToUInt16(1), _
|
|
Convert.ToUInt16(&Hffff)}
|
|
Dim arLong() As Integer = {Int32.MinValue, 1, Int32.MaxValue}
|
|
Dim arULong() As UInt32 = {Convert.ToUInt32(0), Convert.ToUInt32(1), _
|
|
Convert.ToUInt32(&HffffffffL)}
|
|
Dim arHyper() As Long = {Int64.MinValue, 1, Int64.MaxValue}
|
|
Dim arUHyper() As UInt64 = {Convert.ToUInt64(0), Convert.ToUInt64(1), _
|
|
Convert.ToUInt64(&Hffffffff5L)}
|
|
Dim arFloat() As Single = {1.1f, 2.2f, 3.3f}
|
|
Dim arDouble() As Double = {1.11, 2.22, 3.33}
|
|
Dim arString() As String = {"String 1", "String 2", "String 3"}
|
|
|
|
Dim arAny() As Any = {New Any(True), New Any(11111), New Any(3.14)}
|
|
Dim arObject() As Object = {New WeakBase(), New WeakBase(), New WeakBase()}
|
|
Dim arEnum() As TestEnum = {TestEnum.ONE, TestEnum.TWO, TestEnum.CHECK}
|
|
|
|
Dim arStruct() As TestElement = {New TestElement(), New TestElement(), _
|
|
New TestElement()}
|
|
assign( arStruct(0), True, "@"C, 17, &H1234, Convert.ToUInt16(&Hfedc), _
|
|
&H12345678, Convert.ToUInt32(&H123456), &H123456789abcdef0, _
|
|
Convert.ToUInt64(123456788), 17.03125F, 3.1415926359, _
|
|
TestEnum.LOLA, CONSTANTS.STRING_TEST_CONSTANT, 18, &H5678, arObject(0), _
|
|
New Any(GetType(System.Object), arObject(0)))
|
|
assign( arStruct(1), True, "A"C, 17, &H1234, Convert.ToUInt16(&Hfedc), _
|
|
&H12345678, Convert.ToUInt32(&H123456), &H123456789abcdef0, _
|
|
Convert.ToUInt64(12345678), 17.03125F, 3.1415926359, _
|
|
TestEnum.TWO, CONSTANTS.STRING_TEST_CONSTANT, 18, &H5678, arObject(1), _
|
|
New Any(GetType(System.Object), arObject(1)) )
|
|
assign( arStruct(2), True, "B"C, 17, &H1234, Convert.ToUInt16(&Hfedc), _
|
|
&H12345678, Convert.ToUInt32(654321), &H123456789abcdef0, _
|
|
Convert.ToUInt64(87654321), 17.03125F, 3.1415926359, _
|
|
TestEnum.CHECK, Constants.STRING_TEST_CONSTANT, 18, &H5678, arObject(2), _
|
|
New Any(GetType(System.Object), arObject(2)))
|
|
|
|
|
|
Dim arLong3()()() As Integer = New Integer()()() { _
|
|
New Integer()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9} }, _
|
|
New Integer ()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9}}, _
|
|
New Integer()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9}}}
|
|
|
|
Dim seqSeqRet()() As Integer = xBT2.setDim2(arLong3(0))
|
|
bRet = check( compareData(seqSeqRet, arLong3(0)), "sequence test") _
|
|
And bRet
|
|
Dim seqSeqRet2()()() As Integer = xBT2.setDim3(arLong3)
|
|
bRet = check( compareData(seqSeqRet2, arLong3), "sequence test") _
|
|
And bRet
|
|
Dim seqAnyRet() As Any = xBT2.setSequenceAny(arAny)
|
|
bRet = check( compareData(seqAnyRet, arAny), "sequence test") And bRet
|
|
Dim seqBoolRet() As Boolean = xBT2.setSequenceBool(arBool)
|
|
bRet = check( compareData(seqBoolRet, arBool), "sequence test") _
|
|
And bRet
|
|
Dim seqByteRet() As Byte = xBT2.setSequenceByte(arByte)
|
|
bRet = check( compareData(seqByteRet, arByte), "sequence test") _
|
|
And bRet
|
|
Dim seqCharRet() As Char = xBT2.setSequenceChar(arChar)
|
|
bRet = check( compareData(seqCharRet, arChar), "sequence test") _
|
|
And bRet
|
|
Dim seqShortRet() As Short = xBT2.setSequenceShort(arShort)
|
|
bRet = check( compareData(seqShortRet, arShort), "sequence test") _
|
|
And bRet
|
|
Dim seqLongRet() As Integer = xBT2.setSequenceLong(arLong)
|
|
bRet = check( compareData(seqLongRet, arLong), "sequence test") _
|
|
And bRet
|
|
Dim seqHyperRet() As Long = xBT2.setSequenceHyper(arHyper)
|
|
bRet = check( compareData(seqHyperRet,arHyper), "sequence test") _
|
|
And bRet
|
|
Dim seqFloatRet() As Single = xBT2.setSequenceFloat(arFloat)
|
|
bRet = check( compareData(seqFloatRet, arFloat), "sequence test") _
|
|
And bRet
|
|
Dim seqDoubleRet() As Double= xBT2.setSequenceDouble(arDouble)
|
|
bRet = check( compareData(seqDoubleRet, arDouble), "sequence test") _
|
|
And bRet
|
|
Dim seqEnumRet() As TestEnum = xBT2.setSequenceEnum(arEnum)
|
|
bRet = check( compareData(seqEnumRet, arEnum), "sequence test") _
|
|
And bRet
|
|
Dim seqUShortRet() As UInt16 = xBT2.setSequenceUShort(arUShort)
|
|
bRet = check( compareData(seqUShortRet, arUShort), "sequence test") _
|
|
And bRet
|
|
Dim seqULongRet() As UInt32 = xBT2.setSequenceULong(arULong)
|
|
bRet = check( compareData(seqULongRet, arULong), "sequence test") _
|
|
And bRet
|
|
Dim seqUHyperRet() As UInt64 = xBT2.setSequenceUHyper(arUHyper)
|
|
bRet = check( compareData(seqUHyperRet, arUHyper), "sequence test") _
|
|
And bRet
|
|
Dim seqObjectRet() As Object = xBT2.setSequenceXInterface(arObject)
|
|
bRet = check( compareData(seqObjectRet, arObject), "sequence test") _
|
|
And bRet
|
|
Dim seqStringRet() As String = xBT2.setSequenceString(arString)
|
|
bRet = check( compareData(seqStringRet, arString), "sequence test") _
|
|
And bRet
|
|
Dim seqStructRet() As TestElement = xBT2.setSequenceStruct(arStruct)
|
|
bRet = check( compareData(seqStructRet, arStruct), "sequence test") _
|
|
And bRet
|
|
|
|
|
|
Dim arBoolTemp() As Boolean = DirectCast(arBool.Clone(), Boolean())
|
|
Dim arCharTemp() As Char = DirectCast(arChar.Clone(), Char())
|
|
Dim arByteTemp() As Byte = DirectCast(arByte.Clone(), Byte())
|
|
Dim arShortTemp() As Short = DirectCast(arShort.Clone(), Short())
|
|
Dim arUShortTemp() As UInt16 = DirectCast(arUShort.Clone(), UInt16())
|
|
Dim arLongTemp() As Integer= DirectCast(arLong.Clone(), Integer())
|
|
Dim arULongTemp() As UInt32 = DirectCast(arULong.Clone(), UInt32())
|
|
Dim arHyperTemp() As Long = DirectCast(arHyper.Clone(), Long())
|
|
Dim arUHyperTemp() As UInt64 = DirectCast(arUHyper.Clone(), UInt64())
|
|
Dim arFloatTemp() As Single = DirectCast(arFloat.Clone(), Single())
|
|
Dim arDoubleTemp() As Double = DirectCast(arDouble.Clone(), Double())
|
|
Dim arEnumTemp() As TestEnum = DirectCast(arEnum.Clone(), TestEnum())
|
|
Dim arStringTemp() As String = DirectCast(arString.Clone(), String())
|
|
Dim arObjectTemp() As Object = DirectCast(arObject.Clone(), Object())
|
|
Dim arAnyTemp() As Any = DirectCast(arAny.Clone(), Any())
|
|
' make sure this are has the same contents as arLong3(0)
|
|
Dim arLong2Temp()() As Integer = New Integer()(){New Integer(){1,2,3}, _
|
|
New Integer(){4,5,6}, New Integer(){7,8,9} }
|
|
' make sure this are has the same contents as arLong3
|
|
Dim arLong3Temp()()() As Integer = New Integer()()(){ _
|
|
New Integer()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9} }, _
|
|
New Integer ()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9}}, _
|
|
New Integer()(){New Integer(){1,2,3},New Integer(){4,5,6}, New Integer(){7,8,9}}}
|
|
|
|
xBT2.setSequencesInOut( arBoolTemp, arCharTemp, arByteTemp, _
|
|
arShortTemp, arUShortTemp, arLongTemp, _
|
|
arULongTemp, arHyperTemp, arUHyperTemp, _
|
|
arFloatTemp, arDoubleTemp, arEnumTemp, _
|
|
arStringTemp, arObjectTemp, _
|
|
arAnyTemp, arLong2Temp, arLong3Temp)
|
|
bRet = check( _
|
|
compareData(arBoolTemp, arBool) And _
|
|
compareData(arCharTemp , arChar) And _
|
|
compareData(arByteTemp , arByte) And _
|
|
compareData(arShortTemp , arShort) And _
|
|
compareData(arUShortTemp , arUShort) And _
|
|
compareData(arLongTemp , arLong) And _
|
|
compareData(arULongTemp , arULong) And _
|
|
compareData(arHyperTemp , arHyper) And _
|
|
compareData(arUHyperTemp , arUHyper) And _
|
|
compareData(arFloatTemp , arFloat) And _
|
|
compareData(arDoubleTemp , arDouble) And _
|
|
compareData(arEnumTemp , arEnum) And _
|
|
compareData(arStringTemp , arString) And _
|
|
compareData(arObjectTemp , arObject) And _
|
|
compareData(arAnyTemp , arAny) And _
|
|
compareData(arLong2Temp , arLong3(0)) And _
|
|
compareData(arLong3Temp , arLong3), "sequence test") And bRet
|
|
|
|
Dim arBoolOut() As Boolean
|
|
Dim arCharOut() As Char
|
|
Dim arByteOut() As Byte
|
|
Dim arShortOut() As Short
|
|
Dim arUShortOut() As UInt16
|
|
Dim arLongOut() As Integer
|
|
Dim arULongOut() As UInt32
|
|
Dim arHyperOut() As Long
|
|
Dim arUHyperOut() As UInt64
|
|
Dim arFloatOut() As Single
|
|
Dim arDoubleOut() As Double
|
|
Dim arEnumOut() As TestEnum
|
|
Dim arStringOut() As String
|
|
Dim arObjectOut() As Object
|
|
Dim arAnyOut() As Any
|
|
Dim arLong2Out()() As Integer
|
|
Dim arLong3Out()()() As Integer
|
|
|
|
xBT2.setSequencesOut( arBoolOut, arCharOut, arByteOut, _
|
|
arShortOut, arUShortOut, arLongOut, _
|
|
arULongOut, arHyperOut, arUHyperOut, _
|
|
arFloatOut, arDoubleOut, arEnumOut, _
|
|
arStringOut, arObjectOut, arAnyOut, _
|
|
arLong2Out, arLong3Out)
|
|
bRet = check( _
|
|
compareData(arBoolOut, arBool) And _
|
|
compareData(arCharOut, arChar) And _
|
|
compareData(arByteOut, arByte) And _
|
|
compareData(arShortOut, arShort) And _
|
|
compareData(arUShortOut, arUShort) And _
|
|
compareData(arLongOut, arLong) And _
|
|
compareData(arULongOut, arULong) And _
|
|
compareData(arHyperOut, arHyper) And _
|
|
compareData(arUHyperOut, arUHyper) And _
|
|
compareData(arFloatOut, arFloat) And _
|
|
compareData(arDoubleOut, arDouble) And _
|
|
compareData(arEnumOut, arEnum) And _
|
|
compareData(arStringOut, arString) And _
|
|
compareData(arObjectOut, arObject) And _
|
|
compareData(arAnyOut, arAny) And _
|
|
compareData(arLong2Out, arLong3(0)) And _
|
|
compareData(arLong3Out, arLong3), "sequence test") And bRet
|
|
|
|
|
|
'test with empty sequences
|
|
Dim _arLong2()() As Integer = New Integer()(){}
|
|
seqSeqRet = xBT2.setDim2(_arLong2)
|
|
bRet = check( compareData(seqSeqRet, _arLong2), "sequence test") And bRet
|
|
Dim _arLong3()()() As Integer = New Integer()()(){}
|
|
seqSeqRet2 = xBT2.setDim3(_arLong3)
|
|
bRet = check( compareData(seqSeqRet2, _arLong3), "sequence test") And bRet
|
|
Dim _arAny() As Any = New Any(){}
|
|
seqAnyRet = xBT2.setSequenceAny(_arAny)
|
|
bRet = check( compareData(seqAnyRet, _arAny), "sequence test") And bRet
|
|
Dim _arBool() As Boolean = New Boolean() {}
|
|
seqBoolRet = xBT2.setSequenceBool(_arBool)
|
|
bRet = check( compareData(seqBoolRet, _arBool), "sequence test") And bRet
|
|
Dim _arByte() As Byte = New Byte() {}
|
|
seqByteRet = xBT2.setSequenceByte(_arByte)
|
|
bRet = check( compareData(seqByteRet, _arByte), "sequence test") And bRet
|
|
Dim _arChar() As Char = New Char() {}
|
|
seqCharRet = xBT2.setSequenceChar(_arChar)
|
|
bRet = check( compareData(seqCharRet, _arChar), "sequence test") And bRet
|
|
Dim _arShort() As Short = New Short() {}
|
|
seqShortRet = xBT2.setSequenceShort(_arShort)
|
|
bRet = check( compareData(seqShortRet, _arShort), "sequence test") And bRet
|
|
Dim _arLong() As Integer = New Integer() {}
|
|
seqLongRet = xBT2.setSequenceLong(_arLong)
|
|
bRet = check( compareData(seqLongRet, _arLong), "sequence test") And bRet
|
|
Dim _arHyper() As Long = New Long(){}
|
|
seqHyperRet = xBT2.setSequenceHyper(_arHyper)
|
|
bRet = check( compareData(seqHyperRet, _arHyper), "sequence test") And bRet
|
|
Dim _arFloat() As Single = New Single(){}
|
|
seqFloatRet = xBT2.setSequenceFloat(_arFloat)
|
|
bRet = check( compareData(seqFloatRet, _arFloat), "sequence test") And bRet
|
|
Dim _arDouble() As Double = New Double(){}
|
|
seqDoubleRet = xBT2.setSequenceDouble(_arDouble)
|
|
bRet = check( compareData(seqDoubleRet, _arDouble), "sequence test") And bRet
|
|
Dim _arEnum() As TestEnum = New TestEnum(){}
|
|
seqEnumRet = xBT2.setSequenceEnum(_arEnum)
|
|
bRet = check( compareData(seqEnumRet, _arEnum), "sequence test") And bRet
|
|
Dim _arUShort() As UInt16 = New UInt16(){}
|
|
seqUShortRet = xBT2.setSequenceUShort(_arUShort)
|
|
bRet = check( compareData(seqUShortRet, _arUShort), "sequence test") And bRet
|
|
Dim _arULong() As UInt32 = New UInt32(){}
|
|
seqULongRet = xBT2.setSequenceULong(_arULong)
|
|
bRet = check( compareData(seqULongRet, _arULong), "sequence test") And bRet
|
|
Dim _arUHyper() As UInt64 = New UInt64(){}
|
|
seqUHyperRet = xBT2.setSequenceUHyper(_arUHyper)
|
|
bRet = check( compareData(seqUHyperRet, _arUHyper), "sequence test") And bRet
|
|
Dim _arObject() As Object = New Object(){}
|
|
seqObjectRet = xBT2.setSequenceXInterface(_arObject)
|
|
bRet = check( compareData(seqObjectRet, _arObject), "sequence test") And bRet
|
|
Dim _arString() As String = New String(){}
|
|
seqStringRet = xBT2.setSequenceString(_arString)
|
|
bRet = check( compareData(seqStringRet, _arString), "sequence test") And bRet
|
|
Dim _arStruct() As TestElement = New TestElement(){}
|
|
seqStructRet = xBT2.setSequenceStruct(_arStruct)
|
|
bRet = check( compareData(seqStructRet, _arStruct), "sequence test") And bRet
|
|
Return bRet
|
|
End Function
|
|
|
|
Private Shared Function testAny(typ As Type, value As Object, _
|
|
xLBT As XBridgeTest ) As Boolean
|
|
|
|
Dim any As Any
|
|
If (typ Is Nothing)
|
|
any = New Any(value.GetType(), value)
|
|
Else
|
|
any = New Any(typ, value)
|
|
End If
|
|
|
|
Dim any2 As Any = xLBT.transportAny(any)
|
|
Dim ret As Boolean = compareData(any, any2)
|
|
If ret = False
|
|
Console.WriteLine("any is different after roundtrip: in {0}, " _
|
|
& "out {1}\n", _
|
|
any.Type.FullName, any2.Type.FullName)
|
|
End If
|
|
Return ret
|
|
End Function
|
|
|
|
Private Shared Function performAnyTest(xLBT As XBridgeTest, _
|
|
data As TestDataElements) As Boolean
|
|
Dim bReturn As Boolean = True
|
|
bReturn = testAny( Nothing, data.Byte ,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.Short,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.UShort,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.Long,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.ULong,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.Hyper,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing,data.UHyper,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.Float,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.Double,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.Enum,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.String,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.Byte2 ,xLBT ) And bReturn
|
|
bReturn = testAny( Nothing, data.Short2,xLBT ) And bReturn
|
|
bReturn = testAny(GetType(unoidl.com.sun.star.uno.XWeak), _
|
|
data.Interface,xLBT ) And bReturn
|
|
bReturn = testAny(Nothing, data, xLBT ) And bReturn
|
|
|
|
Dim a1 As Any = New Any(True)
|
|
Dim a2 As Any = xLBT.transportAny( a1 )
|
|
bReturn = compareData(a2, a1) And bReturn
|
|
|
|
Dim a3 As Any = New Any("A"C)
|
|
Dim a4 As Any = xLBT.transportAny(a3)
|
|
bReturn = compareData(a4, a3) And bReturn
|
|
|
|
Return bReturn
|
|
End Function
|
|
|
|
Private Shared Function performSequenceOfCallTest(xLBT As XBridgeTest) As Boolean
|
|
|
|
Dim i, nRounds As Integer
|
|
Dim nGlobalIndex As Integer = 0
|
|
const nWaitTimeSpanMUSec As Integer = 10000
|
|
For nRounds = 0 To 9
|
|
For i = 0 To nRounds - 1
|
|
' fire oneways
|
|
xLBT.callOneway(nGlobalIndex, nWaitTimeSpanMUSec)
|
|
nGlobalIndex = nGlobalIndex + 1
|
|
Next
|
|
|
|
' call synchron
|
|
xLBT.call(nGlobalIndex, nWaitTimeSpanMUSec)
|
|
nGlobalIndex = nGlobalIndex + 1
|
|
Next
|
|
Return xLBT.sequenceOfCallTestPassed()
|
|
End Function
|
|
|
|
Private Shared Function performRecursiveCallTest(xLBT As XBridgeTest) As Boolean
|
|
xLBT.startRecursiveCall(new ORecursiveCall(), 50)
|
|
' on failure, the test would lock up or crash
|
|
Return True
|
|
End Function
|
|
|
|
|
|
Private Shared Function performTest(xLBT As XBridgeTest) As Boolean
|
|
check( Not xLBT Is Nothing, "### no test interface!" )
|
|
Dim bRet As Boolean = True
|
|
If xLBT Is Nothing
|
|
Return False
|
|
End If
|
|
'this data is never ever granted access to by calls other than equals(), assign()!
|
|
Dim aData As New TestDataElements' test against this data
|
|
Dim xI As New WeakBase
|
|
|
|
Dim aAny As New Any(GetType(System.Object), xI)
|
|
assign( DirectCast(aData, TestElement), _
|
|
True, "@"C, 17, &H1234, Convert.ToUInt16(&HdcS), &H12345678, _
|
|
Convert.ToUInt32(4294967294), _
|
|
&H123456789abcdef0, Convert.ToUInt64(14294967294), _
|
|
17.03125f, 3.1415926359, TestEnum.LOLA, _
|
|
CONSTANTS.STRING_TEST_CONSTANT, xI, _
|
|
aAny)
|
|
|
|
bRet = check( aData.Any.Value Is xI, "### unexpected any!" ) And bRet
|
|
|
|
aData.Sequence = New TestElement(1){}
|
|
aData.Sequence(0) = New TestElement( _
|
|
aData.Bool, aData.Char, aData.Byte, aData.Short, _
|
|
aData.UShort, aData.Long, aData.ULong, _
|
|
aData.Hyper, aData.UHyper, aData.Float, _
|
|
aData.Double, aData.Enum, aData.String, _
|
|
aData.Interface, aData.Any)
|
|
aData.Sequence(1) = New TestElement 'is empty
|
|
|
|
' aData complete
|
|
'
|
|
' this is a manually copy of aData for first setting...
|
|
Dim aSetData As New TestDataElements
|
|
Dim aAnySet As New Any(GetType(System.Object), xI)
|
|
assign( DirectCast(aSetData, TestElement), _
|
|
aData.Bool, aData.Char, aData.Byte, aData.Short, aData.UShort, _
|
|
aData.Long, aData.ULong, aData.Hyper, aData.UHyper, aData.Float, _
|
|
aData.Double, aData.Enum, aData.String, xI, aAnySet)
|
|
|
|
aSetData.Sequence = New TestElement(1){}
|
|
aSetData.Sequence(0) = New TestElement( _
|
|
aSetData.Bool, aSetData.Char, aSetData.Byte, aSetData.Short, _
|
|
aSetData.UShort, aSetData.Long, aSetData.ULong, _
|
|
aSetData.Hyper, aSetData.UHyper, aSetData.Float, _
|
|
aSetData.Double, aSetData.Enum, aSetData.String, _
|
|
aSetData.Byte2, aSetData.Short2, _
|
|
aSetData.Interface, aSetData.Any)
|
|
aSetData.Sequence(1) = New TestElement ' empty struct
|
|
|
|
xLBT.setValues( _
|
|
aSetData.Bool, _
|
|
aSetData.Char, _
|
|
aSetData.Byte, _
|
|
aSetData.Short, _
|
|
aSetData.UShort, _
|
|
aSetData.Long, _
|
|
aSetData.ULong, _
|
|
aSetData.Hyper, _
|
|
aSetData.UHyper, _
|
|
aSetData.Float, _
|
|
aSetData.Double, _
|
|
aSetData.Enum, _
|
|
aSetData.String, _
|
|
aSetData.Byte2, _
|
|
aSetData.Short2, _
|
|
aSetData.Interface, _
|
|
aSetData.Any, _
|
|
aSetData.Sequence, _
|
|
aSetData )
|
|
|
|
|
|
Dim aRet As New TestDataElements
|
|
Dim aRet2 As New TestDataElements
|
|
xLBT.getValues( _
|
|
aRet.Bool, _
|
|
aRet.Char, _
|
|
aRet.Byte, _
|
|
aRet.Short, _
|
|
aRet.UShort, _
|
|
aRet.Long, _
|
|
aRet.ULong, _
|
|
aRet.Hyper, _
|
|
aRet.UHyper, _
|
|
aRet.Float, _
|
|
aRet.Double, _
|
|
aRet.Enum, _
|
|
aRet.String, _
|
|
aRet.Byte2, _
|
|
aRet.Short2, _
|
|
aRet.Interface, _
|
|
aRet.Any, _
|
|
aRet.Sequence, _
|
|
aRet2 )
|
|
|
|
bRet = check( compareData( aData, aRet ) And _
|
|
compareData( aData, aRet2 ) , "getValues test") And bRet
|
|
|
|
' set last retrieved values
|
|
Dim aSV2ret As TestDataElements= xLBT.setValues2( _
|
|
aRet.Bool, _
|
|
aRet.Char, _
|
|
aRet.Byte, _
|
|
aRet.Short, _
|
|
aRet.UShort, _
|
|
aRet.Long, _
|
|
aRet.ULong, _
|
|
aRet.Hyper, _
|
|
aRet.UHyper, _
|
|
aRet.Float, _
|
|
aRet.Double, _
|
|
aRet.Enum, _
|
|
aRet.String, _
|
|
aRet.Byte2, _
|
|
aRet.Short2, _
|
|
aRet.Interface, _
|
|
aRet.Any, _
|
|
aRet.Sequence, _
|
|
aRet2 )
|
|
|
|
' check inout sequence order
|
|
' => inout sequence parameter was switched by test objects
|
|
Dim temp As TestElement = aRet.Sequence( 0 )
|
|
aRet.Sequence( 0 ) = aRet.Sequence( 1 )
|
|
aRet.Sequence( 1 ) = temp
|
|
|
|
bRet = check( _
|
|
compareData( aData, aSV2ret ) And compareData( aData, aRet2 ), _
|
|
"getValues2 test") And bRet
|
|
|
|
|
|
aRet = New TestDataElements
|
|
aRet2 = New TestDataElements
|
|
Dim aGVret As TestDataElements= xLBT.getValues( _
|
|
aRet.Bool, _
|
|
aRet.Char, _
|
|
aRet.Byte, _
|
|
aRet.Short, _
|
|
aRet.UShort, _
|
|
aRet.Long, _
|
|
aRet.ULong, _
|
|
aRet.Hyper, _
|
|
aRet.UHyper, _
|
|
aRet.Float, _
|
|
aRet.Double, _
|
|
aRet.Enum, _
|
|
aRet.String, _
|
|
aRet.Byte2, _
|
|
aRet.Short2, _
|
|
aRet.Interface, _
|
|
aRet.Any, _
|
|
aRet.Sequence, _
|
|
aRet2 )
|
|
|
|
bRet = check( compareData( aData, aRet ) And _
|
|
compareData( aData, aRet2 ) And _
|
|
compareData( aData, aGVret ), "getValues test" ) And bRet
|
|
|
|
' set last retrieved values
|
|
xLBT.Bool = aRet.Bool
|
|
xLBT.Char = aRet.Char
|
|
xLBT.Byte = aRet.Byte
|
|
xLBT.Short = aRet.Short
|
|
xLBT.UShort = aRet.UShort
|
|
xLBT.Long = aRet.Long
|
|
xLBT.ULong = aRet.ULong
|
|
xLBT.Hyper = aRet.Hyper
|
|
xLBT.UHyper = aRet.UHyper
|
|
xLBT.Float = aRet.Float
|
|
xLBT.Double = aRet.Double
|
|
xLBT.Enum = aRet.Enum
|
|
xLBT.String = aRet.String
|
|
xLBT.Byte2 = aRet.Byte2
|
|
xLBT.Short2 = aRet.Short2
|
|
xLBT.Interface = aRet.Interface
|
|
xLBT.Any = aRet.Any
|
|
xLBT.Sequence = aRet.Sequence
|
|
xLBT.Struct = aRet2
|
|
|
|
|
|
aRet = New TestDataElements
|
|
aRet2 = New TestDataElements
|
|
aRet.Hyper = xLBT.Hyper
|
|
aRet.UHyper = xLBT.UHyper
|
|
aRet.Float = xLBT.Float
|
|
aRet.Double = xLBT.Double
|
|
aRet.Byte = xLBT.Byte
|
|
aRet.Char = xLBT.Char
|
|
aRet.Bool = xLBT.Bool
|
|
aRet.Short = xLBT.Short
|
|
aRet.UShort = xLBT.UShort
|
|
aRet.Long = xLBT.Long
|
|
aRet.ULong = xLBT.ULong
|
|
aRet.Enum = xLBT.Enum
|
|
aRet.String = xLBT.String
|
|
aRet.Byte2 = xLBT.Byte2
|
|
aRet.Short2 = xLBT.Short2
|
|
aRet.Interface = xLBT.Interface
|
|
aRet.Any = xLBT.Any
|
|
aRet.Sequence = xLBT.Sequence
|
|
aRet2 = xLBT.Struct
|
|
|
|
bRet = check( compareData( aData, aRet ) And _
|
|
compareData( aData, aRet2 ) , "struct comparison test") _
|
|
And bRet
|
|
|
|
bRet = check(performSequenceTest(xLBT), "sequence test") And bRet
|
|
|
|
' any test
|
|
bRet = check( performAnyTest( xLBT , aData ) , "any test" ) And bRet
|
|
|
|
'sequence of call test
|
|
bRet = check( performSequenceOfCallTest( xLBT ) , _
|
|
"sequence of call test" ) And bRet
|
|
|
|
' recursive call test
|
|
bRet = check( performRecursiveCallTest( xLBT ) , "recursive test" ) _
|
|
And bRet
|
|
|
|
bRet = (compareData( aData, aRet ) And compareData( aData, aRet2 )) _
|
|
And bRet
|
|
|
|
' check setting of null reference
|
|
xLBT.Interface = Nothing
|
|
aRet.Interface = xLBT.Interface
|
|
bRet = (aRet.Interface Is Nothing) And bRet
|
|
|
|
Return bRet
|
|
End Function
|
|
|
|
Private Shared Function raiseException(xLBT As XBridgeTest) As Boolean
|
|
Dim nCount As Integer = 0
|
|
Try
|
|
Try
|
|
Try
|
|
Dim aRet As TestDataElements = New TestDataElements
|
|
Dim aRet2 As TestDataElements = New TestDataElements
|
|
xLBT.raiseException( _
|
|
5, CONSTANTS.STRING_TEST_CONSTANT, xLBT.Interface )
|
|
Catch rExc As unoidl.com.sun.star.lang.IllegalArgumentException
|
|
If rExc.ArgumentPosition = 5 And _
|
|
rExc.Context Is xLBT.Interface
|
|
nCount = nCount + 1
|
|
Else
|
|
check( False, "### unexpected exception content!" )
|
|
End If
|
|
|
|
'it is certain, that the RuntimeException testing will fail,
|
|
' if no
|
|
xLBT.RuntimeException = 0
|
|
End Try
|
|
Catch rExc As unoidl.com.sun.star.uno.RuntimeException
|
|
If rExc.Context Is xLBT.Interface
|
|
nCount = nCount + 1
|
|
Else
|
|
check( False, "### unexpected exception content!" )
|
|
End If
|
|
xLBT.RuntimeException = CType(&Hcafebabe, Integer)
|
|
End Try
|
|
Catch rExc As unoidl.com.sun.star.uno.Exception
|
|
If rExc.Context Is xLBT.Interface
|
|
nCount = nCount + 1
|
|
Else
|
|
check( False, "### unexpected exception content!" )
|
|
End If
|
|
Return nCount = 3
|
|
End Try
|
|
Return False
|
|
End Function
|
|
|
|
Private Shared Function raiseOnewayException(xLBT As XBridgeTest) As Boolean
|
|
Dim bReturn As Boolean= True
|
|
Dim sCompare As String = CONSTANTS.STRING_TEST_CONSTANT
|
|
Try
|
|
' Note : the exception may fly or not (e.g. remote scenario).
|
|
' When it flies, it must contain the correct elements.
|
|
xLBT.raiseRuntimeExceptionOneway(sCompare, xLBT.Interface )
|
|
Catch e As RuntimeException
|
|
bReturn = xLBT.Interface Is e.Context
|
|
End Try
|
|
Return bReturn
|
|
End Function
|
|
|
|
'Test the System::Object method on the proxy object
|
|
'
|
|
Private Shared Function testObjectMethodsImplementation(xLBT As XBridgeTest) As Boolean
|
|
Dim ret As Boolean = False
|
|
Dim obj As Object = New Object
|
|
Dim xInt As Object = DirectCast(xLBT, Object)
|
|
Dim xBase As XBridgeTestBase = DirectCast(xLBT, XBridgeTestBase)
|
|
' Object.Equals
|
|
ret = DirectCast(xLBT, Object).Equals(obj) = False
|
|
ret = DirectCast(xLBT, Object).Equals(xLBT) And ret
|
|
ret = Object.Equals(obj, obj) And ret
|
|
ret = Object.Equals(xLBT, xBase) And ret
|
|
'Object.GetHashCode
|
|
' Don't know how to verify this. Currently it is not possible to get the object id from a proxy
|
|
Dim nHash As Integer = DirectCast(xLBT, Object).GetHashCode()
|
|
ret = nHash = DirectCast(xBase, Object).GetHashCode() And ret
|
|
|
|
'Object.ToString
|
|
' Don't know how to verify this automatically.
|
|
Dim s As String = DirectCast(xLBT, Object).ToString()
|
|
ret = (s.Length > 0) And ret
|
|
Return ret
|
|
End Function
|
|
|
|
Private Shared Function performQueryForUnknownType(xLBT As XBridgeTest) As Boolean
|
|
Dim bRet As Boolean = False
|
|
' test queryInterface for an unknown type
|
|
Try
|
|
Dim a As foo.MyInterface = DirectCast(xLBT, foo.MyInterface)
|
|
Catch e As System.InvalidCastException
|
|
bRet = True
|
|
End Try
|
|
|
|
Return bRet
|
|
End Function
|
|
|
|
|
|
Private Shared Sub perform_test( xLBT As XBridgeTest)
|
|
Dim bRet As Boolean = True
|
|
bRet = check( performTest( xLBT ), "standard test" ) And bRet
|
|
bRet = check( raiseException( xLBT ) , "exception test" ) And bRet
|
|
bRet = check( raiseOnewayException( xLBT ), "oneway exception test" ) _
|
|
And bRet
|
|
bRet = check( testObjectMethodsImplementation(xLBT), _
|
|
"object methods test") And bRet
|
|
bRet = performQueryForUnknownType( xLBT ) And bRet
|
|
If Not bRet
|
|
Throw New unoidl.com.sun.star.uno.RuntimeException( "error: test failed!", Nothing)
|
|
End If
|
|
End Sub
|
|
|
|
|
|
|
|
Public Overridable Function run(args() As String) As Integer _
|
|
Implements XMain.run
|
|
Try
|
|
If (args.Length < 1)
|
|
Throw New RuntimeException( _
|
|
"missing argument for bridgetest!", Me )
|
|
End If
|
|
|
|
Dim test_obj As Object = _
|
|
m_xContext.getServiceManager().createInstanceWithContext( _
|
|
args( 0 ), m_xContext )
|
|
|
|
Debug.WriteLine( _
|
|
"cli target bridgetest obj: {0}", test_obj.ToString() )
|
|
Dim xTest As XBridgeTest = DirectCast(test_obj, XBridgeTest)
|
|
perform_test( xTest )
|
|
Console.WriteLine("### cli_uno VB bridgetest succeeded.")
|
|
return 0
|
|
Catch e as unoidl.com.sun.star.uno.RuntimeException
|
|
Throw
|
|
Catch e as System.Exception
|
|
Throw New unoidl.com.sun.star.uno.RuntimeException( _
|
|
"cli_vb_bridgetest.vb: unexpected exception occurred in XMain::run. " _
|
|
& "Original exception: " + e.GetType().Name + "\n Message: " _
|
|
& e.Message , Nothing)
|
|
|
|
End Try
|
|
End Function
|
|
|
|
End Class
|
|
|
|
End Namespace
|