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