mirror of
https://github.com/reactos/reactos.git
synced 2026-05-25 00:30:10 +08:00
Fix the shell32 apitests so that they pass on Windows Server 2003 - Windows 10. Many of these fixes are for Vista+, but the most important fixes are for ShellExecCmdLine and FindExecutable which had issues closing windows after tests and deleting test files. Failing to delete these files breaks the other test (i.e. running ShellExecCmdLine would break FindExecutable and vis-versa.)
111 lines
3.4 KiB
C++
111 lines
3.4 KiB
C++
/*
|
|
* PROJECT: ReactOS api tests
|
|
* LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
|
|
* PURPOSE: Test for CMyComputer
|
|
* PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
|
|
*/
|
|
|
|
#include "shelltest.h"
|
|
|
|
#define NDEBUG
|
|
#include <debug.h>
|
|
#include <stdio.h>
|
|
#include <shellutils.h>
|
|
|
|
#define INVALID_POINTER ((PVOID)(ULONG_PTR)0xdeadbeefdeadbeefULL)
|
|
|
|
static
|
|
VOID
|
|
TestShellFolder(
|
|
_In_ IShellFolder2 *psf2)
|
|
{
|
|
HRESULT hr;
|
|
CComPtr<IDropTarget> pdt;
|
|
CComPtr<IDropTarget> pdt_2;
|
|
CComPtr<IContextMenu> pcm;
|
|
CComPtr<IContextMenu> pcm_2;
|
|
CComPtr<IShellView> psv;
|
|
CComPtr<IShellView> psv_2;
|
|
|
|
hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget, &pdt));
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
|
|
hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget, &pdt_2));
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
ok(pdt != pdt_2, "Expected %p != %p\n", static_cast<PVOID>(pdt), static_cast<PVOID>(pdt_2));
|
|
|
|
if (GetNTVersion() < _WIN32_WINNT_WIN10)
|
|
{
|
|
hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &pcm));
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
|
|
hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &pcm_2));
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
ok(pcm != pcm_2, "Expected %p != %p\n", static_cast<PVOID>(pcm), static_cast<PVOID>(pcm_2));
|
|
|
|
hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IShellView, &psv));
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
|
|
hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IShellView, &psv_2));
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
ok(psv != psv_2, "Expected %p != %p\n", static_cast<PVOID>(psv), static_cast<PVOID>(psv_2));
|
|
}
|
|
}
|
|
|
|
VOID TestInitialize(_In_ IShellFolder2 *psf2)
|
|
{
|
|
CComPtr<IPersistFolder2> ppf2;
|
|
HRESULT hr = psf2->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
|
|
if (GetNTVersion() < _WIN32_WINNT_WIN10)
|
|
{
|
|
hr = ppf2->Initialize(NULL);
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
|
|
hr = ppf2->Initialize((LPCITEMIDLIST)INVALID_POINTER);
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
|
|
CComHeapPtr<ITEMIDLIST> pidl;
|
|
hr = ppf2->GetCurFolder(&pidl);
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
// 0 in early win10, 14 in xp; crashes on late win10
|
|
ok(pidl->mkid.cb == 0x14, "expected empty pidl got cb = %x\n", pidl->mkid.cb);
|
|
}
|
|
}
|
|
|
|
START_TEST(CMyComputer)
|
|
{
|
|
HRESULT hr;
|
|
CComPtr<IShellFolder2> psf2;
|
|
CComPtr<IShellFolder2> psf2_2;
|
|
CComPtr<IShellFolder> psf;
|
|
|
|
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
|
|
|
hr = CoCreateInstance(CLSID_MyComputer,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_PPV_ARG(IShellFolder2, &psf2));
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
if (FAILED(hr))
|
|
{
|
|
skip("Could not instantiate CShellDesktop\n");
|
|
return;
|
|
}
|
|
|
|
if (GetNTVersion() < _WIN32_WINNT_VISTA)
|
|
{
|
|
/* NT5.x returns a pointer to the same object but not NT6.x and newer. */
|
|
hr = CoCreateInstance(CLSID_MyComputer,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_PPV_ARG(IShellFolder2, &psf2_2));
|
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
|
ok(psf2 == psf2_2, "Expected %p == %p\n", static_cast<PVOID>(psf2), static_cast<PVOID>(psf2_2));
|
|
}
|
|
|
|
TestShellFolder(psf2);
|
|
TestInitialize(psf2);
|
|
}
|