2 ' Copyright 2014 Jacek Caban for CodeWeavers
4 ' This library is free software; you can redistribute it and/or
5 ' modify it under the terms of the GNU Lesser General Public
6 ' License as published by the Free Software Foundation; either
7 ' version 2.1 of the License, or (at your option) any later version.
9 ' This library is distributed in the hope that it will be useful,
10 ' but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 ' Lesser General Public License for more details.
14 ' You should have received a copy of the GNU Lesser General Public
15 ' License along with this library; if not, write to the Free Software
16 ' Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 const E_TESTERROR
= &h80080008
&
23 const VB_E_FORLOOPNOTINITIALIZED
= 92
24 const VB_E_OBJNOTCOLLECTION
= 451
26 const E_NOTIMPL
= &h80004001
&
27 const E_NOINTERFACE
= &h80004002
&
28 const DISP_E_UNKNOWNINTERFACE
= &h80020001
&
29 const DISP_E_MEMBERNOTFOUND
= &h80020003
&
30 const DISP_E_PARAMNOTFOUND
= &h80020004
&
31 const DISP_E_TYPEMISMATCH
= &h80020005
&
32 const DISP_E_UNKNOWNNAME
= &h80020006
&
33 const DISP_E_NONAMEDARGS
= &h80020007
&
34 const DISP_E_BADVARTYPE
= &h80020008
&
35 const DISP_E_OVERFLOW
= &h8002000A
&
36 const DISP_E_BADINDEX
= &h8002000B
&
37 const DISP_E_UNKNOWNLCID
= &h8002000C
&
38 const DISP_E_ARRAYISLOCKED
= &h8002000D
&
39 const DISP_E_BADPARAMCOUNT
= &h8002000E
&
40 const DISP_E_PARAMNOTOPTIONAL
= &h8002000F
&
41 const DISP_E_NOTACOLLECTION
= &h80020011
&
42 const TYPE_E_DLLFUNCTIONNOTFOUND
= &h8002802F
&
43 const TYPE_E_TYPEMISMATCH
= &h80028CA0
&
44 const TYPE_E_OUTOFBOUNDS
= &h80028CA1
&
45 const TYPE_E_IOERROR
= &h80028CA2
&
46 const TYPE_E_CANTCREATETMPFILE
= &h80028CA3
&
47 const STG_E_FILENOTFOUND
= &h80030002
&
48 const STG_E_PATHNOTFOUND
= &h80030003
&
49 const STG_E_TOOMANYOPENFILES
= &h80030004
&
50 const STG_E_ACCESSDENIED
= &h80030005
&
51 const STG_E_INSUFFICIENTMEMORY
= &h80030008
&
52 const STG_E_NOMOREFILES
= &h80030012
&
53 const STG_E_DISKISWRITEPROTECTED
= &h80030013
&
54 const STG_E_WRITEFAULT
= &h8003001D
&
55 const STG_E_READFAULT
= &h8003001E
&
56 const STG_E_SHAREVIOLATION
= &h80030020
&
57 const STG_E_LOCKVIOLATION
= &h80030021
&
58 const STG_E_FILEALREADYEXISTS
= &h80030050
&
59 const STG_E_MEDIUMFULL
= &h80030070
&
60 const STG_E_INVALIDNAME
= &h800300FC
&
61 const STG_E_INUSE
= &h80030100
&
62 const STG_E_NOTCURRENT
= &h80030101
&
63 const STG_E_CANTSAVE
= &h80030103
&
64 const REGDB_E_CLASSNOTREG
= &h80040154
&
65 const MK_E_UNAVAILABLE
= &h800401E3
&
66 const MK_E_INVALIDEXTENSION
= &h800401E6
&
67 const MK_E_CANTOPENFILE
= &h800401EA
&
68 const CO_E_CLASSSTRING
= &h800401F3
&
69 const CO_E_APPNOTFOUND
= &h800401F5
&
70 const O_E_APPDIDNTREG
= &h800401FE
&
71 const E_ACCESSDENIED
= &h80070005
&
72 const E_OUTOFMEMORY
= &h8007000E
&
73 const E_INVALIDARG
= &h80070057
&
74 const RPC_S_SERVER_UNAVAILABLE
= &h800706BA
&
75 const CO_E_SERVER_EXEC_FAILURE
= &h80080005
&
77 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
78 call ok(getVT(Err
.Number
) = "VT_I4", "getVT(Err.Number) = " & getVT(Err
.Number
))
93 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
95 call throwInt(E_TESTERROR
)
96 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
99 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
102 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
106 x
= throwInt(E_TESTERROR
) and returnTrue()
107 call ok(x
= 6, "x = " & x
)
108 call ok(not calledFunc
, "calledFunc = " & calledFunc
)
109 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
113 if false and throwInt(E_TESTERROR
) then
116 call ok(false, "unexpected if else branch on throw")
118 call ok(x
, "if branch not taken")
119 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
123 if throwInt(E_TESTERROR
) then x
= true
124 call ok(x
, "if branch not taken")
125 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
130 call ok(false, "unexpected if else branch on throw")
131 elseif throwInt(E_TESTERROR
) then
134 call ok(false, "unexpected if else branch on throw")
136 call ok(x
, "elseif branch not taken")
137 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
141 call throwInt(E_TESTERROR
)
143 call ok(false, "unexpected if else branch on throw")
145 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
149 do while throwInt(E_TESTERROR
)
150 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
154 call ok(x
, "if branch not taken")
155 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
161 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
162 loop while throwInt(E_TESTERROR
)
163 call ok(x
= 1, "if branch not taken")
164 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
170 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
171 loop until throwInt(E_TESTERROR
)
172 call ok(x
= 1, "if branch not taken")
173 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
179 call throwInt(E_TESTERROR
)
181 call ok(x
= 2, "x = " & x
)
182 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
187 for each x
in throwInt(E_TESTERROR
)
188 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
191 call ok(x
= 2, "x = " & x
)
192 call ok(y
= 1, "y = " & y
)
193 'todo_wine call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number)
198 for x
= throwInt(E_TESTERROR
) to 100
199 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
200 call ok(x
= 6, "x = " & x
)
203 call ok(y
= 1, "y = " & y
)
204 call ok(x
= 6, "x = " & x
)
205 'todo_wine call ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number)
210 for x
= 100 to throwInt(E_TESTERROR
)
211 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
212 'todo_wine call ok(x = 6, "x = " & x)
215 call ok(y
= 1, "y = " & y
)
216 'todo_wine call ok(x = 6, "x = " & x)
217 'todo_wine call ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number)
219 select case throwInt(E_TESTERROR
)
221 call ok(false, "unexpected case true")
223 call ok(false, "unexpected case false")
225 call ok(false, "unexpected case empty")
227 call ok(false, "unexpected case else")
229 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
234 call ok(false, "unexpected case true")
235 case throwInt(E_TESTERROR
)
238 call ok(false, "unexpected case else")
240 call ok(x
, "case not executed")
241 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
243 'Exception in non-trivial stack context
245 for each y
in collectionObj
248 call ok(false, "unexpected case")
249 case throwInt(E_TESTERROR
)
252 call ok(false, "unexpected case")
262 sub testOnError(resumeNext
)
269 throwInt(E_TESTERROR
)
271 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
274 sub callTestOnError(resumeNext
)
276 call testOnError(resumeNext
)
277 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
281 call callTestOnError(true)
282 call ok(x
= 2, "x = " & x
)
285 call callTestOnError(false)
286 call ok(x
= 1, "x = " & x
)
288 sub testOnErrorClear()
290 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
291 throwInt(E_TESTERROR
)
292 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
295 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
299 call testOnErrorClear()
300 call ok(x
= "ok", "testOnErrorClear failed")
302 sub testForEachError()
310 call ok(y
, "for each not executed")
311 'todo_wine call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number)
314 call testForEachError()
316 sub testHresMap(hres
, code
)
321 call ok(Err
.Number
= code
, "throw(" & hex(hres
) & ") Err.Number = " & Err
.Number
)
324 testHresMap E_NOTIMPL
, 445
325 testHresMap E_NOINTERFACE
, 430
326 testHresMap DISP_E_UNKNOWNINTERFACE
, 438
327 testHresMap DISP_E_MEMBERNOTFOUND
, 438
328 testHresMap DISP_E_PARAMNOTFOUND
, 448
329 testHresMap DISP_E_TYPEMISMATCH
, 13
330 testHresMap DISP_E_UNKNOWNNAME
, 438
331 testHresMap DISP_E_NONAMEDARGS
, 446
332 testHresMap DISP_E_BADVARTYPE
, 458
333 testHresMap DISP_E_OVERFLOW
, 6
334 testHresMap DISP_E_BADINDEX
, 9
335 testHresMap DISP_E_UNKNOWNLCID
, 447
336 testHresMap DISP_E_ARRAYISLOCKED
, 10
337 testHresMap DISP_E_BADPARAMCOUNT
, 450
338 testHresMap DISP_E_PARAMNOTOPTIONAL
, 449
339 testHresMap DISP_E_NOTACOLLECTION
, 451
340 testHresMap TYPE_E_DLLFUNCTIONNOTFOUND
, 453
341 testHresMap TYPE_E_TYPEMISMATCH
, 13
342 testHresMap TYPE_E_OUTOFBOUNDS
, 9
343 testHresMap TYPE_E_IOERROR
, 57
344 testHresMap TYPE_E_CANTCREATETMPFILE
, 322
345 testHresMap STG_E_FILENOTFOUND
, 432
346 testHresMap STG_E_PATHNOTFOUND
, 76
347 testHresMap STG_E_TOOMANYOPENFILES
, 67
348 testHresMap STG_E_ACCESSDENIED
, 70
349 testHresMap STG_E_INSUFFICIENTMEMORY
, 7
350 testHresMap STG_E_NOMOREFILES
, 67
351 testHresMap STG_E_DISKISWRITEPROTECTED
, 70
352 testHresMap STG_E_WRITEFAULT
, 57
353 testHresMap STG_E_READFAULT
, 57
354 testHresMap STG_E_SHAREVIOLATION
, 75
355 testHresMap STG_E_LOCKVIOLATION
, 70
356 testHresMap STG_E_FILEALREADYEXISTS
, 58
357 testHresMap STG_E_MEDIUMFULL
, 61
358 testHresMap STG_E_INVALIDNAME
, 53
359 testHresMap STG_E_INUSE
, 70
360 testHresMap STG_E_NOTCURRENT
, 70
361 testHresMap STG_E_CANTSAVE
, 57
362 testHresMap REGDB_E_CLASSNOTREG
, 429
363 testHresMap MK_E_UNAVAILABLE
, 429
364 testHresMap MK_E_INVALIDEXTENSION
, 432
365 testHresMap MK_E_CANTOPENFILE
, 432
366 testHresMap CO_E_CLASSSTRING
, 429
367 testHresMap CO_E_APPNOTFOUND
, 429
368 testHresMap O_E_APPDIDNTREG
, 429
369 testHresMap E_ACCESSDENIED
, 70
370 testHresMap E_OUTOFMEMORY
, 7
371 testHresMap E_INVALIDARG
, 5
372 testHresMap RPC_S_SERVER_UNAVAILABLE
, 462
373 testHresMap CO_E_SERVER_EXEC_FAILURE
, 429
375 sub testVBErrorCodes()
379 throwInt(&h800a00aa
&)
380 call ok(Err
.number
= 170, "Err.number = " & Err
.number
)
383 throwInt(&h800a10aa
&)
384 call ok(Err
.number
= 4266, "Err.number = " & Err
.number
)
387 call testVBErrorCodes