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)
92 call ok(Err.Number = 0, "Err.Number = " & Err.Number)
94 call throwInt(E_TESTERROR)
95 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
98 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
101 call ok(Err.Number = 0, "Err.Number = " & Err.Number)
105 x = throwInt(E_TESTERROR) and returnTrue()
106 call ok(x = 6, "x = " & x)
107 call ok(not calledFunc, "calledFunc = " & calledFunc)
108 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
112 if false and throwInt(E_TESTERROR) then
115 call ok(false, "unexpected if else branch on throw")
117 call ok(x, "if branch not taken")
118 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
122 if throwInt(E_TESTERROR) then x = true
123 call ok(x, "if branch not taken")
124 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
129 call ok(false, "unexpected if else branch on throw")
130 elseif throwInt(E_TESTERROR) then
133 call ok(false, "unexpected if else branch on throw")
135 call ok(x, "elseif branch not taken")
136 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
140 call throwInt(E_TESTERROR)
142 call ok(false, "unexpected if else branch on throw")
144 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
148 do while throwInt(E_TESTERROR)
149 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
153 call ok(x, "if branch not taken")
154 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
160 call ok(Err.Number = 0, "Err.Number = " & Err.Number)
161 loop while throwInt(E_TESTERROR)
162 call ok(x = 1, "if branch not taken")
163 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
169 call ok(Err.Number = 0, "Err.Number = " & Err.Number)
170 loop until throwInt(E_TESTERROR)
171 call ok(x = 1, "if branch not taken")
172 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
178 call throwInt(E_TESTERROR)
180 call ok(x = 2, "x = " & x)
181 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
186 for each x in throwInt(E_TESTERROR)
187 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
190 call ok(x = 2, "x = " & x)
191 call ok(y = 1, "y = " & y)
192 'todo_wine call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number)
197 for x = throwInt(E_TESTERROR) to 100
198 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
199 call ok(x = 6, "x = " & x)
202 call ok(y = 1, "y = " & y)
203 call ok(x = 6, "x = " & x)
204 'todo_wine call ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number)
209 for x = 100 to throwInt(E_TESTERROR)
210 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
211 'todo_wine call ok(x = 6, "x = " & x)
214 call ok(y = 1, "y = " & y)
215 'todo_wine call ok(x = 6, "x = " & x)
216 'todo_wine call ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number)
218 select case throwInt(E_TESTERROR)
220 call ok(false, "unexpected case true")
222 call ok(false, "unexpected case false")
224 call ok(false, "unexpected case empty")
226 call ok(false, "unexpected case else")
228 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
233 call ok(false, "unexpected case true")
234 case throwInt(E_TESTERROR)
237 call ok(false, "unexpected case else")
239 call ok(x, "case not executed")
240 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
242 'Exception in non-trivial stack context
244 for each y in collectionObj
247 call ok(false, "unexpected case")
248 case throwInt(E_TESTERROR)
251 call ok(false, "unexpected case")
261 sub testOnError(resumeNext)
268 throwInt(E_TESTERROR)
270 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
273 sub callTestOnError(resumeNext)
275 call testOnError(resumeNext)
276 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
280 call callTestOnError(true)
281 call ok(x = 2, "x = " & x)
284 call callTestOnError(false)
285 call ok(x = 1, "x = " & x)
287 sub testOnErrorClear()
289 call ok(Err.Number = 0, "Err.Number = " & Err.Number)
290 throwInt(E_TESTERROR)
291 call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
294 call ok(Err.Number = 0, "Err.Number = " & Err.Number)
298 call testOnErrorClear()
299 call ok(x = "ok", "testOnErrorClear failed")
301 sub testForEachError()
309 call ok(y, "for each not executed")
310 'todo_wine call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number)
313 call testForEachError()
315 sub testHresMap(hres, code)
320 call ok(Err.Number = code, "throw(" & hex(hres) & ") Err.Number = " & Err.Number)
323 testHresMap E_NOTIMPL, 445
324 testHresMap E_NOINTERFACE, 430
325 testHresMap DISP_E_UNKNOWNINTERFACE, 438
326 testHresMap DISP_E_MEMBERNOTFOUND, 438
327 testHresMap DISP_E_PARAMNOTFOUND, 448
328 testHresMap DISP_E_TYPEMISMATCH, 13
329 testHresMap DISP_E_UNKNOWNNAME, 438
330 testHresMap DISP_E_NONAMEDARGS, 446
331 testHresMap DISP_E_BADVARTYPE, 458
332 testHresMap DISP_E_OVERFLOW, 6
333 testHresMap DISP_E_BADINDEX, 9
334 testHresMap DISP_E_UNKNOWNLCID, 447
335 testHresMap DISP_E_ARRAYISLOCKED, 10
336 testHresMap DISP_E_BADPARAMCOUNT, 450
337 testHresMap DISP_E_PARAMNOTOPTIONAL, 449
338 testHresMap DISP_E_NOTACOLLECTION, 451
339 testHresMap TYPE_E_DLLFUNCTIONNOTFOUND, 453
340 testHresMap TYPE_E_TYPEMISMATCH, 13
341 testHresMap TYPE_E_OUTOFBOUNDS, 9
342 testHresMap TYPE_E_IOERROR, 57
343 testHresMap TYPE_E_CANTCREATETMPFILE, 322
344 testHresMap STG_E_FILENOTFOUND, 432
345 testHresMap STG_E_PATHNOTFOUND, 76
346 testHresMap STG_E_TOOMANYOPENFILES, 67
347 testHresMap STG_E_ACCESSDENIED, 70
348 testHresMap STG_E_INSUFFICIENTMEMORY, 7
349 testHresMap STG_E_NOMOREFILES, 67
350 testHresMap STG_E_DISKISWRITEPROTECTED, 70
351 testHresMap STG_E_WRITEFAULT, 57
352 testHresMap STG_E_READFAULT, 57
353 testHresMap STG_E_SHAREVIOLATION, 75
354 testHresMap STG_E_LOCKVIOLATION, 70
355 testHresMap STG_E_FILEALREADYEXISTS, 58
356 testHresMap STG_E_MEDIUMFULL, 61
357 testHresMap STG_E_INVALIDNAME, 53
358 testHresMap STG_E_INUSE, 70
359 testHresMap STG_E_NOTCURRENT, 70
360 testHresMap STG_E_CANTSAVE, 57
361 testHresMap REGDB_E_CLASSNOTREG, 429
362 testHresMap MK_E_UNAVAILABLE, 429
363 testHresMap MK_E_INVALIDEXTENSION, 432
364 testHresMap MK_E_CANTOPENFILE, 432
365 testHresMap CO_E_CLASSSTRING, 429
366 testHresMap CO_E_APPNOTFOUND, 429
367 testHresMap O_E_APPDIDNTREG, 429
368 testHresMap E_ACCESSDENIED, 70
369 testHresMap E_OUTOFMEMORY, 7
370 testHresMap E_INVALIDARG, 5
371 testHresMap RPC_S_SERVER_UNAVAILABLE, 462
372 testHresMap CO_E_SERVER_EXEC_FAILURE, 429
374 sub testVBErrorCodes()
378 throwInt(&h800a00aa&)
379 call ok(Err.number = 170, "Err.number = " & Err.number)
382 throwInt(&h800a10aa&)
383 call ok(Err.number = 4266, "Err.number = " & Err.number)
386 call testVBErrorCodes