reactos/modules/rostests/apitests/shell32/SHIsBadInterfacePtr.cpp
Katayama Hirofumi MZ a58bf95914
[SHELL32][SHELL32_APITEST][SDK] SHIsBadInterfacePtr (#7664)
Implementing missing features...
JIRA issue: CORE-19278
- Move function definition from
  stubs.cpp to utils.cpp.
- Implement SHIsBadInterfacePtr
  function in utils.cpp.
- Add prototype to <undocshell.h>.
2025-01-26 19:24:24 +09:00

53 lines
1.6 KiB
C++

/*
* PROJECT: ReactOS API tests
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
* PURPOSE: Test for SHIsBadInterfacePtr
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
*/
#include "shelltest.h"
#include <undocshell.h>
typedef BOOL (WINAPI *FN_SHIsBadInterfacePtr)(LPCVOID, UINT_PTR);
static HRESULT STDMETHODCALLTYPE dummy_QueryInterface(REFIID riid, LPVOID *ppvObj) { return S_OK; }
static ULONG STDMETHODCALLTYPE dummy_AddRef() { return S_OK; }
static ULONG STDMETHODCALLTYPE dummy_Release() { return S_OK; }
START_TEST(SHIsBadInterfacePtr)
{
struct CUnknownVtbl
{
HRESULT (STDMETHODCALLTYPE *QueryInterface)(REFIID riid, LPVOID *ppvObj);
ULONG (STDMETHODCALLTYPE *AddRef)();
ULONG (STDMETHODCALLTYPE *Release)();
};
struct CUnknown { CUnknownVtbl *lpVtbl; };
BOOL ret;
FN_SHIsBadInterfacePtr SHIsBadInterfacePtr =
(FN_SHIsBadInterfacePtr)GetProcAddress(GetModuleHandleW(L"shell32"), MAKEINTRESOURCEA(84));
if (!SHIsBadInterfacePtr)
{
skip("There is no SHIsBadInterfacePtr\n");
return;
}
ret = SHIsBadInterfacePtr(NULL, 1);
ok_int(ret, TRUE);
CUnknown unk1 = { NULL };
ret = SHIsBadInterfacePtr(&unk1, 1);
ok_int(ret, TRUE);
CUnknownVtbl vtbl1 = { dummy_QueryInterface, dummy_AddRef, NULL };
CUnknown unk2 = { &vtbl1 };
ret = SHIsBadInterfacePtr(&unk2, 1);
ok_int(ret, TRUE);
CUnknownVtbl vtbl2 = { dummy_QueryInterface, dummy_AddRef, dummy_Release };
CUnknown unk3 = { &vtbl2 };
ret = SHIsBadInterfacePtr(&unk3, 1);
ok_int(ret, FALSE);
}