1*b1cdbd2cSJim Jagielskirem *************************************************************
2*b1cdbd2cSJim Jagielskirem
3*b1cdbd2cSJim Jagielskirem  Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielskirem  or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielskirem  distributed with this work for additional information
6*b1cdbd2cSJim Jagielskirem  regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielskirem  to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielskirem  "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielskirem  with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielskirem
11*b1cdbd2cSJim Jagielskirem    http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielskirem
13*b1cdbd2cSJim Jagielskirem  Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielskirem  software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielskirem  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielskirem  KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielskirem  specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielskirem  under the License.
19*b1cdbd2cSJim Jagielskirem
20*b1cdbd2cSJim Jagielskirem *************************************************************
21*b1cdbd2cSJim JagielskiREM  *****  BASIC  *****
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim JagielskiOPTION EXPLICIT
25*b1cdbd2cSJim JagielskiOPTION COMPATIBLE
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim JagielskiSub Main
28*b1cdbd2cSJim JagielskiCOMPATIBILITYMODE(true)
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim JagielskiIf runtest = -1 Then
31*b1cdbd2cSJim Jagielski  MsgBox "Test Failed!!!"
32*b1cdbd2cSJim JagielskiElse
33*b1cdbd2cSJim Jagielski  MsgBox "Test Succeeded"
34*b1cdbd2cSJim JagielskiEnd If
35*b1cdbd2cSJim Jagielski
36*b1cdbd2cSJim JagielskiEnd Sub
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim JagielskiFunction runtest() As Integer
39*b1cdbd2cSJim JagielskiDim inBool As Boolean, inBool2 As Boolean, outBool As Boolean
40*b1cdbd2cSJim JagielskiDim inByte As Integer, inByte2 As Integer
41*b1cdbd2cSJim JagielskiDim inShort As Integer, inShort2 As Integer
42*b1cdbd2cSJim JagielskiDim inLong As Long, inLong2 As Long, inLong3 As Long, inLong4 As Long
43*b1cdbd2cSJim JagielskiDim inString As String, inString2 As String
44*b1cdbd2cSJim JagielskiDim inFloat As Single, inFloat2 As Single
45*b1cdbd2cSJim JagielskiDim inDouble As Double, inDouble2 As Double
46*b1cdbd2cSJim JagielskiDim inVariant, inVariant2
47*b1cdbd2cSJim JagielskiDim inAr, inAr2
48*b1cdbd2cSJim JagielskiDim inDate As Date,inDate2 As Date, outDate As Date
49*b1cdbd2cSJim JagielskiDim inCurrency As Currency, inCurrency2 As Currency, outCurrency As Currency
50*b1cdbd2cSJim JagielskiDim inSCode As New com.sun.star.bridge.oleautomation.SCode
51*b1cdbd2cSJim JagielskiDim inSCode2 As New com.sun.star.bridge.oleautomation.SCode
52*b1cdbd2cSJim JagielskiDim inDecimal As Variant, inDecimal2 As Variant, outDecimal As Variant
53*b1cdbd2cSJim JagielskiDim inrefDecimal As Variant, outrefDecimal As Variant
54*b1cdbd2cSJim JagielskiDim outSCode As New com.sun.star.bridge.oleautomation.SCode
55*b1cdbd2cSJim JagielskiDim outByte As Integer
56*b1cdbd2cSJim JagielskiDim outShort As Integer
57*b1cdbd2cSJim JagielskiDim outLong, outLong2 As Long
58*b1cdbd2cSJim JagielskiDim outString As String
59*b1cdbd2cSJim JagielskiDim outFloat As Single
60*b1cdbd2cSJim JagielskiDim outDouble As Double
61*b1cdbd2cSJim JagielskiDim outVariant
62*b1cdbd2cSJim Jagielski'bug #109936 causes an errOr when outObject is used As out param
63*b1cdbd2cSJim JagielskiDim inObject As Object, inObject2 As Object, outObject As Object
64*b1cdbd2cSJim JagielskiDim objNOTHING As Object
65*b1cdbd2cSJim JagielskiDim inUnknown As Object, inUnknown2 As Object, outUnknown As Object
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim JagielskiDim inArray, outArray, outArray2
68*b1cdbd2cSJim JagielskiDim len1, len2
69*b1cdbd2cSJim JagielskiDim arString(1) As String
70*b1cdbd2cSJim JagielskiarString(0)= "String one"
71*b1cdbd2cSJim JagielskiarString(1)= "String two"
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim JagielskiDim factory As Object
74*b1cdbd2cSJim Jagielskifactory= createUnoService("com.sun.star.bridge.OleObjectFactory")
75*b1cdbd2cSJim JagielskiDim obj As Object
76*b1cdbd2cSJim Jagielskiobj= factory.createInstance("AxTestComponents.Basic")
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim JagielskiDim objFoo As Object
79*b1cdbd2cSJim JagielskiobjFoo = factory.createInstance("AxTestComponents.Foo")
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski'in parameter -------------------------------------------------------------------
83*b1cdbd2cSJim JagielskiinBool = true
84*b1cdbd2cSJim JagielskiinByte = 10
85*b1cdbd2cSJim JagielskiinShort = 11
86*b1cdbd2cSJim JagielskiinLong = 111
87*b1cdbd2cSJim JagielskiinString = "Hello World"
88*b1cdbd2cSJim JagielskiinFloat = 3.14
89*b1cdbd2cSJim JagielskiinDouble = 3.145
90*b1cdbd2cSJim JagielskiinVariant = "bla"
91*b1cdbd2cSJim JagielskiinDate = NOW()
92*b1cdbd2cSJim JagielskiinCurrency = 12345.6789
93*b1cdbd2cSJim JagielskiinSCode.Value = &h80020004
94*b1cdbd2cSJim JagielskiinDecimal = CDec("-9223372036854775808") 'lowest int64
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielskiobj.inBool(inBool)
97*b1cdbd2cSJim Jagielskiobj.inByte(inByte)
98*b1cdbd2cSJim Jagielskiobj.inShort(inShort)
99*b1cdbd2cSJim Jagielskiobj.inLong(inLong)
100*b1cdbd2cSJim Jagielskiobj.inString(inString)
101*b1cdbd2cSJim Jagielskiobj.inFloat(inFloat)
102*b1cdbd2cSJim Jagielskiobj.inDouble(inDouble)
103*b1cdbd2cSJim Jagielskiobj.inVariant(inVariant)
104*b1cdbd2cSJim Jagielski'obj.prpString= "a string property"
105*b1cdbd2cSJim Jagielskiobj.inObject(obj)
106*b1cdbd2cSJim Jagielskiobj.inArray(arString())
107*b1cdbd2cSJim Jagielskiobj.inDate(inDate)
108*b1cdbd2cSJim Jagielskiobj.inCurrency(inCurrency)
109*b1cdbd2cSJim Jagielskiobj.inSCode(inSCode)
110*b1cdbd2cSJim Jagielskiobj.inUnknown(objFoo)
111*b1cdbd2cSJim Jagielskiobj.inDecimal(inDecimal)
112*b1cdbd2cSJim Jagielski
113*b1cdbd2cSJim Jagielski'out parameter -------------------------------------------------------------------------
114*b1cdbd2cSJim JagielskioutBool = false
115*b1cdbd2cSJim Jagielskiobj.outBool(outBool)
116*b1cdbd2cSJim JagielskioutByte = 0
117*b1cdbd2cSJim Jagielskiobj.outByte(outByte)
118*b1cdbd2cSJim JagielskioutShort = 0
119*b1cdbd2cSJim Jagielskiobj.outShort(outShort)
120*b1cdbd2cSJim JagielskioutLong = 0
121*b1cdbd2cSJim Jagielskiobj.outLong(outLong)
122*b1cdbd2cSJim JagielskioutFloat = 0
123*b1cdbd2cSJim Jagielskiobj.outFloat(outFloat)
124*b1cdbd2cSJim JagielskioutDouble = 0
125*b1cdbd2cSJim Jagielskiobj.outDouble(outDouble)
126*b1cdbd2cSJim JagielskioutString = ""
127*b1cdbd2cSJim Jagielskiobj.outString(outString)
128*b1cdbd2cSJim JagielskioutVariant = 0
129*b1cdbd2cSJim Jagielskiobj.outVariant(outVariant)
130*b1cdbd2cSJim JagielskioutObject  = NOTHING
131*b1cdbd2cSJim Jagielskiobj.outObject(outObject)
132*b1cdbd2cSJim JagielskioutArray = 0
133*b1cdbd2cSJim Jagielskiobj.outArray(outArray)
134*b1cdbd2cSJim Jagielskiobj.outDate(outDate)
135*b1cdbd2cSJim Jagielskiobj.outCurrency(outCurrency)
136*b1cdbd2cSJim Jagielskiobj.outSCode(outSCode)
137*b1cdbd2cSJim Jagielskiobj.outUnknown(outUnknown)
138*b1cdbd2cSJim Jagielskiobj.outDecimal(outDecimal)
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski
141*b1cdbd2cSJim JagielskiIf inBool <> outBool Or inByte <> outByte Or inShort <> outShort Or inLong <> outLong Or _
142*b1cdbd2cSJim Jagielski   inFloat <> outFloat Or inDouble <> outDouble Or inString <> outString Or _
143*b1cdbd2cSJim Jagielski   inVariant <> outVariant Or NOT equalUnoObjects(obj, outObject) Or NOT _
144*b1cdbd2cSJim Jagielski   equalArrays(arString(), outArray()) Or inDate <> outDate Or inCurrency <> outCurrency Or _
145*b1cdbd2cSJim Jagielski   inSCode.Value <> outSCode.Value Or Not equalUnoObjects(objFoo, outUnknown) Or _
146*b1cdbd2cSJim Jagielski   inDecimal <> outDecimal Then
147*b1cdbd2cSJim Jagielski   runtest = -1
148*b1cdbd2cSJim Jagielski   exit Function
149*b1cdbd2cSJim JagielskiEnd If
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski
152*b1cdbd2cSJim Jagielski'in-out parameter -------------------------------------------------------------
153*b1cdbd2cSJim Jagielski'implementation of inout methods returns the previously set value in out param
154*b1cdbd2cSJim JagielskiinBool = true
155*b1cdbd2cSJim JagielskiinBool2 = inBool
156*b1cdbd2cSJim Jagielskiobj.inoutBool(inBool2)
157*b1cdbd2cSJim JagielskioutBool = false
158*b1cdbd2cSJim Jagielskiobj.inoutBool(outBool)
159*b1cdbd2cSJim JagielskiinByte = 10
160*b1cdbd2cSJim JagielskiinByte2 = inByte
161*b1cdbd2cSJim Jagielskiobj.inoutByte(inByte2)
162*b1cdbd2cSJim JagielskioutByte = 0
163*b1cdbd2cSJim Jagielskiobj.inoutByte(outByte)
164*b1cdbd2cSJim JagielskiinShort =  10
165*b1cdbd2cSJim JagielskiinShort2 = inShort
166*b1cdbd2cSJim Jagielskiobj.inShort(inShort2)
167*b1cdbd2cSJim JagielskioutShort = 0
168*b1cdbd2cSJim Jagielskiobj.inoutShort(outShort)
169*b1cdbd2cSJim JagielskiinLong = 10
170*b1cdbd2cSJim JagielskiinLong2 = inLong
171*b1cdbd2cSJim Jagielskiobj.inoutLong(inLong2)
172*b1cdbd2cSJim JagielskioutLong = 0
173*b1cdbd2cSJim Jagielskiobj.inoutLong(outLong)
174*b1cdbd2cSJim JagielskiinFloat = 3.14
175*b1cdbd2cSJim JagielskiinFloat2 = inFloat
176*b1cdbd2cSJim Jagielskiobj.inoutFloat(inFloat2)
177*b1cdbd2cSJim JagielskioutFloat = 0
178*b1cdbd2cSJim Jagielskiobj.inoutFloat(outFloat)
179*b1cdbd2cSJim JagielskiinDouble= 3.14
180*b1cdbd2cSJim JagielskiinDouble2 = inDouble
181*b1cdbd2cSJim Jagielskiobj.inoutDouble(inDouble2)
182*b1cdbd2cSJim JagielskioutDouble = 0
183*b1cdbd2cSJim Jagielskiobj.inoutDouble(outDouble)
184*b1cdbd2cSJim JagielskiinString = "in"
185*b1cdbd2cSJim JagielskiinString2 = inString
186*b1cdbd2cSJim Jagielskiobj.inoutString(inString2)
187*b1cdbd2cSJim JagielskioutString = ""
188*b1cdbd2cSJim Jagielskiobj.inoutString(outString)
189*b1cdbd2cSJim JagielskiinVariant = "in"
190*b1cdbd2cSJim JagielskiinVariant2 = inVariant
191*b1cdbd2cSJim Jagielskiobj.inoutVariant(inVariant2)
192*b1cdbd2cSJim JagielskioutVariant = 0
193*b1cdbd2cSJim Jagielskiobj.inoutVariant(outVariant)
194*b1cdbd2cSJim JagielskiinObject = factory.createInstance("AxTestComponents.Basic")
195*b1cdbd2cSJim JagielskiinObject2 = inObject
196*b1cdbd2cSJim Jagielskiobj.inoutObject(inObject2)
197*b1cdbd2cSJim JagielskioutObject = NOTHING
198*b1cdbd2cSJim Jagielskiobj.inoutObject(outObject)
199*b1cdbd2cSJim JagielskiinAr = arString()
200*b1cdbd2cSJim JagielskiinAr2 = inAr
201*b1cdbd2cSJim Jagielskiobj.inoutArray(inAr2)
202*b1cdbd2cSJim JagielskioutArray = 0
203*b1cdbd2cSJim Jagielskiobj.outArray(outArray())
204*b1cdbd2cSJim JagielskiinDate = NOW()
205*b1cdbd2cSJim JagielskiinDate2 = inDate
206*b1cdbd2cSJim Jagielskiobj.inoutDate(inDate2)
207*b1cdbd2cSJim JagielskioutDate = 0
208*b1cdbd2cSJim Jagielskiobj.inoutDate(outDate)
209*b1cdbd2cSJim JagielskiinCurrency = 1234.5678
210*b1cdbd2cSJim JagielskiinCurrency2 = inCurrency
211*b1cdbd2cSJim Jagielskiobj.inoutCurrency(inCurrency2)
212*b1cdbd2cSJim JagielskioutCurrency = 0
213*b1cdbd2cSJim Jagielskiobj.inoutCurrency(outCurrency)
214*b1cdbd2cSJim JagielskiinSCode.Value = &h80020004
215*b1cdbd2cSJim JagielskiinSCode2 = inSCode
216*b1cdbd2cSJim Jagielskiobj.inoutSCode(inSCode2)
217*b1cdbd2cSJim JagielskioutSCode.Value = 0
218*b1cdbd2cSJim Jagielskiobj.inoutSCode(outSCode)
219*b1cdbd2cSJim JagielskiinUnknown = objFoo
220*b1cdbd2cSJim JagielskiinUnknown2 = inUnknown
221*b1cdbd2cSJim Jagielskiobj.inoutUnknown(inUnknown2)
222*b1cdbd2cSJim JagielskioutUnknown = Nothing
223*b1cdbd2cSJim Jagielskiobj.inoutUnknown(outUnknown)
224*b1cdbd2cSJim JagielskiinDecimal = CDec("18446744073709551615") 'highest positiv value of unsigne int64
225*b1cdbd2cSJim JagielskiinDecimal2 = inDecimal
226*b1cdbd2cSJim Jagielskiobj.inoutDecimal(inDecimal2)
227*b1cdbd2cSJim JagielskioutDecimal = 0
228*b1cdbd2cSJim Jagielskiobj.inoutDecimal(outDecimal)
229*b1cdbd2cSJim Jagielski
230*b1cdbd2cSJim JagielskiIf inBool <> outBool Or inByte <> outByte Or inShort <> outShort Or inLong <> outLong Or _
231*b1cdbd2cSJim Jagielski   inFloat <> outFloat Or inDouble <> outDouble Or inString <> outString Or _
232*b1cdbd2cSJim Jagielski   inVariant <> outVariant Or NOT equalUnoObjects(inObject, outObject) Or _
233*b1cdbd2cSJim Jagielski   NOT equalArrays(inAr, outArray) Or inDate <> outDate Or inCurrency <> outCurrency Or _
234*b1cdbd2cSJim Jagielski   inSCode.Value <> outSCode.Value  Or Not equalUnoObjects(inUnknown, outUnknown) Or _
235*b1cdbd2cSJim Jagielski   inDecimal <> outDecimal Then
236*b1cdbd2cSJim Jagielski  runtest = -1
237*b1cdbd2cSJim Jagielski  Exit Function
238*b1cdbd2cSJim JagielskiEnd If
239*b1cdbd2cSJim Jagielski
240*b1cdbd2cSJim Jagielski'properties -------------------------------------------------------------------------
241*b1cdbd2cSJim JagielskiinBool = false
242*b1cdbd2cSJim JagielskioutBool = true
243*b1cdbd2cSJim Jagielskiobj.prpBool = inBool
244*b1cdbd2cSJim JagielskioutBool = obj.prpBool
245*b1cdbd2cSJim JagielskiinByte = 11
246*b1cdbd2cSJim JagielskioutByte = 0
247*b1cdbd2cSJim Jagielskiobj.prpByte = inByte
248*b1cdbd2cSJim JagielskioutByte= obj.prpByte
249*b1cdbd2cSJim JagielskiinShort = 127
250*b1cdbd2cSJim JagielskioutShort = 0
251*b1cdbd2cSJim Jagielskiobj.prpShort= inShort
252*b1cdbd2cSJim JagielskioutShort= obj.prpShort
253*b1cdbd2cSJim JagielskiinLong = 1000
254*b1cdbd2cSJim JagielskioutLong = 0
255*b1cdbd2cSJim Jagielskiobj.prpLong = inLong
256*b1cdbd2cSJim JagielskioutLong= obj.prpLong
257*b1cdbd2cSJim JagielskiinFloat = 3.14
258*b1cdbd2cSJim JagielskioutFloat = 0
259*b1cdbd2cSJim Jagielskiobj.prpFloat = inFloat
260*b1cdbd2cSJim JagielskioutFloat= obj.prpFloat
261*b1cdbd2cSJim JagielskiinDouble = 3.123
262*b1cdbd2cSJim JagielskioutDouble = 0
263*b1cdbd2cSJim Jagielskiobj.prpDouble = inDouble
264*b1cdbd2cSJim JagielskioutDouble= obj.prpDouble
265*b1cdbd2cSJim JagielskiinString = "bla"
266*b1cdbd2cSJim JagielskioutString = ""
267*b1cdbd2cSJim Jagielskiobj.prpString = inString
268*b1cdbd2cSJim JagielskioutString = obj.prpString
269*b1cdbd2cSJim JagielskiinObject = obj
270*b1cdbd2cSJim JagielskioutObject = objNOTHING
271*b1cdbd2cSJim Jagielskiobj.prpObject = inObject
272*b1cdbd2cSJim JagielskioutObject = obj.prpObject
273*b1cdbd2cSJim JagielskiinVariant = "bla"
274*b1cdbd2cSJim JagielskioutVariant = 0
275*b1cdbd2cSJim Jagielskiobj.prpVariant = inVariant
276*b1cdbd2cSJim JagielskioutVariant= obj.prpVariant
277*b1cdbd2cSJim JagielskiinArray = arString()
278*b1cdbd2cSJim JagielskioutArray = 0
279*b1cdbd2cSJim Jagielskiobj.prpArray = inArray()
280*b1cdbd2cSJim JagielskioutArray= obj.prpArray
281*b1cdbd2cSJim JagielskiinDate = NOW()
282*b1cdbd2cSJim JagielskioutDate = 0
283*b1cdbd2cSJim Jagielskiobj.prpDate = inDate
284*b1cdbd2cSJim JagielskioutDate = obj.prpDate
285*b1cdbd2cSJim JagielskiinCurrency = 1234.5678
286*b1cdbd2cSJim JagielskioutCurrency = 0
287*b1cdbd2cSJim Jagielskiobj.prpCurrency = inCurrency
288*b1cdbd2cSJim JagielskioutCurrency = obj.prpCurrency
289*b1cdbd2cSJim JagielskiinSCode.Value = &h80020004
290*b1cdbd2cSJim JagielskioutSCode.Value = 0
291*b1cdbd2cSJim Jagielskiobj.prpSCode = inSCode
292*b1cdbd2cSJim JagielskioutSCode = obj.prpSCode
293*b1cdbd2cSJim JagielskiinUnknown = objFoo
294*b1cdbd2cSJim JagielskioutUnknown= Nothing
295*b1cdbd2cSJim Jagielskiobj.prpUnknown = inUnknown
296*b1cdbd2cSJim JagielskioutUnknown = obj.prpUnknown
297*b1cdbd2cSJim JagielskiinDecimal = CDec("18446744073709551615")' highest unsigned int64
298*b1cdbd2cSJim JagielskioutDecimal = 0
299*b1cdbd2cSJim Jagielskiobj.prpDecimal = inDecimal
300*b1cdbd2cSJim JagielskioutDecimal = obj.prpDecimal
301*b1cdbd2cSJim Jagielski
302*b1cdbd2cSJim JagielskiIf inBool <> outBool Or inByte <> outByte Or inShort <> outShort Or inLong <> outLong Or _
303*b1cdbd2cSJim Jagielski   inFloat <> outFloat Or inDouble <> outDouble Or inString <> outString Or _
304*b1cdbd2cSJim Jagielski   inVariant <> outVariant Or NOT equalUnoObjects(inObject, outObject) Or _
305*b1cdbd2cSJim Jagielski   NOT equalArrays(inArray, outArray) Or inDate <> outDate Or inCurrency <> outCurrency Or _
306*b1cdbd2cSJim Jagielski   inSCode.Value <> outSCode.Value Or Not equalUnoObjects(inUnknown, outUnknown) Or _
307*b1cdbd2cSJim Jagielski   inDecimal <> outDecimal Then
308*b1cdbd2cSJim Jagielski  runtest = -1
309*b1cdbd2cSJim Jagielski  Exit Function
310*b1cdbd2cSJim JagielskiEnd If
311*b1cdbd2cSJim Jagielski
312*b1cdbd2cSJim Jagielski' ref parameter ------------------------------------------------------------------------
313*b1cdbd2cSJim Jagielskiobj.inLong(0)
314*b1cdbd2cSJim JagielskiinLong = 123
315*b1cdbd2cSJim JagielskioutLong = 0
316*b1cdbd2cSJim Jagielskiobj.inLong(0)
317*b1cdbd2cSJim Jagielskiobj.inrefLong(inLong)
318*b1cdbd2cSJim Jagielskiobj.outLong(outLong)
319*b1cdbd2cSJim JagielskiinVariant = "bla"
320*b1cdbd2cSJim JagielskioutVariant = 0
321*b1cdbd2cSJim Jagielskiobj.inVariant(0)
322*b1cdbd2cSJim Jagielskiobj.inrefVariant(inVariant)
323*b1cdbd2cSJim Jagielskiobj.outVariant(outVariant)
324*b1cdbd2cSJim JagielskiIf inLong <> outLong Or inVariant <> outVariant Then
325*b1cdbd2cSJim Jagielski  runtest = -1
326*b1cdbd2cSJim Jagielski  Exit Function
327*b1cdbd2cSJim JagielskiEnd If
328*b1cdbd2cSJim Jagielski
329*b1cdbd2cSJim JagielskioutLong = 0
330*b1cdbd2cSJim Jagielskiobj.prprefLong = inLong
331*b1cdbd2cSJim JagielskioutLong = obj.prprefLong
332*b1cdbd2cSJim JagielskioutVariant = 0
333*b1cdbd2cSJim Jagielskiobj.prprefVariant = inVariant
334*b1cdbd2cSJim JagielskioutVariant = obj.prprefVariant
335*b1cdbd2cSJim JagielskiIf inLong <> outLong Or  inVariant <> outVariant Then
336*b1cdbd2cSJim Jagielski  runtest = -1
337*b1cdbd2cSJim Jagielski  Exit Function
338*b1cdbd2cSJim JagielskiEnd If
339*b1cdbd2cSJim Jagielski
340*b1cdbd2cSJim Jagielski
341*b1cdbd2cSJim Jagielski'vararg --------------------------------------------------------------------------------
342*b1cdbd2cSJim JagielskiinLong=1
343*b1cdbd2cSJim JagielskiinLong2 = 2
344*b1cdbd2cSJim JagielskiinLong3 = 3
345*b1cdbd2cSJim Jagielskiobj.varargfunc1(inLong)
346*b1cdbd2cSJim JagielskioutArray = 0
347*b1cdbd2cSJim JagielskioutLong = 0
348*b1cdbd2cSJim Jagielskiobj.varargfunc2(outLong, outArray)
349*b1cdbd2cSJim JagielskiIf inLong <> outLong Then
350*b1cdbd2cSJim Jagielski  runtest = -1
351*b1cdbd2cSJim Jagielski  Exit Function
352*b1cdbd2cSJim JagielskiEnd If
353*b1cdbd2cSJim Jagielskilen1 = UBound(outArray)  - LBound(outArray) +1
354*b1cdbd2cSJim JagielskiIf len1 <> 0 Then
355*b1cdbd2cSJim Jagielski  runtest = -1
356*b1cdbd2cSJim Jagielski  Exit Function
357*b1cdbd2cSJim JagielskiEnd If
358*b1cdbd2cSJim JagielskioutArray = 0
359*b1cdbd2cSJim Jagielskiobj.varargfunc1(inLong, inLong2, inLong3)
360*b1cdbd2cSJim Jagielskiobj.varargfunc2(outLong, outArray)
361*b1cdbd2cSJim Jagielskilen1 = UBound(outArray) - LBound(outArray) +1
362*b1cdbd2cSJim JagielskiIf len1 <> 2 Or outArray(0) <> inLong2 Or outArray(1) <> inLong3 Then
363*b1cdbd2cSJim Jagielski  runtest = -1
364*b1cdbd2cSJim Jagielski  Exit Function
365*b1cdbd2cSJim JagielskiEnd If
366*b1cdbd2cSJim Jagielski
367*b1cdbd2cSJim Jagielski
368*b1cdbd2cSJim Jagielski'defaultvalue ---------------------------------------------------------------------------
369*b1cdbd2cSJim JagielskiinLong = 0
370*b1cdbd2cSJim JagielskiinFloat = 0
371*b1cdbd2cSJim JagielskiinVariant = 0
372*b1cdbd2cSJim JagielskiinVariant2 = 0
373*b1cdbd2cSJim Jagielski'defaults are: 1, 2, 4
374*b1cdbd2cSJim Jagielski'The third parameter is a VARIANT with a default value of 4. COM gives it the type BSTR
375*b1cdbd2cSJim Jagielskiobj.defaultvalue1()
376*b1cdbd2cSJim Jagielskiobj.defaultvalue2(inLong, inFloat, inVariant)
377*b1cdbd2cSJim JagielskiIf inLong <> 1 Or inFloat <> 2 Or inVariant <> "4" Then
378*b1cdbd2cSJim Jagielski  runtest = -1
379*b1cdbd2cSJim Jagielski  Exit Function
380*b1cdbd2cSJim JagielskiEnd If
381*b1cdbd2cSJim JagielskiinLong = 10
382*b1cdbd2cSJim JagielskiinFloat = 11
383*b1cdbd2cSJim JagielskiinLong2 = inLong
384*b1cdbd2cSJim JagielskiinFloat2 = inFloat
385*b1cdbd2cSJim JagielskiinVariant = 0
386*b1cdbd2cSJim JagielskiinVariant = 0
387*b1cdbd2cSJim Jagielskiobj.defaultvalue1(inLong, inFloat)
388*b1cdbd2cSJim Jagielskiobj.defaultvalue2(inLong, inFloat, inVariant)
389*b1cdbd2cSJim JagielskiIf inLong <> inLong2 Or inFloat <> inFloat2 Or inVariant <> "4" Then
390*b1cdbd2cSJim Jagielski  runtest = -1
391*b1cdbd2cSJim Jagielski  Exit Function
392*b1cdbd2cSJim JagielskiEnd If
393*b1cdbd2cSJim Jagielski
394*b1cdbd2cSJim Jagielski'optional parameters ----------------------------------------------------------------
395*b1cdbd2cSJim JagielskiinLong = 100
396*b1cdbd2cSJim JagielskioutLong = 0
397*b1cdbd2cSJim Jagielskiobj.optional1(inLong)
398*b1cdbd2cSJim Jagielskiobj.optional2(outLong)
399*b1cdbd2cSJim JagielskiIf inLong <> outLong Then
400*b1cdbd2cSJim Jagielski runtest = -1
401*b1cdbd2cSJim Jagielski Exit Function
402*b1cdbd2cSJim JagielskiEnd If
403*b1cdbd2cSJim Jagielski
404*b1cdbd2cSJim JagielskiinLong2 = 101
405*b1cdbd2cSJim JagielskioutLong2 = 0
406*b1cdbd2cSJim Jagielskiobj.optional1(inLong, inLong2)
407*b1cdbd2cSJim Jagielskiobj.optional2(outLong, outLong2)
408*b1cdbd2cSJim JagielskiIf inLong <> outLong AND inLong2 <> outLong2 Then
409*b1cdbd2cSJim Jagielski runtest = -1
410*b1cdbd2cSJim Jagielski Exit Function
411*b1cdbd2cSJim JagielskiEnd If
412*b1cdbd2cSJim Jagielski
413*b1cdbd2cSJim JagielskiinLong2 = 101
414*b1cdbd2cSJim JagielskioutLong2 = 0
415*b1cdbd2cSJim Jagielskiobj.optional1(inLong, inLong2)
416*b1cdbd2cSJim Jagielskiobj.optional1(inLong)
417*b1cdbd2cSJim Jagielskiobj.optional2(outLong, outLong2)
418*b1cdbd2cSJim JagielskiIf inLong <> outLong AND inLong2 <> outLong2 Then
419*b1cdbd2cSJim Jagielski runtest = -1
420*b1cdbd2cSJim Jagielski Exit Function
421*b1cdbd2cSJim JagielskiEnd If
422*b1cdbd2cSJim Jagielski
423*b1cdbd2cSJim JagielskiinLong = 10
424*b1cdbd2cSJim JagielskiinLong2 = 100
425*b1cdbd2cSJim JagielskioutLong = 5
426*b1cdbd2cSJim JagielskioutLong2 = 6
427*b1cdbd2cSJim Jagielskiobj.optional3()
428*b1cdbd2cSJim Jagielskiobj.optional3(inLong, inLong2)
429*b1cdbd2cSJim Jagielskiobj.optional4(outLong, outLong2) 'outLong = 10, outLong2 = 100
430*b1cdbd2cSJim JagielskiIf inLong <> outLong AND inLong2 <> outLong2 Then
431*b1cdbd2cSJim Jagielski runtest = -1
432*b1cdbd2cSJim Jagielski Exit Function
433*b1cdbd2cSJim JagielskiEnd If
434*b1cdbd2cSJim JagielskiinLong = 10
435*b1cdbd2cSJim JagielskiinLong2 = 100
436*b1cdbd2cSJim JagielskiinLong3 = inLong
437*b1cdbd2cSJim JagielskiinLong4 = inLong2
438*b1cdbd2cSJim Jagielskiobj.optional4(inLong, inLong)
439*b1cdbd2cSJim JagielskioutLong = 0
440*b1cdbd2cSJim JagielskioutLong2 = 0
441*b1cdbd2cSJim Jagielskiobj.optional5(outLong, outLong2)
442*b1cdbd2cSJim JagielskiIf inLong3 <> outLong AND inLong4 <> outLong2 Then
443*b1cdbd2cSJim Jagielski  runtest = -1
444*b1cdbd2cSJim Jagielski  Exit Function
445*b1cdbd2cSJim JagielskiEnd If
446*b1cdbd2cSJim Jagielski
447*b1cdbd2cSJim JagielskiinLong = 10
448*b1cdbd2cSJim JagielskioutLong = 5
449*b1cdbd2cSJim Jagielskiobj.optional3(inLong)
450*b1cdbd2cSJim Jagielskiobj.optional4(outLong)
451*b1cdbd2cSJim JagielskiIf inLong <> outLong Then
452*b1cdbd2cSJim Jagielski runtest = -1
453*b1cdbd2cSJim Jagielski Exit Function
454*b1cdbd2cSJim JagielskiEnd If
455*b1cdbd2cSJim JagielskiinLong = 10
456*b1cdbd2cSJim JagielskiinLong2 = inLong
457*b1cdbd2cSJim JagielskioutLong = 0
458*b1cdbd2cSJim Jagielskiobj.optional4(inLong)
459*b1cdbd2cSJim Jagielskiobj.optional5(outLong)
460*b1cdbd2cSJim JagielskiIf inLong2 <> outLong Then
461*b1cdbd2cSJim Jagielski  runtest = -1
462*b1cdbd2cSJim Jagielski  Exit Function
463*b1cdbd2cSJim JagielskiEnd If
464*b1cdbd2cSJim Jagielski
465*b1cdbd2cSJim Jagielski'named arguments-------------------------------------------------------------------------
466*b1cdbd2cSJim Jagielski'all args As named args, different order
467*b1cdbd2cSJim Jagielskiobj.optional6(0, 0, 0, 0)
468*b1cdbd2cSJim JagielskiinLong = 1
469*b1cdbd2cSJim JagielskiinLong2 = 2
470*b1cdbd2cSJim JagielskiinLong3 = 3
471*b1cdbd2cSJim JagielskiinLong4 = 4
472*b1cdbd2cSJim Jagielskiobj.optional6(val4:= inLong4, val3:=inLong3, val2:=inLong2, val1:= inLong)
473*b1cdbd2cSJim JagielskiDim outLong3 As Long
474*b1cdbd2cSJim JagielskiDim outLong4 As Long
475*b1cdbd2cSJim JagielskioutLong = 0
476*b1cdbd2cSJim JagielskioutLong2 = 0
477*b1cdbd2cSJim JagielskioutLong3 = 0
478*b1cdbd2cSJim JagielskioutLong4 = 0
479*b1cdbd2cSJim Jagielskiobj.optional7(outLong, outLong2, outLong3, outLong4)
480*b1cdbd2cSJim JagielskiIf inLong <> outLong Or inLong2 <> outLong2 _
481*b1cdbd2cSJim Jagielski	Or inLong3 <> outLong3 Or inLong4 <> outLong4 Then
482*b1cdbd2cSJim Jagielski	runtest = -1
483*b1cdbd2cSJim Jagielski	Exit Function
484*b1cdbd2cSJim JagielskiEnd If
485*b1cdbd2cSJim Jagielski
486*b1cdbd2cSJim Jagielski'mixed positional and named args with omitted args
487*b1cdbd2cSJim JagielskiDim scode_paramNotFound As New com.sun.star.bridge.oleautomation.SCode
488*b1cdbd2cSJim Jagielskiscode_paramNotFound.Value = &h80020004
489*b1cdbd2cSJim Jagielski
490*b1cdbd2cSJim Jagielskiobj.optional6(0, 0, 0, 0)
491*b1cdbd2cSJim Jagielski'val1 and val3 will be DISP_E_PARAMNOTFOUND
492*b1cdbd2cSJim Jagielskiobj.optional6(, inLong2, val4:=inLong4)
493*b1cdbd2cSJim JagielskiDim outSCode1, outSCode2
494*b1cdbd2cSJim Jagielskiobj.optional7(outSCode, outLong2, outSCode2, outLong4)
495*b1cdbd2cSJim JagielskiIf outSCode.Value <> scode_paramNotFound.Value Or inLong2 <> outLong2 _
496*b1cdbd2cSJim Jagielski	Or outSCode2.Value <> scode_paramNotFound.Value Or inLong4 <> outLong4 Then
497*b1cdbd2cSJim Jagielski	runtest = -1
498*b1cdbd2cSJim Jagielski	Exit Function
499*b1cdbd2cSJim JagielskiEnd If
500*b1cdbd2cSJim Jagielski
501*b1cdbd2cSJim Jagielski'mixed positional and named args with ommitted args as out -args
502*b1cdbd2cSJim JagielskiinLong = 1
503*b1cdbd2cSJim JagielskiinLong2 = 2
504*b1cdbd2cSJim JagielskiinLong3 = 3
505*b1cdbd2cSJim JagielskiinLong4 = 4
506*b1cdbd2cSJim Jagielskiobj.optional6(inLong, inLong2, inLong3, inLong4)
507*b1cdbd2cSJim JagielskioutLong2 = 0
508*b1cdbd2cSJim JagielskioutLong3 = 0
509*b1cdbd2cSJim Jagielskiobj.optional7(,outLong2, val3:= outLong3)
510*b1cdbd2cSJim JagielskiIf inLong2 <> outLong2 Or inLong3 <> outLong3 Then
511*b1cdbd2cSJim Jagielski	runtest = -1
512*b1cdbd2cSJim Jagielski	Exit Function
513*b1cdbd2cSJim JagielskiEnd If
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski'test properties with additional arguments ------------------------------------
516*b1cdbd2cSJim JagielskiinLong = 10
517*b1cdbd2cSJim JagielskiinLong2 = 20
518*b1cdbd2cSJim JagielskiinLong3 = 30
519*b1cdbd2cSJim JagielskioutLong = 0
520*b1cdbd2cSJim JagielskioutLong2 = 0
521*b1cdbd2cSJim JagielskioutLong3 = 0
522*b1cdbd2cSJim Jagielskiobj.prpMultiArg1(0,0) = 0
523*b1cdbd2cSJim Jagielski'obj.prpMultiArg1 = 0
524*b1cdbd2cSJim Jagielskiobj.prpMultiArg1(inLong,inLong2) = inLong3
525*b1cdbd2cSJim JagielskioutLong3 = obj.prpMultiArg1(outLong, outLong2)
526*b1cdbd2cSJim JagielskiIf outLong <> 10 Or outLong2 <> 02 Or outLong3 <> 30 Then
527*b1cdbd2cSJim Jagielski	runtest = -1
528*b1cdbd2cSJim Jagielski	Exit Function
529*b1cdbd2cSJim JagielskiEnd If
530*b1cdbd2cSJim Jagielski
531*b1cdbd2cSJim JagielskioutLong = 0
532*b1cdbd2cSJim JagielskioutLong2 = 0
533*b1cdbd2cSJim Jagielskiobj.prpMultiArg1(0,0) = 0
534*b1cdbd2cSJim Jagielskiobj.prpMultiArg1(1) = 3
535*b1cdbd2cSJim JagielskioutLong2 = obj.prpMultiArg1(outLong)
536*b1cdbd2cSJim JagielskiIf outLong <> 1 Or outLong2 <> 3 Then
537*b1cdbd2cSJim Jagielski	runtest = -1
538*b1cdbd2cSJim Jagielski	Exit Function
539*b1cdbd2cSJim JagielskiEnd If
540*b1cdbd2cSJim Jagielski
541*b1cdbd2cSJim JagielskioutLong = 0
542*b1cdbd2cSJim JagielskioutLong2 = 0
543*b1cdbd2cSJim Jagielskiobj.prpMultiArg1(0,0) = 0
544*b1cdbd2cSJim Jagielskiobj.prpMultiArg1(val2:= 1) = 3
545*b1cdbd2cSJim JagielskioutLong2 = obj.prpMultiArg1(val2:=outLong)
546*b1cdbd2cSJim JagielskiIf outLong <> 1 Or outLong2 <> 3 Then
547*b1cdbd2cSJim Jagielski	runtest = -1
548*b1cdbd2cSJim Jagielski	Exit Function
549*b1cdbd2cSJim JagielskiEnd If
550*b1cdbd2cSJim Jagielski
551*b1cdbd2cSJim JagielskioutLong = -1
552*b1cdbd2cSJim JagielskioutLong2 = -1
553*b1cdbd2cSJim Jagielskiobj.prpMultiArg2(0) = 0
554*b1cdbd2cSJim JagielskioutLong = obj.prpMultiArg2GetValues(outLong, outLong2)
555*b1cdbd2cSJim JagielskiIf outLong <> 0 Or outLong2 <> 0 Then
556*b1cdbd2cSJim Jagielski	runtest = -1
557*b1cdbd2cSJim Jagielski	Exit Function
558*b1cdbd2cSJim JagielskiEnd If
559*b1cdbd2cSJim Jagielski
560*b1cdbd2cSJim Jagielski
561*b1cdbd2cSJim JagielskioutLong = 0
562*b1cdbd2cSJim JagielskioutLong2 = 0
563*b1cdbd2cSJim Jagielskiobj.prpMultiArg2(1) = 2
564*b1cdbd2cSJim Jagielskiobj.prpMultiArg2GetValues(outLong, outLong2)
565*b1cdbd2cSJim JagielskiIf outLong <> 1 Or outLong2 <> 2 Then
566*b1cdbd2cSJim Jagielski	runtest = -1
567*b1cdbd2cSJim Jagielski	Exit Function
568*b1cdbd2cSJim JagielskiEnd If
569*b1cdbd2cSJim Jagielski
570*b1cdbd2cSJim Jagielski
571*b1cdbd2cSJim Jagielski
572*b1cdbd2cSJim Jagielski' other tests ------------------------------------------------------------------
573*b1cdbd2cSJim Jagielskiobj.inObject(NOTHING)
574*b1cdbd2cSJim JagielskioutObject = NOTHING
575*b1cdbd2cSJim Jagielski'bridge should return an XInterface any with null pointer
576*b1cdbd2cSJim Jagielski'A basic errOr should occur if this is not the case
577*b1cdbd2cSJim Jagielskiobj.outObject(outObject)
578*b1cdbd2cSJim Jagielski
579*b1cdbd2cSJim JagielskiIf Not IsNull(outObject) Then
580*b1cdbd2cSJim Jagielski	runtest = -1
581*b1cdbd2cSJim Jagielski	Exit Function
582*b1cdbd2cSJim JagielskiEnd If
583*b1cdbd2cSJim Jagielski'Decimal passed by reference
584*b1cdbd2cSJim JagielskiinrefDecimal = CDec("9223372036854775807") 'highest positiv value of int64
585*b1cdbd2cSJim Jagielskiobj.inrefDecimal(inrefDecimal)
586*b1cdbd2cSJim JagielskioutrefDecimal = 0
587*b1cdbd2cSJim Jagielskiobj.outDecimal(outrefDecimal)
588*b1cdbd2cSJim JagielskiIf inrefDecimal <> outrefDecimal Then
589*b1cdbd2cSJim Jagielski	runtest = -1
590*b1cdbd2cSJim Jagielski	Exit Function
591*b1cdbd2cSJim JagielskiEnd If
592*b1cdbd2cSJim Jagielski
593*b1cdbd2cSJim Jagielski' Test Automation object with dual interfaces ------------------------------------
594*b1cdbd2cSJim Jagielskidim dispatcher as object
595*b1cdbd2cSJim Jagielskidim oExplorer as object
596*b1cdbd2cSJim Jagielskidispatcher = createUnoService("com.sun.star.bridge.OleObjectFactory")
597*b1cdbd2cSJim JagielskioExplorer = dispatcher.createInstance("InternetExplorer.Application")
598*b1cdbd2cSJim JagielskiIf Not IsNull(oExplorer) Then
599*b1cdbd2cSJim Jagielski	oExplorer.visible = true
600*b1cdbd2cSJim Jagielski	oExplorer.Navigate2("http://www.openoffice.org")
601*b1cdbd2cSJim JagielskiElse
602*b1cdbd2cSJim Jagielski	MsgBox("Could not perform test with Internet Explorer!")
603*b1cdbd2cSJim JagielskiEnd If
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski
606*b1cdbd2cSJim JagielskiEnd Function
607*b1cdbd2cSJim Jagielski
608*b1cdbd2cSJim Jagielski'One dimensional arrays with simple types.
609*b1cdbd2cSJim Jagielski'lower bound must be 0
610*b1cdbd2cSJim JagielskiFunction equalArrays(ar1, ar2)
611*b1cdbd2cSJim JagielskiDim len1
612*b1cdbd2cSJim JagielskiDim len2
613*b1cdbd2cSJim Jagielskilen1 = UBound(ar1) - LBound(ar1) + 1
614*b1cdbd2cSJim Jagielskilen2 = UBound(ar2) - LBound(ar2) + 1
615*b1cdbd2cSJim JagielskiIf len1 <> len2 Then
616*b1cdbd2cSJim Jagielski  equalArrays = false
617*b1cdbd2cSJim Jagielski  Exit Function
618*b1cdbd2cSJim JagielskiEnd If
619*b1cdbd2cSJim JagielskiDim counter
620*b1cdbd2cSJim JagielskiFOr counter = 0 To len1 - 1
621*b1cdbd2cSJim Jagielski  If ar1(counter) <> ar2(counter) Then
622*b1cdbd2cSJim Jagielski    equalArrays = false
623*b1cdbd2cSJim Jagielski    Exit Function
624*b1cdbd2cSJim Jagielski  End If
625*b1cdbd2cSJim JagielskiNext
626*b1cdbd2cSJim JagielskiequalArrays = true
627*b1cdbd2cSJim JagielskiEnd Function
628*b1cdbd2cSJim Jagielski
629*b1cdbd2cSJim Jagielski
630