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
))
100 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
102 call throwInt(E_TESTERROR
)
103 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
106 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
109 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
113 x
= throwInt(E_TESTERROR
) and returnTrue()
114 call ok(x
= 6, "x = " & x
)
115 call ok(not calledFunc
, "calledFunc = " & calledFunc
)
116 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
120 if false and throwInt(E_TESTERROR
) then
123 call ok(false, "unexpected if else branch on throw")
125 call ok(x
, "if branch not taken")
126 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
130 if throwInt(E_TESTERROR
) then x
= true
131 call ok(x
, "if branch not taken")
132 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
137 call ok(false, "unexpected if else branch on throw")
138 elseif throwInt(E_TESTERROR
) then
141 call ok(false, "unexpected if else branch on throw")
143 call ok(x
, "elseif branch not taken")
144 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
148 call throwInt(E_TESTERROR
)
150 call ok(false, "unexpected if else branch on throw")
152 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
156 do while throwInt(E_TESTERROR
)
157 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
161 call ok(x
, "if branch not taken")
162 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
168 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
169 loop while throwInt(E_TESTERROR
)
170 call ok(x
= 1, "if branch not taken")
171 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
177 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
178 loop until throwInt(E_TESTERROR
)
179 call ok(x
= 1, "if branch not taken")
180 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
186 call throwInt(E_TESTERROR
)
188 call ok(x
= 2, "x = " & x
)
189 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
194 for each x
in throwInt(E_TESTERROR
)
195 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
198 call ok(x
= 2, "x = " & x
)
199 call ok(y
= 1, "y = " & y
)
200 call todo_wine_ok(Err
.Number
= VB_E_OBJNOTCOLLECTION
, "Err.Number = " & Err
.Number
)
205 for x
= throwInt(E_TESTERROR
) to 100
206 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
207 call ok(x
= 6, "x = " & x
)
210 call ok(y
= 1, "y = " & y
)
211 call ok(x
= 6, "x = " & x
)
212 call todo_wine_ok(Err
.Number
= VB_E_FORLOOPNOTINITIALIZED
, "Err.Number = " & Err
.Number
)
217 for x
= 100 to throwInt(E_TESTERROR
)
218 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
219 call todo_wine_ok(x
= 6, "x = " & x
)
222 call ok(y
= 1, "y = " & y
)
223 call todo_wine_ok(x
= 6, "x = " & x
)
224 call todo_wine_ok(Err
.Number
= VB_E_FORLOOPNOTINITIALIZED
, "Err.Number = " & Err
.Number
)
226 select case throwInt(E_TESTERROR
)
228 call ok(false, "unexpected case true")
230 call ok(false, "unexpected case false")
232 call ok(false, "unexpected case empty")
234 call ok(false, "unexpected case else")
236 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
241 call ok(false, "unexpected case true")
242 case throwInt(E_TESTERROR
)
245 call ok(false, "unexpected case else")
247 call ok(x
, "case not executed")
248 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
250 'Exception in non-trivial stack context
252 for each y
in collectionObj
255 call ok(false, "unexpected case")
256 case throwInt(E_TESTERROR
)
259 call ok(false, "unexpected case")
269 sub testOnError(resumeNext
)
276 throwInt(E_TESTERROR
)
278 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
281 sub callTestOnError(resumeNext
)
283 call testOnError(resumeNext
)
284 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
288 call callTestOnError(true)
289 call ok(x
= 2, "x = " & x
)
292 call callTestOnError(false)
293 call ok(x
= 1, "x = " & x
)
295 sub testOnErrorClear()
297 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
298 throwInt(E_TESTERROR
)
299 call ok(Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
)
302 call ok(Err
.Number
= 0, "Err.Number = " & Err
.Number
)
306 call testOnErrorClear()
307 call ok(x
= "ok", "testOnErrorClear failed")
309 sub testForEachError()
319 call ok(y
, "for each not executed")
320 call ok(z
, "line after next not executed")
321 call todo_wine_ok(Err
.Number
= VB_E_OBJNOTCOLLECTION
, "Err.Number = " & Err
.Number
)
324 call testForEachError()
332 with throwInt(E_TESTERROR
)
333 ok Err
.Number
= E_TESTERROR
, "Err.Number = " & Err
.Number
336 ok x
, "with statement body not executed"
340 with throwInt(E_TESTERROR
)
343 todo_wine_ok Err
.Number
= 424, "Err.Number = " & Err
.Number
345 ok x
, "with statement body not executed"
351 todo_wine_ok Err
.Number
= 424, "Err.Number = " & Err
.Number
354 ok x
, "with statement body not executed"
365 ok Err
.Number
= 438, "Err.Number = " & Err
.Number
368 ok x
, "with statement body not executed"
370 'dot expression can reference only inner-most with statement
376 ok Err
.Number
= 438, "Err.Number = " & Err
.Number
380 ok x
, "with statement body not executed"
384 ok Err
.Number
= 505, "Err.Number = " & Err
.Number
& " description """ & err
.description
& """"
388 call testWithError2()
390 sub testHresMap(hres
, code
)
395 call ok(Err
.Number
= code
, "throw(" & hex(hres
) & ") Err.Number = " & Err
.Number
)
398 testHresMap E_NOTIMPL
, 445
399 testHresMap E_NOINTERFACE
, 430
400 testHresMap DISP_E_UNKNOWNINTERFACE
, 438
401 testHresMap DISP_E_MEMBERNOTFOUND
, 438
402 testHresMap DISP_E_PARAMNOTFOUND
, 448
403 testHresMap DISP_E_TYPEMISMATCH
, 13
404 testHresMap DISP_E_UNKNOWNNAME
, 438
405 testHresMap DISP_E_NONAMEDARGS
, 446
406 testHresMap DISP_E_BADVARTYPE
, 458
407 testHresMap DISP_E_OVERFLOW
, 6
408 testHresMap DISP_E_BADINDEX
, 9
409 testHresMap DISP_E_UNKNOWNLCID
, 447
410 testHresMap DISP_E_ARRAYISLOCKED
, 10
411 testHresMap DISP_E_BADPARAMCOUNT
, 450
412 testHresMap DISP_E_PARAMNOTOPTIONAL
, 449
413 testHresMap DISP_E_NOTACOLLECTION
, 451
414 testHresMap TYPE_E_DLLFUNCTIONNOTFOUND
, 453
415 testHresMap TYPE_E_TYPEMISMATCH
, 13
416 testHresMap TYPE_E_OUTOFBOUNDS
, 9
417 testHresMap TYPE_E_IOERROR
, 57
418 testHresMap TYPE_E_CANTCREATETMPFILE
, 322
419 testHresMap STG_E_FILENOTFOUND
, 432
420 testHresMap STG_E_PATHNOTFOUND
, 76
421 testHresMap STG_E_TOOMANYOPENFILES
, 67
422 testHresMap STG_E_ACCESSDENIED
, 70
423 testHresMap STG_E_INSUFFICIENTMEMORY
, 7
424 testHresMap STG_E_NOMOREFILES
, 67
425 testHresMap STG_E_DISKISWRITEPROTECTED
, 70
426 testHresMap STG_E_WRITEFAULT
, 57
427 testHresMap STG_E_READFAULT
, 57
428 testHresMap STG_E_SHAREVIOLATION
, 75
429 testHresMap STG_E_LOCKVIOLATION
, 70
430 testHresMap STG_E_FILEALREADYEXISTS
, 58
431 testHresMap STG_E_MEDIUMFULL
, 61
432 testHresMap STG_E_INVALIDNAME
, 53
433 testHresMap STG_E_INUSE
, 70
434 testHresMap STG_E_NOTCURRENT
, 70
435 testHresMap STG_E_CANTSAVE
, 57
436 testHresMap REGDB_E_CLASSNOTREG
, 429
437 testHresMap MK_E_UNAVAILABLE
, 429
438 testHresMap MK_E_INVALIDEXTENSION
, 432
439 testHresMap MK_E_CANTOPENFILE
, 432
440 testHresMap CO_E_CLASSSTRING
, 429
441 testHresMap CO_E_APPNOTFOUND
, 429
442 testHresMap O_E_APPDIDNTREG
, 429
443 testHresMap E_ACCESSDENIED
, 70
444 testHresMap E_OUTOFMEMORY
, 7
445 testHresMap E_INVALIDARG
, 5
446 testHresMap RPC_S_SERVER_UNAVAILABLE
, 462
447 testHresMap CO_E_SERVER_EXEC_FAILURE
, 429
449 sub testVBErrorCodes()
453 throwInt(&h800a00aa
&)
454 call ok(Err
.number
= 170, "Err.number = " & Err
.number
)
457 throwInt(&h800a10aa
&)
458 call ok(Err
.number
= 4266, "Err.number = " & Err
.number
)
461 call testVBErrorCodes
466 ok err
.number
= &hdeadbeef
&, "err.number = " & hex(err
.number
)
467 ok err
.description
= "test", "err.description = " & err
.description
468 ok err
.helpcontext
= 10, "err.helpcontext = " & err
.helpcontext
469 ok err
.helpfile
= "test.chm", "err.helpfile = " & err
.helpfile
472 ok err
.number
= &hdeadbeef
&, "err.number = " & hex(err
.number
)
473 ok err
.description
= "test", "err.description = " & err
.description
474 ok err
.helpcontext
= 10, "err.helpcontext = " & err
.helpcontext
475 ok err
.helpfile
= "test.chm", "err.helpfile = " & err
.helpfile