mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 13:45:56 +00:00
[SHLWAPI][SHLWAPI_APITEST][SDK] Implement IsQSForward (#8124)
Implementing missing features... JIRA issue: CORE-19278 - Implement IsQSForward function. - Modify IsQSForward prototype in <shlwapi_undoc.h> - Add IsQSForward testcase to shlwapi_apitest.
This commit is contained in:
parent
b39cb1229a
commit
80381b0578
5 changed files with 295 additions and 1 deletions
|
@ -2232,11 +2232,86 @@ HRESULT WINAPI MayExecForward(IUnknown* lpUnknown, INT iUnk, REFGUID pguidCmdGro
|
||||||
* @ [SHLWAPI.202]
|
* @ [SHLWAPI.202]
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#ifdef __REACTOS__
|
||||||
|
HRESULT WINAPI
|
||||||
|
IsQSForward(_In_opt_ REFGUID pguidCmdGroup, _In_ ULONG cCmds, _In_ OLECMD *prgCmds)
|
||||||
|
{
|
||||||
|
DWORD cmdFlags = 0;
|
||||||
|
OLECMDID cmdID;
|
||||||
|
ULONG iCmd;
|
||||||
|
enum {
|
||||||
|
CMD_FLAG_SUPPORTED_BASIC = 0x1,
|
||||||
|
CMD_FLAG_SUPPORTED_ADVANCED = 0x2,
|
||||||
|
CMD_FLAG_NOT_SUPPORTED = 0x4,
|
||||||
|
};
|
||||||
|
|
||||||
|
TRACE("(%s, %lu, %p)\n", wine_dbgstr_guid(pguidCmdGroup), cCmds, prgCmds);
|
||||||
|
|
||||||
|
if ((LONG)cCmds <= 0)
|
||||||
|
return OLECMDERR_E_NOTSUPPORTED;
|
||||||
|
|
||||||
|
if (!pguidCmdGroup)
|
||||||
|
{
|
||||||
|
for (iCmd = 0; iCmd < cCmds; ++iCmd)
|
||||||
|
{
|
||||||
|
cmdID = prgCmds[iCmd].cmdID;
|
||||||
|
if (cmdID <= OLECMDID_PROPERTIES)
|
||||||
|
{
|
||||||
|
cmdFlags |= CMD_FLAG_NOT_SUPPORTED; // Not supported
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmdID <= OLECMDID_PASTE || cmdID == OLECMDID_SELECTALL)
|
||||||
|
{
|
||||||
|
cmdFlags |= CMD_FLAG_SUPPORTED_BASIC;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmdID <= OLECMDID_UPDATECOMMANDS ||
|
||||||
|
(OLECMDID_HIDETOOLBARS <= cmdID && cmdID != OLECMDID_ENABLE_INTERACTION))
|
||||||
|
{
|
||||||
|
cmdFlags |= CMD_FLAG_NOT_SUPPORTED; // Not supported
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdFlags |= CMD_FLAG_SUPPORTED_ADVANCED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!IsEqualGUID(&CGID_Explorer, pguidCmdGroup))
|
||||||
|
{
|
||||||
|
#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
|
||||||
|
return OLECMDERR_E_UNKNOWNGROUP;
|
||||||
|
#else
|
||||||
|
return OLECMDERR_E_NOTSUPPORTED;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
for (iCmd = 0; iCmd < cCmds; ++iCmd)
|
||||||
|
{
|
||||||
|
cmdID = prgCmds[iCmd].cmdID;
|
||||||
|
if (cmdID == OLECMDID_SELECTALL ||
|
||||||
|
(OLECMDID_SHOWFIND <= cmdID && cmdID <= OLECMDID_SHOWPRINT))
|
||||||
|
{
|
||||||
|
cmdFlags |= CMD_FLAG_SUPPORTED_BASIC;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cmdFlags || (cmdFlags & CMD_FLAG_NOT_SUPPORTED))
|
||||||
|
return OLECMDERR_E_NOTSUPPORTED; // Not supported
|
||||||
|
|
||||||
|
return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, cmdFlags);
|
||||||
|
}
|
||||||
|
#else
|
||||||
HRESULT WINAPI IsQSForward(REFGUID pguidCmdGroup,ULONG cCmds, OLECMD *prgCmds)
|
HRESULT WINAPI IsQSForward(REFGUID pguidCmdGroup,ULONG cCmds, OLECMD *prgCmds)
|
||||||
{
|
{
|
||||||
FIXME("(%p,%d,%p) - stub!\n", pguidCmdGroup, cCmds, prgCmds);
|
FIXME("(%p,%d,%p) - stub!\n", pguidCmdGroup, cCmds, prgCmds);
|
||||||
return DRAGDROP_E_NOTREGISTERED;
|
return DRAGDROP_E_NOTREGISTERED;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* @ [SHLWAPI.204]
|
* @ [SHLWAPI.204]
|
||||||
|
|
|
@ -7,6 +7,7 @@ include_directories($<TARGET_FILE_DIR:shlwapi_resource_dll>)
|
||||||
list(APPEND SOURCE
|
list(APPEND SOURCE
|
||||||
AssocQueryString.c
|
AssocQueryString.c
|
||||||
IShellFolderHelpers.cpp
|
IShellFolderHelpers.cpp
|
||||||
|
IsQSForward.c
|
||||||
PathFileExistsDefExtAndAttributesW.c
|
PathFileExistsDefExtAndAttributesW.c
|
||||||
PathFindOnPath.c
|
PathFindOnPath.c
|
||||||
PathIsUNC.c
|
PathIsUNC.c
|
||||||
|
|
216
modules/rostests/apitests/shlwapi/IsQSForward.c
Normal file
216
modules/rostests/apitests/shlwapi/IsQSForward.c
Normal file
|
@ -0,0 +1,216 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS api tests
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: Tests for IsQSForward
|
||||||
|
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <apitest.h>
|
||||||
|
#include <docobj.h>
|
||||||
|
#include <shlobj.h>
|
||||||
|
#include <shlwapi.h>
|
||||||
|
#include <shlwapi_undoc.h>
|
||||||
|
#include <pseh/pseh2.h>
|
||||||
|
#include <versionhelpers.h>
|
||||||
|
|
||||||
|
static HRESULT
|
||||||
|
IsQSForwardMockup(_In_opt_ REFGUID pguidCmdGroup, _In_ ULONG cCmds, _In_ OLECMD *prgCmds)
|
||||||
|
{
|
||||||
|
DWORD cmdFlags = 0;
|
||||||
|
OLECMDID cmdID;
|
||||||
|
ULONG iCmd;
|
||||||
|
enum {
|
||||||
|
CMD_FLAG_SUPPORTED_BASIC = 0x1,
|
||||||
|
CMD_FLAG_SUPPORTED_ADVANCED = 0x2,
|
||||||
|
CMD_FLAG_NOT_SUPPORTED = 0x4,
|
||||||
|
};
|
||||||
|
|
||||||
|
//TRACE("(%s, %lu, %p)\n", wine_dbgstr_guid(pguidCmdGroup), cCmds, prgCmds);
|
||||||
|
|
||||||
|
if ((LONG)cCmds <= 0)
|
||||||
|
return OLECMDERR_E_NOTSUPPORTED;
|
||||||
|
|
||||||
|
if (!pguidCmdGroup)
|
||||||
|
{
|
||||||
|
for (iCmd = 0; iCmd < cCmds; ++iCmd)
|
||||||
|
{
|
||||||
|
cmdID = prgCmds[iCmd].cmdID;
|
||||||
|
if (cmdID <= OLECMDID_PROPERTIES)
|
||||||
|
{
|
||||||
|
cmdFlags |= CMD_FLAG_NOT_SUPPORTED; // Not supported
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmdID <= OLECMDID_PASTE || cmdID == OLECMDID_SELECTALL)
|
||||||
|
{
|
||||||
|
cmdFlags |= CMD_FLAG_SUPPORTED_BASIC;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmdID <= OLECMDID_UPDATECOMMANDS ||
|
||||||
|
(OLECMDID_HIDETOOLBARS <= cmdID && cmdID != OLECMDID_ENABLE_INTERACTION))
|
||||||
|
{
|
||||||
|
cmdFlags |= CMD_FLAG_NOT_SUPPORTED; // Not supported
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdFlags |= CMD_FLAG_SUPPORTED_ADVANCED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!IsEqualGUID(&CGID_Explorer, pguidCmdGroup))
|
||||||
|
{
|
||||||
|
if (IsWindowsVistaOrGreater())
|
||||||
|
return OLECMDERR_E_UNKNOWNGROUP;
|
||||||
|
else
|
||||||
|
return OLECMDERR_E_NOTSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (iCmd = 0; iCmd < cCmds; ++iCmd)
|
||||||
|
{
|
||||||
|
cmdID = prgCmds[iCmd].cmdID;
|
||||||
|
if (cmdID == OLECMDID_SELECTALL ||
|
||||||
|
(OLECMDID_SHOWFIND <= cmdID && cmdID <= OLECMDID_SHOWPRINT))
|
||||||
|
{
|
||||||
|
cmdFlags |= CMD_FLAG_SUPPORTED_BASIC;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cmdFlags || (cmdFlags & CMD_FLAG_NOT_SUPPORTED))
|
||||||
|
return OLECMDERR_E_NOTSUPPORTED; // Not supported
|
||||||
|
|
||||||
|
return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, cmdFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
START_TEST(IsQSForward)
|
||||||
|
{
|
||||||
|
OLECMD cmds[2];
|
||||||
|
LONG cmdID, cmdID2;
|
||||||
|
HRESULT ret1, ret2;
|
||||||
|
ULONG cCmds;
|
||||||
|
BOOL bExcept1, bExcept2;
|
||||||
|
const GUID *pGUID = NULL;
|
||||||
|
enum { LOW_VALUE = -99, HIGH_VALUE = OLECMDID_MEDIA_PLAYBACK };
|
||||||
|
|
||||||
|
cmds[0].cmdf = 0;
|
||||||
|
|
||||||
|
cCmds = 0;
|
||||||
|
for (cmdID = LOW_VALUE; cmdID <= HIGH_VALUE; ++cmdID)
|
||||||
|
{
|
||||||
|
cmds[0].cmdID = cmdID;
|
||||||
|
ret1 = IsQSForward(pGUID, cCmds, cmds);
|
||||||
|
ret2 = IsQSForwardMockup(pGUID, cCmds, cmds);
|
||||||
|
ok(ret1 == ret2, "cmdID: %ld (%ld vs %ld)\n", cmdID, ret1, ret2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// cCmds = 0 and NULL cmds
|
||||||
|
for (cmdID = LOW_VALUE; cmdID <= HIGH_VALUE; ++cmdID)
|
||||||
|
{
|
||||||
|
cmds[0].cmdID = cmdID;
|
||||||
|
ret1 = IsQSForward(pGUID, cCmds, NULL);
|
||||||
|
ret2 = IsQSForwardMockup(pGUID, cCmds, NULL);
|
||||||
|
ok(ret1 == ret2, "cmdID: %ld (%ld vs %ld)\n", cmdID, ret1, ret2);
|
||||||
|
}
|
||||||
|
|
||||||
|
cCmds = 1;
|
||||||
|
for (cmdID = LOW_VALUE; cmdID <= HIGH_VALUE; ++cmdID)
|
||||||
|
{
|
||||||
|
cmds[0].cmdID = cmdID;
|
||||||
|
ret1 = IsQSForward(pGUID, cCmds, cmds);
|
||||||
|
ret2 = IsQSForwardMockup(pGUID, cCmds, cmds);
|
||||||
|
ok(ret1 == ret2, "cmdID: %ld (%ld vs %ld)\n", cmdID, ret1, ret2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// cCmds = 1 and NULL cmds
|
||||||
|
for (cmdID = LOW_VALUE; cmdID <= HIGH_VALUE; ++cmdID)
|
||||||
|
{
|
||||||
|
cmds[0].cmdID = cmdID;
|
||||||
|
|
||||||
|
ret1 = ret2 = 0xDEADFACE;
|
||||||
|
bExcept1 = bExcept2 = FALSE;
|
||||||
|
|
||||||
|
_SEH2_TRY
|
||||||
|
{
|
||||||
|
ret1 = IsQSForward(pGUID, cCmds, NULL);
|
||||||
|
}
|
||||||
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
|
bExcept1 = TRUE;
|
||||||
|
}
|
||||||
|
_SEH2_END;
|
||||||
|
|
||||||
|
_SEH2_TRY
|
||||||
|
{
|
||||||
|
ret2 = IsQSForwardMockup(pGUID, cCmds, NULL);
|
||||||
|
}
|
||||||
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
|
bExcept2 = TRUE;
|
||||||
|
}
|
||||||
|
_SEH2_END;
|
||||||
|
|
||||||
|
ok(ret1 == ret2, "cmdID: %ld (%ld vs %ld)\n", cmdID, ret1, ret2);
|
||||||
|
ok((bExcept1 && bExcept2), "cmdID: %ld (%d vs %d)\n", cmdID, bExcept1, bExcept2);
|
||||||
|
}
|
||||||
|
|
||||||
|
pGUID = &CGID_Explorer;
|
||||||
|
for (cmdID = LOW_VALUE; cmdID <= HIGH_VALUE; ++cmdID)
|
||||||
|
{
|
||||||
|
cmds[0].cmdID = cmdID;
|
||||||
|
ret1 = IsQSForward(pGUID, cCmds, cmds);
|
||||||
|
ret2 = IsQSForwardMockup(pGUID, cCmds, cmds);
|
||||||
|
ok(ret1 == ret2, "cmdID: %ld (%ld vs %ld)\n", cmdID, ret1, ret2);
|
||||||
|
}
|
||||||
|
|
||||||
|
pGUID = &IID_IUnknown;
|
||||||
|
for (cmdID = LOW_VALUE; cmdID <= HIGH_VALUE; ++cmdID)
|
||||||
|
{
|
||||||
|
cmds[0].cmdID = cmdID;
|
||||||
|
ret1 = IsQSForward(pGUID, cCmds, cmds);
|
||||||
|
ret2 = IsQSForwardMockup(pGUID, cCmds, cmds);
|
||||||
|
ok(ret1 == ret2, "cmdID: %ld (%ld vs %ld)\n", cmdID, ret1, ret2);
|
||||||
|
}
|
||||||
|
|
||||||
|
cCmds = 2;
|
||||||
|
pGUID = NULL;
|
||||||
|
for (cmdID = LOW_VALUE; cmdID <= HIGH_VALUE; ++cmdID)
|
||||||
|
{
|
||||||
|
for (cmdID2 = LOW_VALUE; cmdID2 <= HIGH_VALUE; ++cmdID2)
|
||||||
|
{
|
||||||
|
cmds[0].cmdID = cmdID;
|
||||||
|
cmds[1].cmdID = cmdID2;
|
||||||
|
ret1 = IsQSForward(pGUID, cCmds, cmds);
|
||||||
|
ret2 = IsQSForwardMockup(pGUID, cCmds, cmds);
|
||||||
|
ok(ret1 == ret2, "cmdID: %ld (%ld vs %ld)\n", cmdID, ret1, ret2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pGUID = &CGID_Explorer;
|
||||||
|
for (cmdID = LOW_VALUE; cmdID <= HIGH_VALUE; ++cmdID)
|
||||||
|
{
|
||||||
|
cmds[0].cmdID = cmdID;
|
||||||
|
for (cmdID2 = LOW_VALUE; cmdID2 <= HIGH_VALUE; ++cmdID2)
|
||||||
|
{
|
||||||
|
cmds[1].cmdID = cmdID2;
|
||||||
|
ret1 = IsQSForward(pGUID, cCmds, cmds);
|
||||||
|
ret2 = IsQSForwardMockup(pGUID, cCmds, cmds);
|
||||||
|
ok(ret1 == ret2, "cmdID: %ld (%ld vs %ld)\n", cmdID, ret1, ret2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pGUID = &IID_IUnknown;
|
||||||
|
for (cmdID = LOW_VALUE; cmdID <= HIGH_VALUE; ++cmdID)
|
||||||
|
{
|
||||||
|
cmds[0].cmdID = cmdID;
|
||||||
|
for (cmdID2 = LOW_VALUE; cmdID2 <= HIGH_VALUE; ++cmdID2)
|
||||||
|
{
|
||||||
|
cmds[1].cmdID = cmdID2;
|
||||||
|
ret1 = IsQSForward(pGUID, cCmds, cmds);
|
||||||
|
ret2 = IsQSForwardMockup(pGUID, cCmds, cmds);
|
||||||
|
ok(ret1 == ret2, "cmdID: %ld (%ld vs %ld)\n", cmdID, ret1, ret2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,7 @@ extern void func_AssocQueryString(void);
|
||||||
extern void func_PathFileExistsDefExtAndAttributesW(void);
|
extern void func_PathFileExistsDefExtAndAttributesW(void);
|
||||||
extern void func_PathFindOnPath(void);
|
extern void func_PathFindOnPath(void);
|
||||||
extern void func_IShellFolderHelpers(void);
|
extern void func_IShellFolderHelpers(void);
|
||||||
|
extern void func_IsQSForward(void);
|
||||||
extern void func_isuncpath(void);
|
extern void func_isuncpath(void);
|
||||||
extern void func_isuncpathserver(void);
|
extern void func_isuncpathserver(void);
|
||||||
extern void func_isuncpathservershare(void);
|
extern void func_isuncpathservershare(void);
|
||||||
|
@ -24,6 +25,7 @@ const struct test winetest_testlist[] =
|
||||||
{ "PathFileExistsDefExtAndAttributesW", func_PathFileExistsDefExtAndAttributesW },
|
{ "PathFileExistsDefExtAndAttributesW", func_PathFileExistsDefExtAndAttributesW },
|
||||||
{ "PathFindOnPath", func_PathFindOnPath },
|
{ "PathFindOnPath", func_PathFindOnPath },
|
||||||
{ "IShellFolderHelpers", func_IShellFolderHelpers },
|
{ "IShellFolderHelpers", func_IShellFolderHelpers },
|
||||||
|
{ "IsQSForward", func_IsQSForward },
|
||||||
{ "PathIsUNC", func_isuncpath },
|
{ "PathIsUNC", func_isuncpath },
|
||||||
{ "PathIsUNCServer", func_isuncpathserver },
|
{ "PathIsUNCServer", func_isuncpathserver },
|
||||||
{ "PathIsUNCServerShare", func_isuncpathservershare },
|
{ "PathIsUNCServerShare", func_isuncpathservershare },
|
||||||
|
|
|
@ -111,7 +111,7 @@ int WINAPI SHSearchMapInt(const int *lpKeys, const int *lpValues, int iLen, int
|
||||||
VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown);
|
VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown);
|
||||||
HRESULT WINAPI MayQSForward(IUnknown* lpUnknown, PVOID lpReserved, REFGUID riidCmdGrp, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText);
|
HRESULT WINAPI MayQSForward(IUnknown* lpUnknown, PVOID lpReserved, REFGUID riidCmdGrp, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText);
|
||||||
HRESULT WINAPI MayExecForward(IUnknown* lpUnknown, INT iUnk, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
|
HRESULT WINAPI MayExecForward(IUnknown* lpUnknown, INT iUnk, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
|
||||||
HRESULT WINAPI IsQSForward(REFGUID pguidCmdGroup,ULONG cCmds, OLECMD *prgCmds);
|
HRESULT WINAPI IsQSForward(_In_opt_ REFGUID pguidCmdGroup, _In_ ULONG cCmds, _In_ OLECMD *prgCmds);
|
||||||
BOOL WINAPI SHIsChildOrSelf(HWND hParent, HWND hChild);
|
BOOL WINAPI SHIsChildOrSelf(HWND hParent, HWND hChild);
|
||||||
HRESULT WINAPI SHForwardContextMenuMsg(IUnknown* pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pResult, BOOL useIContextMenu2);
|
HRESULT WINAPI SHForwardContextMenuMsg(IUnknown* pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pResult, BOOL useIContextMenu2);
|
||||||
VOID WINAPI SHSetDefaultDialogFont(HWND hWnd, INT id);
|
VOID WINAPI SHSetDefaultDialogFont(HWND hWnd, INT id);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue