mirror of
https://github.com/reactos/reactos.git
synced 2025-02-20 15:35:04 +00:00
[VBSCRIPT_WINETEST]
* Sync with Wine 1.7.17. CORE-8080 svn path=/trunk/; revision=62932
This commit is contained in:
parent
f4142dbec2
commit
dcfa6bd484
7 changed files with 684 additions and 43 deletions
|
@ -10,6 +10,7 @@ list(APPEND SOURCE
|
|||
|
||||
list(APPEND vbscript_winetest_rc_deps
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/api.vbs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/error.vbs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lang.vbs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/regexp.vbs)
|
||||
|
||||
|
|
|
@ -125,18 +125,6 @@ const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY =
|
|||
|
||||
#define VB_E_CANNOT_CREATE_OBJ 0x800a01ad
|
||||
|
||||
static const char *debugstr_guid(REFIID riid)
|
||||
{
|
||||
static char buf[50];
|
||||
|
||||
sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
|
||||
riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
|
||||
riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
|
||||
riid->Data4[5], riid->Data4[6], riid->Data4[7]);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
static BSTR a2bstr(const char *str)
|
||||
{
|
||||
BSTR ret;
|
||||
|
@ -444,7 +432,7 @@ static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown
|
|||
CHECK_EXPECT(CreateInstance);
|
||||
|
||||
ok(!outer, "outer = %p\n", outer);
|
||||
ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", debugstr_guid(riid));
|
||||
ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||
|
||||
if(SUCCEEDED(CreateInstance_hres))
|
||||
*ppv = &testObj;
|
||||
|
@ -500,7 +488,7 @@ static HRESULT WINAPI InternetHostSecurityManager_ProcessUrlAction(IInternetHost
|
|||
ok(cbPolicy == sizeof(DWORD), "cbPolicy = %d\n", cbPolicy);
|
||||
ok(pContext != NULL, "pContext == NULL\n");
|
||||
ok(cbContext == sizeof(GUID), "cbContext = %d\n", cbContext);
|
||||
ok(IsEqualGUID(pContext, &CLSID_TestObj), "pContext = %s\n", debugstr_guid((const IID*)pContext));
|
||||
ok(IsEqualGUID(pContext, &CLSID_TestObj), "pContext = %s\n", wine_dbgstr_guid((const IID*)pContext));
|
||||
ok(!dwFlags, "dwFlags = %x\n", dwFlags);
|
||||
ok(!dwReserved, "dwReserved = %x\n", dwReserved);
|
||||
|
||||
|
@ -517,7 +505,7 @@ static HRESULT WINAPI InternetHostSecurityManager_QueryCustomPolicy(IInternetHos
|
|||
|
||||
CHECK_EXPECT(QueryCustomPolicy);
|
||||
|
||||
ok(IsEqualGUID(&GUID_CUSTOM_CONFIRMOBJECTSAFETY, guidKey), "guidKey = %s\n", debugstr_guid(guidKey));
|
||||
ok(IsEqualGUID(&GUID_CUSTOM_CONFIRMOBJECTSAFETY, guidKey), "guidKey = %s\n", wine_dbgstr_guid(guidKey));
|
||||
|
||||
ok(ppPolicy != NULL, "ppPolicy == NULL\n");
|
||||
ok(pcbPolicy != NULL, "pcbPolicy == NULL\n");
|
||||
|
@ -582,13 +570,13 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface,
|
|||
CHECK_EXPECT(Host_QS_SecMgr);
|
||||
else
|
||||
CHECK_EXPECT(Caller_QS_SecMgr);
|
||||
ok(IsEqualGUID(&IID_IInternetHostSecurityManager, riid), "unexpected riid %s\n", debugstr_guid(riid));
|
||||
ok(IsEqualGUID(&IID_IInternetHostSecurityManager, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||
if(SUCCEEDED(QS_SecMgr_hres))
|
||||
*ppv = &InternetHostSecurityManager;
|
||||
return QS_SecMgr_hres;
|
||||
}
|
||||
|
||||
ok(0, "unexpected service %s\n", debugstr_guid(guidService));
|
||||
ok(0, "unexpected service %s\n", wine_dbgstr_guid(guidService));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
@ -1008,7 +996,7 @@ static void test_GetObject(void)
|
|||
SET_EXPECT(SetSite);
|
||||
SET_EXPECT(reportSuccess);
|
||||
hres = parse_script_ae(parser, "Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()");
|
||||
if(hres == 0x8007007e) { /* Workaround for broken win2k */
|
||||
if(hres == HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND)) { /* Workaround for broken win2k */
|
||||
win_skip("got unexpected error %08x\n", hres);
|
||||
CLEAR_CALLED(QI_IObjectWithSite);
|
||||
CLEAR_CALLED(SetSite);
|
||||
|
@ -1016,6 +1004,7 @@ static void test_GetObject(void)
|
|||
IActiveScriptParse_Release(parser);
|
||||
return;
|
||||
}
|
||||
ok(hres == S_OK, "hres = %08x\n", hres);
|
||||
CHECK_CALLED(QI_IObjectWithSite);
|
||||
CHECK_CALLED(SetSite);
|
||||
CHECK_CALLED(reportSuccess);
|
||||
|
@ -1050,7 +1039,7 @@ static BOOL init_key(const char *key_name, const char *def_value, BOOL init)
|
|||
DWORD res;
|
||||
|
||||
if(!init) {
|
||||
RegDeleteKey(HKEY_CLASSES_ROOT, key_name);
|
||||
RegDeleteKeyA(HKEY_CLASSES_ROOT, key_name);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1111,12 +1100,13 @@ START_TEST(createobj)
|
|||
CoInitialize(NULL);
|
||||
|
||||
if(check_vbscript()) {
|
||||
register_activex();
|
||||
|
||||
test_CreateObject();
|
||||
test_GetObject();
|
||||
|
||||
init_registry(FALSE);
|
||||
if(register_activex()) {
|
||||
test_CreateObject();
|
||||
test_GetObject();
|
||||
init_registry(FALSE);
|
||||
}else {
|
||||
skip("Could not register ActiveX object.\n");
|
||||
}
|
||||
}else {
|
||||
win_skip("Broken engine, probably too old\n");
|
||||
}
|
||||
|
|
374
rostests/winetests/vbscript/error.vbs
Normal file
374
rostests/winetests/vbscript/error.vbs
Normal file
|
@ -0,0 +1,374 @@
|
|||
'
|
||||
' Copyright 2014 Jacek Caban for CodeWeavers
|
||||
'
|
||||
' This library is free software; you can redistribute it and/or
|
||||
' modify it under the terms of the GNU Lesser General Public
|
||||
' License as published by the Free Software Foundation; either
|
||||
' version 2.1 of the License, or (at your option) any later version.
|
||||
'
|
||||
' This library is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
' Lesser General Public License for more details.
|
||||
'
|
||||
' You should have received a copy of the GNU Lesser General Public
|
||||
' License along with this library; if not, write to the Free Software
|
||||
' Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
'
|
||||
|
||||
Option Explicit
|
||||
|
||||
const E_TESTERROR = &h80080008&
|
||||
|
||||
const VB_E_FORLOOPNOTINITIALIZED = 92
|
||||
const VB_E_OBJNOTCOLLECTION = 451
|
||||
|
||||
const E_NOTIMPL = &h80004001&
|
||||
const E_NOINTERFACE = &h80004002&
|
||||
const DISP_E_UNKNOWNINTERFACE = &h80020001&
|
||||
const DISP_E_MEMBERNOTFOUND = &h80020003&
|
||||
const DISP_E_PARAMNOTFOUND = &h80020004&
|
||||
const DISP_E_TYPEMISMATCH = &h80020005&
|
||||
const DISP_E_UNKNOWNNAME = &h80020006&
|
||||
const DISP_E_NONAMEDARGS = &h80020007&
|
||||
const DISP_E_BADVARTYPE = &h80020008&
|
||||
const DISP_E_OVERFLOW = &h8002000A&
|
||||
const DISP_E_BADINDEX = &h8002000B&
|
||||
const DISP_E_UNKNOWNLCID = &h8002000C&
|
||||
const DISP_E_ARRAYISLOCKED = &h8002000D&
|
||||
const DISP_E_BADPARAMCOUNT = &h8002000E&
|
||||
const DISP_E_PARAMNOTOPTIONAL = &h8002000F&
|
||||
const DISP_E_NOTACOLLECTION = &h80020011&
|
||||
const TYPE_E_DLLFUNCTIONNOTFOUND = &h8002802F&
|
||||
const TYPE_E_TYPEMISMATCH = &h80028CA0&
|
||||
const TYPE_E_OUTOFBOUNDS = &h80028CA1&
|
||||
const TYPE_E_IOERROR = &h80028CA2&
|
||||
const TYPE_E_CANTCREATETMPFILE = &h80028CA3&
|
||||
const STG_E_FILENOTFOUND = &h80030002&
|
||||
const STG_E_PATHNOTFOUND = &h80030003&
|
||||
const STG_E_TOOMANYOPENFILES = &h80030004&
|
||||
const STG_E_ACCESSDENIED = &h80030005&
|
||||
const STG_E_INSUFFICIENTMEMORY = &h80030008&
|
||||
const STG_E_NOMOREFILES = &h80030012&
|
||||
const STG_E_DISKISWRITEPROTECTED = &h80030013&
|
||||
const STG_E_WRITEFAULT = &h8003001D&
|
||||
const STG_E_READFAULT = &h8003001E&
|
||||
const STG_E_SHAREVIOLATION = &h80030020&
|
||||
const STG_E_LOCKVIOLATION = &h80030021&
|
||||
const STG_E_FILEALREADYEXISTS = &h80030050&
|
||||
const STG_E_MEDIUMFULL = &h80030070&
|
||||
const STG_E_INVALIDNAME = &h800300FC&
|
||||
const STG_E_INUSE = &h80030100&
|
||||
const STG_E_NOTCURRENT = &h80030101&
|
||||
const STG_E_CANTSAVE = &h80030103&
|
||||
const REGDB_E_CLASSNOTREG = &h80040154&
|
||||
const MK_E_UNAVAILABLE = &h800401E3&
|
||||
const MK_E_INVALIDEXTENSION = &h800401E6&
|
||||
const MK_E_CANTOPENFILE = &h800401EA&
|
||||
const CO_E_CLASSSTRING = &h800401F3&
|
||||
const CO_E_APPNOTFOUND = &h800401F5&
|
||||
const O_E_APPDIDNTREG = &h800401FE&
|
||||
const E_ACCESSDENIED = &h80070005&
|
||||
const E_OUTOFMEMORY = &h8007000E&
|
||||
const E_INVALIDARG = &h80070057&
|
||||
const RPC_S_SERVER_UNAVAILABLE = &h800706BA&
|
||||
const CO_E_SERVER_EXEC_FAILURE = &h80080005&
|
||||
|
||||
call ok(Err.Number = 0, "Err.Number = " & Err.Number)
|
||||
|
||||
dim calledFunc
|
||||
|
||||
sub returnTrue
|
||||
calledFunc = true
|
||||
returnTrue = true
|
||||
end sub
|
||||
|
||||
sub testThrow
|
||||
on error resume next
|
||||
|
||||
dim x, y
|
||||
|
||||
call throwInt(1000)
|
||||
call ok(Err.Number = 0, "Err.Number = " & Err.Number)
|
||||
|
||||
call throwInt(E_TESTERROR)
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
call throwInt(1000)
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
call Err.clear()
|
||||
call ok(Err.Number = 0, "Err.Number = " & Err.Number)
|
||||
|
||||
x = 6
|
||||
calledFunc = false
|
||||
x = throwInt(E_TESTERROR) and returnTrue()
|
||||
call ok(x = 6, "x = " & x)
|
||||
call ok(not calledFunc, "calledFunc = " & calledFunc)
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
x = false
|
||||
call Err.clear()
|
||||
if false and throwInt(E_TESTERROR) then
|
||||
x = true
|
||||
else
|
||||
call ok(false, "unexpected if else branch on throw")
|
||||
end if
|
||||
call ok(x, "if branch not taken")
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
x = false
|
||||
call Err.clear()
|
||||
if throwInt(E_TESTERROR) then x = true
|
||||
call ok(x, "if branch not taken")
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
x = false
|
||||
call Err.clear()
|
||||
if false then
|
||||
call ok(false, "unexpected if else branch on throw")
|
||||
elseif throwInt(E_TESTERROR) then
|
||||
x = true
|
||||
else
|
||||
call ok(false, "unexpected if else branch on throw")
|
||||
end if
|
||||
call ok(x, "elseif branch not taken")
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
call Err.clear()
|
||||
if true then
|
||||
call throwInt(E_TESTERROR)
|
||||
else
|
||||
call ok(false, "unexpected if else branch on throw")
|
||||
end if
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
x = false
|
||||
call Err.clear()
|
||||
do while throwInt(E_TESTERROR)
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
x = true
|
||||
exit do
|
||||
loop
|
||||
call ok(x, "if branch not taken")
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
x = 0
|
||||
call Err.clear()
|
||||
do
|
||||
x = x+1
|
||||
call ok(Err.Number = 0, "Err.Number = " & Err.Number)
|
||||
loop while throwInt(E_TESTERROR)
|
||||
call ok(x = 1, "if branch not taken")
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
x = 0
|
||||
call Err.clear()
|
||||
do
|
||||
x = x+1
|
||||
call ok(Err.Number = 0, "Err.Number = " & Err.Number)
|
||||
loop until throwInt(E_TESTERROR)
|
||||
call ok(x = 1, "if branch not taken")
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
call Err.clear()
|
||||
x = 0
|
||||
while x < 2
|
||||
x = x+1
|
||||
call throwInt(E_TESTERROR)
|
||||
wend
|
||||
call ok(x = 2, "x = " & x)
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
call Err.clear()
|
||||
x = 2
|
||||
y = 0
|
||||
for each x in throwInt(E_TESTERROR)
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
y = y+1
|
||||
next
|
||||
call ok(x = 2, "x = " & x)
|
||||
call ok(y = 1, "y = " & y)
|
||||
'todo_wine call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number)
|
||||
|
||||
Err.clear()
|
||||
y = 0
|
||||
x = 6
|
||||
for x = throwInt(E_TESTERROR) to 100
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
call ok(x = 6, "x = " & x)
|
||||
y = y+1
|
||||
next
|
||||
call ok(y = 1, "y = " & y)
|
||||
call ok(x = 6, "x = " & x)
|
||||
'todo_wine call ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number)
|
||||
|
||||
Err.clear()
|
||||
y = 0
|
||||
x = 6
|
||||
for x = 100 to throwInt(E_TESTERROR)
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
'todo_wine call ok(x = 6, "x = " & x)
|
||||
y = y+1
|
||||
next
|
||||
call ok(y = 1, "y = " & y)
|
||||
'todo_wine call ok(x = 6, "x = " & x)
|
||||
'todo_wine call ok(Err.Number = VB_E_FORLOOPNOTINITIALIZED, "Err.Number = " & Err.Number)
|
||||
|
||||
select case throwInt(E_TESTERROR)
|
||||
case true
|
||||
call ok(false, "unexpected case true")
|
||||
case false
|
||||
call ok(false, "unexpected case false")
|
||||
case empty
|
||||
call ok(false, "unexpected case empty")
|
||||
case else
|
||||
call ok(false, "unexpected case else")
|
||||
end select
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
x = false
|
||||
select case false
|
||||
case true
|
||||
call ok(false, "unexpected case true")
|
||||
case throwInt(E_TESTERROR)
|
||||
x = true
|
||||
case else
|
||||
call ok(false, "unexpected case else")
|
||||
end select
|
||||
call ok(x, "case not executed")
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
|
||||
'Exception in non-trivial stack context
|
||||
for x = 1 to 1
|
||||
for each y in collectionObj
|
||||
select case 3
|
||||
case 1
|
||||
call ok(false, "unexpected case")
|
||||
case throwInt(E_TESTERROR)
|
||||
exit for
|
||||
case 2
|
||||
call ok(false, "unexpected case")
|
||||
end select
|
||||
next
|
||||
next
|
||||
end sub
|
||||
|
||||
call testThrow
|
||||
|
||||
dim x
|
||||
|
||||
sub testOnError(resumeNext)
|
||||
if resumeNext then
|
||||
on error resume next
|
||||
else
|
||||
on error goto 0
|
||||
end if
|
||||
x = 1
|
||||
throwInt(E_TESTERROR)
|
||||
x = 2
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
end sub
|
||||
|
||||
sub callTestOnError(resumeNext)
|
||||
on error resume next
|
||||
call testOnError(resumeNext)
|
||||
call ok(Err.Number = E_TESTERROR, "Err.Number = " & Err.Number)
|
||||
end sub
|
||||
|
||||
x = 0
|
||||
call callTestOnError(true)
|
||||
call ok(x = 2, "x = " & x)
|
||||
|
||||
x = 0
|
||||
call callTestOnError(false)
|
||||
call ok(x = 1, "x = " & x)
|
||||
|
||||
sub testForEachError()
|
||||
on error resume next
|
||||
|
||||
dim x, y
|
||||
y = false
|
||||
for each x in empty
|
||||
y = true
|
||||
next
|
||||
call ok(y, "for each not executed")
|
||||
'todo_wine call ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number)
|
||||
end sub
|
||||
|
||||
call testForEachError()
|
||||
|
||||
sub testHresMap(hres, code)
|
||||
on error resume next
|
||||
|
||||
call Err.Clear()
|
||||
call throwInt(hres)
|
||||
call ok(Err.Number = code, "throw(" & hex(hres) & ") Err.Number = " & Err.Number)
|
||||
end sub
|
||||
|
||||
testHresMap E_NOTIMPL, 445
|
||||
testHresMap E_NOINTERFACE, 430
|
||||
testHresMap DISP_E_UNKNOWNINTERFACE, 438
|
||||
testHresMap DISP_E_MEMBERNOTFOUND, 438
|
||||
testHresMap DISP_E_PARAMNOTFOUND, 448
|
||||
testHresMap DISP_E_TYPEMISMATCH, 13
|
||||
testHresMap DISP_E_UNKNOWNNAME, 438
|
||||
testHresMap DISP_E_NONAMEDARGS, 446
|
||||
testHresMap DISP_E_BADVARTYPE, 458
|
||||
testHresMap DISP_E_OVERFLOW, 6
|
||||
testHresMap DISP_E_BADINDEX, 9
|
||||
testHresMap DISP_E_UNKNOWNLCID, 447
|
||||
testHresMap DISP_E_ARRAYISLOCKED, 10
|
||||
testHresMap DISP_E_BADPARAMCOUNT, 450
|
||||
testHresMap DISP_E_PARAMNOTOPTIONAL, 449
|
||||
testHresMap DISP_E_NOTACOLLECTION, 451
|
||||
testHresMap TYPE_E_DLLFUNCTIONNOTFOUND, 453
|
||||
testHresMap TYPE_E_TYPEMISMATCH, 13
|
||||
testHresMap TYPE_E_OUTOFBOUNDS, 9
|
||||
testHresMap TYPE_E_IOERROR, 57
|
||||
testHresMap TYPE_E_CANTCREATETMPFILE, 322
|
||||
testHresMap STG_E_FILENOTFOUND, 432
|
||||
testHresMap STG_E_PATHNOTFOUND, 76
|
||||
testHresMap STG_E_TOOMANYOPENFILES, 67
|
||||
testHresMap STG_E_ACCESSDENIED, 70
|
||||
testHresMap STG_E_INSUFFICIENTMEMORY, 7
|
||||
testHresMap STG_E_NOMOREFILES, 67
|
||||
testHresMap STG_E_DISKISWRITEPROTECTED, 70
|
||||
testHresMap STG_E_WRITEFAULT, 57
|
||||
testHresMap STG_E_READFAULT, 57
|
||||
testHresMap STG_E_SHAREVIOLATION, 75
|
||||
testHresMap STG_E_LOCKVIOLATION, 70
|
||||
testHresMap STG_E_FILEALREADYEXISTS, 58
|
||||
testHresMap STG_E_MEDIUMFULL, 61
|
||||
testHresMap STG_E_INVALIDNAME, 53
|
||||
testHresMap STG_E_INUSE, 70
|
||||
testHresMap STG_E_NOTCURRENT, 70
|
||||
testHresMap STG_E_CANTSAVE, 57
|
||||
testHresMap REGDB_E_CLASSNOTREG, 429
|
||||
testHresMap MK_E_UNAVAILABLE, 429
|
||||
testHresMap MK_E_INVALIDEXTENSION, 432
|
||||
testHresMap MK_E_CANTOPENFILE, 432
|
||||
testHresMap CO_E_CLASSSTRING, 429
|
||||
testHresMap CO_E_APPNOTFOUND, 429
|
||||
testHresMap O_E_APPDIDNTREG, 429
|
||||
testHresMap E_ACCESSDENIED, 70
|
||||
testHresMap E_OUTOFMEMORY, 7
|
||||
testHresMap E_INVALIDARG, 5
|
||||
testHresMap RPC_S_SERVER_UNAVAILABLE, 462
|
||||
testHresMap CO_E_SERVER_EXEC_FAILURE, 429
|
||||
|
||||
sub testVBErrorCodes()
|
||||
on error resume next
|
||||
|
||||
Err.clear()
|
||||
throwInt(&h800a00aa&)
|
||||
call ok(Err.number = 170, "Err.number = " & Err.number)
|
||||
|
||||
Err.clear()
|
||||
throwInt(&h800a10aa&)
|
||||
call ok(Err.number = 4266, "Err.number = " & Err.number)
|
||||
end sub
|
||||
|
||||
call testVBErrorCodes
|
||||
|
||||
call reportSuccess()
|
|
@ -19,6 +19,7 @@
|
|||
Option Explicit
|
||||
|
||||
dim x, y, z
|
||||
Dim obj
|
||||
|
||||
call ok(true, "true is not true?")
|
||||
ok true, "true is not true?"
|
||||
|
@ -224,6 +225,10 @@ if false then x = y : if true then call ok(false, "embedded if called")
|
|||
|
||||
if false then x=1 else x=2 end if
|
||||
|
||||
x = false
|
||||
if false then x = true : x = true
|
||||
Call ok(x = false, "x <> false")
|
||||
|
||||
if false then
|
||||
ok false, "if false called"
|
||||
end if
|
||||
|
@ -482,6 +487,17 @@ next
|
|||
Call ok(y = 1, "y = " & y)
|
||||
Call ok(x = 2, "x = " & x)
|
||||
|
||||
Set obj = collectionObj
|
||||
Call obj.reset()
|
||||
y = 0
|
||||
x = 10
|
||||
for each x in obj
|
||||
y = y+1
|
||||
Call ok(x = y, "x <> y")
|
||||
next
|
||||
Call ok(y = 3, "y = " & y)
|
||||
Call ok(getVT(x) = "VT_EMPTY*", "getVT(x) = " & getVT(x))
|
||||
|
||||
x = false
|
||||
select case 3
|
||||
case 2
|
||||
|
@ -538,6 +554,22 @@ end select
|
|||
select case 0
|
||||
end select
|
||||
|
||||
x = false
|
||||
select case 2
|
||||
case 3,1,2,4: x = true
|
||||
case 5,6,7
|
||||
Call ok(false, "unexpected case")
|
||||
end select
|
||||
Call ok(x, "wrong case")
|
||||
|
||||
x = false
|
||||
select case 2: case 5,6,7: Call ok(false, "unexpected case")
|
||||
case 2,1,2,4
|
||||
x = true
|
||||
case else: Call ok(false, "unexpected case else")
|
||||
end select
|
||||
Call ok(x, "wrong case")
|
||||
|
||||
if false then
|
||||
Sub testsub
|
||||
x = true
|
||||
|
@ -747,7 +779,6 @@ Stop
|
|||
set x = testObj
|
||||
Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
|
||||
|
||||
Dim obj
|
||||
Set obj = New EmptyClass
|
||||
Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
|
||||
|
||||
|
@ -814,6 +845,9 @@ Class TestClass
|
|||
Public Sub Class_Initialize
|
||||
publicProp2 = 2
|
||||
privateProp = true
|
||||
Call ok(getVT(privateProp) = "VT_BOOL*", "getVT(privateProp) = " & getVT(privateProp))
|
||||
Call ok(getVT(publicProp2) = "VT_I2*", "getVT(publicProp2) = " & getVT(publicProp2))
|
||||
Call ok(getVT(Me.publicProp2) = "VT_I2", "getVT(Me.publicProp2) = " & getVT(Me.publicProp2))
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
|
@ -830,6 +864,7 @@ Call obj.publicFunction()
|
|||
|
||||
Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
|
||||
obj.publicProp = 3
|
||||
Call ok(getVT(obj.publicProp) = "VT_I2", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
|
||||
Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
|
||||
obj.publicProp() = 3
|
||||
|
||||
|
@ -964,7 +999,6 @@ Class Property2
|
|||
Function Property()
|
||||
End Function
|
||||
|
||||
|
||||
Sub Test(property)
|
||||
End Sub
|
||||
|
||||
|
@ -972,4 +1006,142 @@ Class Property2
|
|||
End Sub
|
||||
End Class
|
||||
|
||||
' Array tests
|
||||
|
||||
Call ok(getVT(arr) = "VT_EMPTY*", "getVT(arr) = " & getVT(arr))
|
||||
|
||||
Dim arr(3)
|
||||
Dim arr2(4,3), arr3(5,4,3), arr0(0), noarr()
|
||||
|
||||
Call ok(getVT(arr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr) = " & getVT(arr))
|
||||
Call ok(getVT(arr2) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr2) = " & getVT(arr2))
|
||||
Call ok(getVT(arr0) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr0) = " & getVT(arr0))
|
||||
Call ok(getVT(noarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(noarr) = " & getVT(noarr))
|
||||
|
||||
Call testArray(1, arr)
|
||||
Call testArray(2, arr2)
|
||||
Call testArray(3, arr3)
|
||||
Call testArray(0, arr0)
|
||||
Call testArray(-1, noarr)
|
||||
|
||||
Call ok(getVT(arr(1)) = "VT_EMPTY*", "getVT(arr(1)) = " & getVT(arr(1)))
|
||||
Call ok(getVT(arr2(1,2)) = "VT_EMPTY*", "getVT(arr2(1,2)) = " & getVT(arr2(1,2)))
|
||||
Call ok(getVT(arr3(1,2,2)) = "VT_EMPTY*", "getVT(arr3(1,2,3)) = " & getVT(arr3(1,2,2)))
|
||||
Call ok(getVT(arr(0)) = "VT_EMPTY*", "getVT(arr(0)) = " & getVT(arr(0)))
|
||||
Call ok(getVT(arr(3)) = "VT_EMPTY*", "getVT(arr(3)) = " & getVT(arr(3)))
|
||||
Call ok(getVT(arr0(0)) = "VT_EMPTY*", "getVT(arr0(0)) = " & getVT(arr0(0)))
|
||||
|
||||
arr(2) = 3
|
||||
Call ok(arr(2) = 3, "arr(2) = " & arr(2))
|
||||
Call ok(getVT(arr(2)) = "VT_I2*", "getVT(arr(2)) = " & getVT(arr(2)))
|
||||
|
||||
arr3(3,2,1) = 1
|
||||
arr3(1,2,3) = 2
|
||||
Call ok(arr3(3,2,1) = 1, "arr3(3,2,1) = " & arr3(3,2,1))
|
||||
Call ok(arr3(1,2,3) = 2, "arr3(1,2,3) = " & arr3(1,2,3))
|
||||
|
||||
x = arr3
|
||||
Call ok(x(3,2,1) = 1, "x(3,2,1) = " & x(3,2,1))
|
||||
|
||||
Function getarr()
|
||||
Dim arr(3)
|
||||
arr(2) = 2
|
||||
getarr = arr
|
||||
arr(3) = 3
|
||||
End Function
|
||||
|
||||
x = getarr()
|
||||
Call ok(getVT(x) = "VT_ARRAY|VT_VARIANT*", "getVT(x) = " & getVT(x))
|
||||
Call ok(x(2) = 2, "x(2) = " & x(2))
|
||||
Call ok(getVT(x(3)) = "VT_EMPTY*", "getVT(x(3)) = " & getVT(x(3)))
|
||||
|
||||
x(1) = 1
|
||||
Call ok(x(1) = 1, "x(1) = " & x(1))
|
||||
x = getarr()
|
||||
Call ok(getVT(x(1)) = "VT_EMPTY*", "getVT(x(1)) = " & getVT(x(1)))
|
||||
Call ok(x(2) = 2, "x(2) = " & x(2))
|
||||
|
||||
x(1) = 1
|
||||
y = x
|
||||
x(1) = 2
|
||||
Call ok(y(1) = 1, "y(1) = " & y(1))
|
||||
|
||||
for x=1 to 1
|
||||
Dim forarr(3)
|
||||
if x=1 then
|
||||
Call ok(getVT(forarr(1)) = "VT_EMPTY*", "getVT(forarr(1)) = " & getVT(forarr(1)))
|
||||
else
|
||||
Call ok(forarr(1) = x, "forarr(1) = " & forarr(1))
|
||||
end if
|
||||
forarr(1) = x+1
|
||||
next
|
||||
|
||||
x=1
|
||||
Call ok(forarr(x) = 2, "forarr(x) = " & forarr(x))
|
||||
|
||||
Class ArrClass
|
||||
Dim classarr(3)
|
||||
Dim classnoarr()
|
||||
Dim var
|
||||
|
||||
Private Sub Class_Initialize
|
||||
Call ok(getVT(classarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(classarr) = " & getVT(classarr))
|
||||
Call testArray(-1, classnoarr)
|
||||
classarr(0) = 1
|
||||
classarr(1) = 2
|
||||
classarr(2) = 3
|
||||
classarr(3) = 4
|
||||
End Sub
|
||||
|
||||
Public Sub testVarVT
|
||||
Call ok(getVT(var) = "VT_ARRAY|VT_VARIANT*", "getVT(var) = " & getVT(var))
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
Set obj = new ArrClass
|
||||
Call ok(getVT(obj.classarr) = "VT_ARRAY|VT_VARIANT", "getVT(obj.classarr) = " & getVT(obj.classarr))
|
||||
'todo_wine Call ok(obj.classarr(1) = 2, "obj.classarr(1) = " & obj.classarr(1))
|
||||
|
||||
obj.var = arr
|
||||
Call ok(getVT(obj.var) = "VT_ARRAY|VT_VARIANT", "getVT(obj.var) = " & getVT(obj.var))
|
||||
Call obj.testVarVT
|
||||
|
||||
Sub arrarg(byref refarr, byval valarr, byref refarr2, byval valarr2)
|
||||
Call ok(getVT(refarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(refarr) = " & getVT(refarr))
|
||||
Call ok(getVT(valarr) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr) = " & getVT(valarr))
|
||||
Call ok(getVT(refarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(refarr2) = " & getVT(refarr2))
|
||||
Call ok(getVT(valarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr2) = " & getVT(valarr2))
|
||||
End Sub
|
||||
|
||||
Call arrarg(arr, arr, obj.classarr, obj.classarr)
|
||||
|
||||
Sub arrarg2(byref refarr(), byval valarr(), byref refarr2(), byval valarr2())
|
||||
Call ok(getVT(refarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(refarr) = " & getVT(refarr))
|
||||
Call ok(getVT(valarr) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr) = " & getVT(valarr))
|
||||
Call ok(getVT(refarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(refarr2) = " & getVT(refarr2))
|
||||
Call ok(getVT(valarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr2) = " & getVT(valarr2))
|
||||
End Sub
|
||||
|
||||
Call arrarg2(arr, arr, obj.classarr, obj.classarr)
|
||||
|
||||
Sub testarrarg(arg(), vt)
|
||||
Call ok(getVT(arg) = vt, "getVT() = " & getVT(arg) & " expected " & vt)
|
||||
End Sub
|
||||
|
||||
Call testarrarg(1, "VT_I2*")
|
||||
Call testarrarg(false, "VT_BOOL*")
|
||||
Call testarrarg(Empty, "VT_EMPTY*")
|
||||
|
||||
' It's allowed to declare non-builtin RegExp class...
|
||||
class RegExp
|
||||
public property get Global()
|
||||
Call ok(false, "Global called")
|
||||
Global = "fail"
|
||||
end property
|
||||
end class
|
||||
|
||||
' ...but there is no way to use it because builtin instance is always created
|
||||
set x = new RegExp
|
||||
Call ok(x.Global = false, "x.Global = " & x.Global)
|
||||
|
||||
reportSuccess()
|
||||
|
|
|
@ -168,4 +168,10 @@ Call ok(submatch.Count = 2, "submatch.Count = " & submatch.Count)
|
|||
Call ok(submatch.Item(0) = "a", "submatch.Item(0) = " & submatch.Item(0))
|
||||
Call ok(submatch.Item(1) = "b", "submatch.Item(0) = " & submatch.Item(1))
|
||||
|
||||
Set x = new regexp
|
||||
Call ok(x.Pattern = "", "RegExp.Pattern = " & x.Pattern)
|
||||
Call ok(x.IgnoreCase = false, "RegExp.IgnoreCase = " & x.IgnoreCase)
|
||||
Call ok(x.Global = false, "RegExp.Global = " & x.Global)
|
||||
Call ok(x.Multiline = false, "RegExp.Multiline = " & x.Multiline)
|
||||
|
||||
Call reportSuccess()
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
/* @makedep: api.vbs */
|
||||
api.vbs 40 "api.vbs"
|
||||
|
||||
/* @makedep: error.vbs */
|
||||
error.vbs 40 "error.vbs"
|
||||
|
||||
/* @makedep: lang.vbs */
|
||||
lang.vbs 40 "lang.vbs"
|
||||
|
||||
|
|
|
@ -119,12 +119,17 @@ DEFINE_EXPECT(EnableModeless);
|
|||
#define DISPID_GLOBAL_PROPARGPUT1 1012
|
||||
#define DISPID_GLOBAL_COLLOBJ 1013
|
||||
#define DISPID_GLOBAL_DOUBLEASSTRING 1014
|
||||
#define DISPID_GLOBAL_TESTARRAY 1015
|
||||
#define DISPID_GLOBAL_THROWINT 1016
|
||||
|
||||
#define DISPID_TESTOBJ_PROPGET 2000
|
||||
#define DISPID_TESTOBJ_PROPPUT 2001
|
||||
|
||||
#define DISPID_COLLOBJ_RESET 3000
|
||||
|
||||
#define FACILITY_VBS 0xa
|
||||
#define MAKE_VBSERROR(code) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_VBS, code)
|
||||
|
||||
static const WCHAR testW[] = {'t','e','s','t',0};
|
||||
static const WCHAR emptyW[] = {0};
|
||||
|
||||
|
@ -152,18 +157,6 @@ static int strcmp_wa(LPCWSTR strw, const char *stra)
|
|||
return lstrcmpA(buf, stra);
|
||||
}
|
||||
|
||||
static const char *debugstr_guid(REFIID riid)
|
||||
{
|
||||
static char buf[50];
|
||||
|
||||
sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
|
||||
riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
|
||||
riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
|
||||
riid->Data4[5], riid->Data4[6], riid->Data4[7]);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
static const char *vt2a(VARIANT *v)
|
||||
{
|
||||
if(V_VT(v) == (VT_BYREF|VT_VARIANT)) {
|
||||
|
@ -193,6 +186,8 @@ static const char *vt2a(VARIANT *v)
|
|||
return "VT_BOOL";
|
||||
case VT_ARRAY|VT_VARIANT:
|
||||
return "VT_ARRAY|VT_VARIANT";
|
||||
case VT_ARRAY|VT_BYREF|VT_VARIANT:
|
||||
return "VT_ARRAY|VT_BYREF|VT_VARIANT";
|
||||
default:
|
||||
ok(0, "unknown vt %d\n", V_VT(v));
|
||||
return NULL;
|
||||
|
@ -241,7 +236,7 @@ static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
|
|||
static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService,
|
||||
REFIID riid, void **ppv)
|
||||
{
|
||||
ok(0, "unexpected service %s\n", debugstr_guid(guidService));
|
||||
ok(0, "unexpected service %s\n", wine_dbgstr_guid(guidService));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
@ -446,6 +441,26 @@ static void test_disp(IDispatch *disp)
|
|||
IDispatchEx_Release(dispex);
|
||||
}
|
||||
|
||||
static void test_safearray(SAFEARRAY *safearray, unsigned indims)
|
||||
{
|
||||
int i, exdims = indims;
|
||||
|
||||
if(!exdims)
|
||||
exdims = 1;
|
||||
ok(safearray->cDims == exdims, "safearray->cDims = %d, expected %d\n", safearray->cDims, exdims);
|
||||
todo_wine
|
||||
ok(safearray->fFeatures == (FADF_VARIANT|FADF_HAVEVARTYPE|FADF_FIXEDSIZE|FADF_STATIC),
|
||||
"safearray->fFeatures = %x\n", safearray->fFeatures);
|
||||
ok(safearray->cbElements == sizeof(VARIANT), "safearray->cbElements = %x\n", safearray->cbElements);
|
||||
ok(!safearray->cLocks, "safearray->cLocks = %x\n", safearray->cLocks);
|
||||
|
||||
for(i=0; i < safearray->cDims; i++) {
|
||||
ok(safearray->rgsabound[i].cElements == indims ? i+4 : 1, "safearray->rgsabound[%d].cElements = %d\n", i,
|
||||
safearray->rgsabound[i].cElements);
|
||||
ok(!safearray->rgsabound[i].lLbound, "safearray->rgsabound[%d].lLbound = %d\n", i, safearray->rgsabound[i].lLbound);
|
||||
}
|
||||
}
|
||||
|
||||
#define test_grfdex(a,b) _test_grfdex(__LINE__,a,b)
|
||||
static void _test_grfdex(unsigned line, DWORD grfdex, DWORD expect)
|
||||
{
|
||||
|
@ -466,7 +481,7 @@ static HRESULT WINAPI EnumVARIANT_QueryInterface(IEnumVARIANT *iface, REFIID rii
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
ok(0, "unexpected call %s\n", debugstr_guid(riid));
|
||||
ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
@ -539,7 +554,7 @@ static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid,
|
|||
|| IsEqualGUID(riid, &IID_IDispatchEx))
|
||||
*ppv = iface;
|
||||
else {
|
||||
trace("QI %s\n", debugstr_guid(riid));
|
||||
trace("QI %s\n", wine_dbgstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
@ -913,6 +928,16 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
|
|||
*pid = DISPID_GLOBAL_DOUBLEASSTRING;
|
||||
return S_OK;
|
||||
}
|
||||
if(!strcmp_wa(bstrName, "testArray")) {
|
||||
test_grfdex(grfdex, fdexNameCaseInsensitive);
|
||||
*pid = DISPID_GLOBAL_TESTARRAY;
|
||||
return S_OK;
|
||||
}
|
||||
if(!strcmp_wa(bstrName, "throwInt")) {
|
||||
test_grfdex(grfdex, fdexNameCaseInsensitive);
|
||||
*pid = DISPID_GLOBAL_THROWINT;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if(strict_dispid_check && strcmp_wa(bstrName, "x"))
|
||||
ok(0, "unexpected call %s %x\n", wine_dbgstr_w(bstrName), grfdex);
|
||||
|
@ -1171,6 +1196,61 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
|
|||
|
||||
V_VT(pvarRes) = VT_BSTR;
|
||||
return VarBstrFromR8(V_R8(pdp->rgvarg), 0, 0, &V_BSTR(pvarRes));
|
||||
|
||||
case DISPID_GLOBAL_TESTARRAY:
|
||||
ok(wFlags == INVOKE_FUNC, "wFlags = %x\n", wFlags);
|
||||
ok(pdp != NULL, "pdp == NULL\n");
|
||||
ok(pdp->rgvarg != NULL, "rgvarg == NULL\n");
|
||||
ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
|
||||
ok(pdp->cArgs == 2, "cArgs = %d\n", pdp->cArgs);
|
||||
ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
|
||||
ok(!pvarRes, "pvarRes != NULL\n");
|
||||
ok(pei != NULL, "pei == NULL\n");
|
||||
|
||||
ok(V_VT(pdp->rgvarg+1) == VT_I2, "V_VT(psp->rgvargs+1) = %d\n", V_VT(pdp->rgvarg+1));
|
||||
ok(V_VT(pdp->rgvarg) == (VT_BYREF|VT_VARIANT), "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
|
||||
ok(V_VT(V_VARIANTREF(pdp->rgvarg)) == (VT_ARRAY|VT_BYREF|VT_VARIANT),
|
||||
"V_VT(V_VARIANTREF(psp->rgvargs)) = %d\n", V_VT(V_VARIANTREF(pdp->rgvarg)));
|
||||
if(V_I2(pdp->rgvarg+1) == -1)
|
||||
ok(!*V_ARRAYREF(V_VARIANTREF(pdp->rgvarg)), "*V_ARRAYREF(V_VARIANTREF(pdp->rgvarg)) != NULL\n");
|
||||
else
|
||||
test_safearray(*V_ARRAYREF(V_VARIANTREF(pdp->rgvarg)), V_I2(pdp->rgvarg+1));
|
||||
return S_OK;
|
||||
|
||||
case DISPID_GLOBAL_THROWINT: {
|
||||
VARIANT *v = pdp->rgvarg;
|
||||
HRESULT hres;
|
||||
|
||||
ok((wFlags & ~INVOKE_PROPERTYGET) == INVOKE_FUNC, "wFlags = %x\n", wFlags);
|
||||
ok(pdp != NULL, "pdp == NULL\n");
|
||||
ok(pdp->rgvarg != NULL, "rgvarg == NULL\n");
|
||||
ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
|
||||
ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs);
|
||||
ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
|
||||
ok(pei != NULL, "pei == NULL\n");
|
||||
if(pvarRes) {
|
||||
ok(V_VT(pvarRes) == VT_EMPTY, "V_VT(pvarRes) = %d\n", V_VT(pvarRes));
|
||||
V_VT(pvarRes) = VT_BOOL;
|
||||
V_BOOL(pvarRes) = VARIANT_FALSE;
|
||||
}
|
||||
|
||||
if(V_VT(v) == (VT_VARIANT|VT_BYREF))
|
||||
v = V_VARIANTREF(v);
|
||||
|
||||
switch(V_VT(v)) {
|
||||
case VT_I2:
|
||||
hres = V_I2(v);
|
||||
break;
|
||||
case VT_I4:
|
||||
hres = V_I4(v);
|
||||
break;
|
||||
default:
|
||||
ok(0, "unexpected vt %d\n", V_VT(v));
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
return hres;
|
||||
}
|
||||
}
|
||||
|
||||
ok(0, "unexpected call %d\n", id);
|
||||
|
@ -1733,7 +1813,7 @@ static BSTR get_script_from_file(const char *filename)
|
|||
|
||||
size = GetFileSize(file, NULL);
|
||||
|
||||
map = CreateFileMapping(file, NULL, PAGE_READONLY, 0, 0, NULL);
|
||||
map = CreateFileMappingW(file, NULL, PAGE_READONLY, 0, 0, NULL);
|
||||
CloseHandle(file);
|
||||
if(map == INVALID_HANDLE_VALUE) {
|
||||
trace("Could not create file mapping: %u\n", GetLastError());
|
||||
|
@ -1912,6 +1992,20 @@ static void run_tests(void)
|
|||
test_global_vars_ref(TRUE);
|
||||
test_global_vars_ref(FALSE);
|
||||
|
||||
hres = parse_script_ar("throwInt(&h80080008&)");
|
||||
ok(hres == 0x80080008, "hres = %08x\n", hres);
|
||||
|
||||
/* DISP_E_BADINDEX */
|
||||
hres = parse_script_ar("throwInt(&h8002000b&)");
|
||||
ok(hres == MAKE_VBSERROR(9), "hres = %08x\n", hres);
|
||||
|
||||
hres = parse_script_ar("throwInt(&h800a0009&)");
|
||||
ok(hres == MAKE_VBSERROR(9), "hres = %08x\n", hres);
|
||||
|
||||
/* E_NOTIMPL */
|
||||
hres = parse_script_ar("throwInt(&h80004001&)");
|
||||
ok(hres == MAKE_VBSERROR(445), "hres = %08x\n", hres);
|
||||
|
||||
strict_dispid_check = FALSE;
|
||||
|
||||
parse_script_a("Sub testsub\n"
|
||||
|
@ -1931,6 +2025,7 @@ static void run_tests(void)
|
|||
run_from_res("lang.vbs");
|
||||
run_from_res("api.vbs");
|
||||
run_from_res("regexp.vbs");
|
||||
run_from_res("error.vbs");
|
||||
|
||||
test_procedures();
|
||||
test_gc();
|
||||
|
|
Loading…
Reference in a new issue