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