| rem ************************************************************* |
| rem |
| rem Licensed to the Apache Software Foundation (ASF) under one |
| rem or more contributor license agreements. See the NOTICE file |
| rem distributed with this work for additional information |
| rem regarding copyright ownership. The ASF licenses this file |
| rem to you under the Apache License, Version 2.0 (the |
| rem "License"); you may not use this file except in compliance |
| rem with the License. You may obtain a copy of the License at |
| rem |
| rem http://www.apache.org/licenses/LICENSE-2.0 |
| rem |
| rem Unless required by applicable law or agreed to in writing, |
| rem software distributed under the License is distributed on an |
| rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| rem KIND, either express or implied. See the License for the |
| rem specific language governing permissions and limitations |
| rem under the License. |
| rem |
| rem ************************************************************* |
| REM ***** BASIC ***** |
| |
| |
| OPTION EXPLICIT |
| OPTION COMPATIBLE |
| |
| Sub Main |
| COMPATIBILITYMODE(true) |
| |
| If runtest = -1 Then |
| MsgBox "Test Failed!!!" |
| Else |
| MsgBox "Test Succeeded" |
| End If |
| |
| End Sub |
| |
| Function runtest() As Integer |
| Dim inBool As Boolean, inBool2 As Boolean, outBool As Boolean |
| Dim inByte As Integer, inByte2 As Integer |
| Dim inShort As Integer, inShort2 As Integer |
| Dim inLong As Long, inLong2 As Long, inLong3 As Long, inLong4 As Long |
| Dim inString As String, inString2 As String |
| Dim inFloat As Single, inFloat2 As Single |
| Dim inDouble As Double, inDouble2 As Double |
| Dim inVariant, inVariant2 |
| Dim inAr, inAr2 |
| Dim inDate As Date,inDate2 As Date, outDate As Date |
| Dim inCurrency As Currency, inCurrency2 As Currency, outCurrency As Currency |
| Dim inSCode As New com.sun.star.bridge.oleautomation.SCode |
| Dim inSCode2 As New com.sun.star.bridge.oleautomation.SCode |
| Dim inDecimal As Variant, inDecimal2 As Variant, outDecimal As Variant |
| Dim inrefDecimal As Variant, outrefDecimal As Variant |
| Dim outSCode As New com.sun.star.bridge.oleautomation.SCode |
| Dim outByte As Integer |
| Dim outShort As Integer |
| Dim outLong, outLong2 As Long |
| Dim outString As String |
| Dim outFloat As Single |
| Dim outDouble As Double |
| Dim outVariant |
| 'bug #109936 causes an errOr when outObject is used As out param |
| Dim inObject As Object, inObject2 As Object, outObject As Object |
| Dim objNOTHING As Object |
| Dim inUnknown As Object, inUnknown2 As Object, outUnknown As Object |
| |
| Dim inArray, outArray, outArray2 |
| Dim len1, len2 |
| Dim arString(1) As String |
| arString(0)= "String one" |
| arString(1)= "String two" |
| |
| Dim factory As Object |
| factory= createUnoService("com.sun.star.bridge.OleObjectFactory") |
| Dim obj As Object |
| obj= factory.createInstance("AxTestComponents.Basic") |
| |
| Dim objFoo As Object |
| objFoo = factory.createInstance("AxTestComponents.Foo") |
| |
| |
| 'in parameter ------------------------------------------------------------------- |
| inBool = true |
| inByte = 10 |
| inShort = 11 |
| inLong = 111 |
| inString = "Hello World" |
| inFloat = 3.14 |
| inDouble = 3.145 |
| inVariant = "bla" |
| inDate = NOW() |
| inCurrency = 12345.6789 |
| inSCode.Value = &h80020004 |
| inDecimal = CDec("-9223372036854775808") 'lowest int64 |
| |
| obj.inBool(inBool) |
| obj.inByte(inByte) |
| obj.inShort(inShort) |
| obj.inLong(inLong) |
| obj.inString(inString) |
| obj.inFloat(inFloat) |
| obj.inDouble(inDouble) |
| obj.inVariant(inVariant) |
| 'obj.prpString= "a string property" |
| obj.inObject(obj) |
| obj.inArray(arString()) |
| obj.inDate(inDate) |
| obj.inCurrency(inCurrency) |
| obj.inSCode(inSCode) |
| obj.inUnknown(objFoo) |
| obj.inDecimal(inDecimal) |
| |
| 'out parameter ------------------------------------------------------------------------- |
| outBool = false |
| obj.outBool(outBool) |
| outByte = 0 |
| obj.outByte(outByte) |
| outShort = 0 |
| obj.outShort(outShort) |
| outLong = 0 |
| obj.outLong(outLong) |
| outFloat = 0 |
| obj.outFloat(outFloat) |
| outDouble = 0 |
| obj.outDouble(outDouble) |
| outString = "" |
| obj.outString(outString) |
| outVariant = 0 |
| obj.outVariant(outVariant) |
| outObject = NOTHING |
| obj.outObject(outObject) |
| outArray = 0 |
| obj.outArray(outArray) |
| obj.outDate(outDate) |
| obj.outCurrency(outCurrency) |
| obj.outSCode(outSCode) |
| obj.outUnknown(outUnknown) |
| obj.outDecimal(outDecimal) |
| |
| |
| If inBool <> outBool Or inByte <> outByte Or inShort <> outShort Or inLong <> outLong Or _ |
| inFloat <> outFloat Or inDouble <> outDouble Or inString <> outString Or _ |
| inVariant <> outVariant Or NOT equalUnoObjects(obj, outObject) Or NOT _ |
| equalArrays(arString(), outArray()) Or inDate <> outDate Or inCurrency <> outCurrency Or _ |
| inSCode.Value <> outSCode.Value Or Not equalUnoObjects(objFoo, outUnknown) Or _ |
| inDecimal <> outDecimal Then |
| runtest = -1 |
| exit Function |
| End If |
| |
| |
| 'in-out parameter ------------------------------------------------------------- |
| 'implementation of inout methods returns the previously set value in out param |
| inBool = true |
| inBool2 = inBool |
| obj.inoutBool(inBool2) |
| outBool = false |
| obj.inoutBool(outBool) |
| inByte = 10 |
| inByte2 = inByte |
| obj.inoutByte(inByte2) |
| outByte = 0 |
| obj.inoutByte(outByte) |
| inShort = 10 |
| inShort2 = inShort |
| obj.inShort(inShort2) |
| outShort = 0 |
| obj.inoutShort(outShort) |
| inLong = 10 |
| inLong2 = inLong |
| obj.inoutLong(inLong2) |
| outLong = 0 |
| obj.inoutLong(outLong) |
| inFloat = 3.14 |
| inFloat2 = inFloat |
| obj.inoutFloat(inFloat2) |
| outFloat = 0 |
| obj.inoutFloat(outFloat) |
| inDouble= 3.14 |
| inDouble2 = inDouble |
| obj.inoutDouble(inDouble2) |
| outDouble = 0 |
| obj.inoutDouble(outDouble) |
| inString = "in" |
| inString2 = inString |
| obj.inoutString(inString2) |
| outString = "" |
| obj.inoutString(outString) |
| inVariant = "in" |
| inVariant2 = inVariant |
| obj.inoutVariant(inVariant2) |
| outVariant = 0 |
| obj.inoutVariant(outVariant) |
| inObject = factory.createInstance("AxTestComponents.Basic") |
| inObject2 = inObject |
| obj.inoutObject(inObject2) |
| outObject = NOTHING |
| obj.inoutObject(outObject) |
| inAr = arString() |
| inAr2 = inAr |
| obj.inoutArray(inAr2) |
| outArray = 0 |
| obj.outArray(outArray()) |
| inDate = NOW() |
| inDate2 = inDate |
| obj.inoutDate(inDate2) |
| outDate = 0 |
| obj.inoutDate(outDate) |
| inCurrency = 1234.5678 |
| inCurrency2 = inCurrency |
| obj.inoutCurrency(inCurrency2) |
| outCurrency = 0 |
| obj.inoutCurrency(outCurrency) |
| inSCode.Value = &h80020004 |
| inSCode2 = inSCode |
| obj.inoutSCode(inSCode2) |
| outSCode.Value = 0 |
| obj.inoutSCode(outSCode) |
| inUnknown = objFoo |
| inUnknown2 = inUnknown |
| obj.inoutUnknown(inUnknown2) |
| outUnknown = Nothing |
| obj.inoutUnknown(outUnknown) |
| inDecimal = CDec("18446744073709551615") 'highest positiv value of unsigne int64 |
| inDecimal2 = inDecimal |
| obj.inoutDecimal(inDecimal2) |
| outDecimal = 0 |
| obj.inoutDecimal(outDecimal) |
| |
| If inBool <> outBool Or inByte <> outByte Or inShort <> outShort Or inLong <> outLong Or _ |
| inFloat <> outFloat Or inDouble <> outDouble Or inString <> outString Or _ |
| inVariant <> outVariant Or NOT equalUnoObjects(inObject, outObject) Or _ |
| NOT equalArrays(inAr, outArray) Or inDate <> outDate Or inCurrency <> outCurrency Or _ |
| inSCode.Value <> outSCode.Value Or Not equalUnoObjects(inUnknown, outUnknown) Or _ |
| inDecimal <> outDecimal Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| 'properties ------------------------------------------------------------------------- |
| inBool = false |
| outBool = true |
| obj.prpBool = inBool |
| outBool = obj.prpBool |
| inByte = 11 |
| outByte = 0 |
| obj.prpByte = inByte |
| outByte= obj.prpByte |
| inShort = 127 |
| outShort = 0 |
| obj.prpShort= inShort |
| outShort= obj.prpShort |
| inLong = 1000 |
| outLong = 0 |
| obj.prpLong = inLong |
| outLong= obj.prpLong |
| inFloat = 3.14 |
| outFloat = 0 |
| obj.prpFloat = inFloat |
| outFloat= obj.prpFloat |
| inDouble = 3.123 |
| outDouble = 0 |
| obj.prpDouble = inDouble |
| outDouble= obj.prpDouble |
| inString = "bla" |
| outString = "" |
| obj.prpString = inString |
| outString = obj.prpString |
| inObject = obj |
| outObject = objNOTHING |
| obj.prpObject = inObject |
| outObject = obj.prpObject |
| inVariant = "bla" |
| outVariant = 0 |
| obj.prpVariant = inVariant |
| outVariant= obj.prpVariant |
| inArray = arString() |
| outArray = 0 |
| obj.prpArray = inArray() |
| outArray= obj.prpArray |
| inDate = NOW() |
| outDate = 0 |
| obj.prpDate = inDate |
| outDate = obj.prpDate |
| inCurrency = 1234.5678 |
| outCurrency = 0 |
| obj.prpCurrency = inCurrency |
| outCurrency = obj.prpCurrency |
| inSCode.Value = &h80020004 |
| outSCode.Value = 0 |
| obj.prpSCode = inSCode |
| outSCode = obj.prpSCode |
| inUnknown = objFoo |
| outUnknown= Nothing |
| obj.prpUnknown = inUnknown |
| outUnknown = obj.prpUnknown |
| inDecimal = CDec("18446744073709551615")' highest unsigned int64 |
| outDecimal = 0 |
| obj.prpDecimal = inDecimal |
| outDecimal = obj.prpDecimal |
| |
| If inBool <> outBool Or inByte <> outByte Or inShort <> outShort Or inLong <> outLong Or _ |
| inFloat <> outFloat Or inDouble <> outDouble Or inString <> outString Or _ |
| inVariant <> outVariant Or NOT equalUnoObjects(inObject, outObject) Or _ |
| NOT equalArrays(inArray, outArray) Or inDate <> outDate Or inCurrency <> outCurrency Or _ |
| inSCode.Value <> outSCode.Value Or Not equalUnoObjects(inUnknown, outUnknown) Or _ |
| inDecimal <> outDecimal Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| ' ref parameter ------------------------------------------------------------------------ |
| obj.inLong(0) |
| inLong = 123 |
| outLong = 0 |
| obj.inLong(0) |
| obj.inrefLong(inLong) |
| obj.outLong(outLong) |
| inVariant = "bla" |
| outVariant = 0 |
| obj.inVariant(0) |
| obj.inrefVariant(inVariant) |
| obj.outVariant(outVariant) |
| If inLong <> outLong Or inVariant <> outVariant Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| outLong = 0 |
| obj.prprefLong = inLong |
| outLong = obj.prprefLong |
| outVariant = 0 |
| obj.prprefVariant = inVariant |
| outVariant = obj.prprefVariant |
| If inLong <> outLong Or inVariant <> outVariant Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| |
| 'vararg -------------------------------------------------------------------------------- |
| inLong=1 |
| inLong2 = 2 |
| inLong3 = 3 |
| obj.varargfunc1(inLong) |
| outArray = 0 |
| outLong = 0 |
| obj.varargfunc2(outLong, outArray) |
| If inLong <> outLong Then |
| runtest = -1 |
| Exit Function |
| End If |
| len1 = UBound(outArray) - LBound(outArray) +1 |
| If len1 <> 0 Then |
| runtest = -1 |
| Exit Function |
| End If |
| outArray = 0 |
| obj.varargfunc1(inLong, inLong2, inLong3) |
| obj.varargfunc2(outLong, outArray) |
| len1 = UBound(outArray) - LBound(outArray) +1 |
| If len1 <> 2 Or outArray(0) <> inLong2 Or outArray(1) <> inLong3 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| |
| 'defaultvalue --------------------------------------------------------------------------- |
| inLong = 0 |
| inFloat = 0 |
| inVariant = 0 |
| inVariant2 = 0 |
| 'defaults are: 1, 2, 4 |
| 'The third parameter is a VARIANT with a default value of 4. COM gives it the type BSTR |
| obj.defaultvalue1() |
| obj.defaultvalue2(inLong, inFloat, inVariant) |
| If inLong <> 1 Or inFloat <> 2 Or inVariant <> "4" Then |
| runtest = -1 |
| Exit Function |
| End If |
| inLong = 10 |
| inFloat = 11 |
| inLong2 = inLong |
| inFloat2 = inFloat |
| inVariant = 0 |
| inVariant = 0 |
| obj.defaultvalue1(inLong, inFloat) |
| obj.defaultvalue2(inLong, inFloat, inVariant) |
| If inLong <> inLong2 Or inFloat <> inFloat2 Or inVariant <> "4" Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| 'optional parameters ---------------------------------------------------------------- |
| inLong = 100 |
| outLong = 0 |
| obj.optional1(inLong) |
| obj.optional2(outLong) |
| If inLong <> outLong Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| inLong2 = 101 |
| outLong2 = 0 |
| obj.optional1(inLong, inLong2) |
| obj.optional2(outLong, outLong2) |
| If inLong <> outLong AND inLong2 <> outLong2 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| inLong2 = 101 |
| outLong2 = 0 |
| obj.optional1(inLong, inLong2) |
| obj.optional1(inLong) |
| obj.optional2(outLong, outLong2) |
| If inLong <> outLong AND inLong2 <> outLong2 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| inLong = 10 |
| inLong2 = 100 |
| outLong = 5 |
| outLong2 = 6 |
| obj.optional3() |
| obj.optional3(inLong, inLong2) |
| obj.optional4(outLong, outLong2) 'outLong = 10, outLong2 = 100 |
| If inLong <> outLong AND inLong2 <> outLong2 Then |
| runtest = -1 |
| Exit Function |
| End If |
| inLong = 10 |
| inLong2 = 100 |
| inLong3 = inLong |
| inLong4 = inLong2 |
| obj.optional4(inLong, inLong) |
| outLong = 0 |
| outLong2 = 0 |
| obj.optional5(outLong, outLong2) |
| If inLong3 <> outLong AND inLong4 <> outLong2 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| inLong = 10 |
| outLong = 5 |
| obj.optional3(inLong) |
| obj.optional4(outLong) |
| If inLong <> outLong Then |
| runtest = -1 |
| Exit Function |
| End If |
| inLong = 10 |
| inLong2 = inLong |
| outLong = 0 |
| obj.optional4(inLong) |
| obj.optional5(outLong) |
| If inLong2 <> outLong Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| 'named arguments------------------------------------------------------------------------- |
| 'all args As named args, different order |
| obj.optional6(0, 0, 0, 0) |
| inLong = 1 |
| inLong2 = 2 |
| inLong3 = 3 |
| inLong4 = 4 |
| obj.optional6(val4:= inLong4, val3:=inLong3, val2:=inLong2, val1:= inLong) |
| Dim outLong3 As Long |
| Dim outLong4 As Long |
| outLong = 0 |
| outLong2 = 0 |
| outLong3 = 0 |
| outLong4 = 0 |
| obj.optional7(outLong, outLong2, outLong3, outLong4) |
| If inLong <> outLong Or inLong2 <> outLong2 _ |
| Or inLong3 <> outLong3 Or inLong4 <> outLong4 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| 'mixed positional and named args with omitted args |
| Dim scode_paramNotFound As New com.sun.star.bridge.oleautomation.SCode |
| scode_paramNotFound.Value = &h80020004 |
| |
| obj.optional6(0, 0, 0, 0) |
| 'val1 and val3 will be DISP_E_PARAMNOTFOUND |
| obj.optional6(, inLong2, val4:=inLong4) |
| Dim outSCode1, outSCode2 |
| obj.optional7(outSCode, outLong2, outSCode2, outLong4) |
| If outSCode.Value <> scode_paramNotFound.Value Or inLong2 <> outLong2 _ |
| Or outSCode2.Value <> scode_paramNotFound.Value Or inLong4 <> outLong4 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| 'mixed positional and named args with omitted args as out -args |
| inLong = 1 |
| inLong2 = 2 |
| inLong3 = 3 |
| inLong4 = 4 |
| obj.optional6(inLong, inLong2, inLong3, inLong4) |
| outLong2 = 0 |
| outLong3 = 0 |
| obj.optional7(,outLong2, val3:= outLong3) |
| If inLong2 <> outLong2 Or inLong3 <> outLong3 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| 'test properties with additional arguments ------------------------------------ |
| inLong = 10 |
| inLong2 = 20 |
| inLong3 = 30 |
| outLong = 0 |
| outLong2 = 0 |
| outLong3 = 0 |
| obj.prpMultiArg1(0,0) = 0 |
| 'obj.prpMultiArg1 = 0 |
| obj.prpMultiArg1(inLong,inLong2) = inLong3 |
| outLong3 = obj.prpMultiArg1(outLong, outLong2) |
| If outLong <> 10 Or outLong2 <> 02 Or outLong3 <> 30 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| outLong = 0 |
| outLong2 = 0 |
| obj.prpMultiArg1(0,0) = 0 |
| obj.prpMultiArg1(1) = 3 |
| outLong2 = obj.prpMultiArg1(outLong) |
| If outLong <> 1 Or outLong2 <> 3 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| outLong = 0 |
| outLong2 = 0 |
| obj.prpMultiArg1(0,0) = 0 |
| obj.prpMultiArg1(val2:= 1) = 3 |
| outLong2 = obj.prpMultiArg1(val2:=outLong) |
| If outLong <> 1 Or outLong2 <> 3 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| outLong = -1 |
| outLong2 = -1 |
| obj.prpMultiArg2(0) = 0 |
| outLong = obj.prpMultiArg2GetValues(outLong, outLong2) |
| If outLong <> 0 Or outLong2 <> 0 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| |
| outLong = 0 |
| outLong2 = 0 |
| obj.prpMultiArg2(1) = 2 |
| obj.prpMultiArg2GetValues(outLong, outLong2) |
| If outLong <> 1 Or outLong2 <> 2 Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| |
| |
| ' other tests ------------------------------------------------------------------ |
| obj.inObject(NOTHING) |
| outObject = NOTHING |
| 'bridge should return an XInterface any with null pointer |
| 'A basic errOr should occur if this is not the case |
| obj.outObject(outObject) |
| |
| If Not IsNull(outObject) Then |
| runtest = -1 |
| Exit Function |
| End If |
| 'Decimal passed by reference |
| inrefDecimal = CDec("9223372036854775807") 'highest positiv value of int64 |
| obj.inrefDecimal(inrefDecimal) |
| outrefDecimal = 0 |
| obj.outDecimal(outrefDecimal) |
| If inrefDecimal <> outrefDecimal Then |
| runtest = -1 |
| Exit Function |
| End If |
| |
| ' Test Automation object with dual interfaces ------------------------------------ |
| dim dispatcher as object |
| dim oExplorer as object |
| dispatcher = createUnoService("com.sun.star.bridge.OleObjectFactory") |
| oExplorer = dispatcher.createInstance("InternetExplorer.Application") |
| If Not IsNull(oExplorer) Then |
| oExplorer.visible = true |
| oExplorer.Navigate2("http://www.openoffice.org") |
| Else |
| MsgBox("Could not perform test with Internet Explorer!") |
| End If |
| |
| |
| End Function |
| |
| 'One dimensional arrays with simple types. |
| 'lower bound must be 0 |
| Function equalArrays(ar1, ar2) |
| Dim len1 |
| Dim len2 |
| len1 = UBound(ar1) - LBound(ar1) + 1 |
| len2 = UBound(ar2) - LBound(ar2) + 1 |
| If len1 <> len2 Then |
| equalArrays = false |
| Exit Function |
| End If |
| Dim counter |
| FOr counter = 0 To len1 - 1 |
| If ar1(counter) <> ar2(counter) Then |
| equalArrays = false |
| Exit Function |
| End If |
| Next |
| equalArrays = true |
| End Function |
| |
| |