mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 18:35:41 +00:00
[SHELL32_APITEST]
- Add a test showing that repeated calls to SHGetDesktopFolder return pointers to the same object, and that its CreateViewObject method instead creates new objects. CORE-9839 svn path=/trunk/; revision=68200
This commit is contained in:
parent
52e13410cb
commit
9046d69084
3 changed files with 96 additions and 3 deletions
|
@ -1,7 +1,13 @@
|
||||||
|
|
||||||
set_cpp(WITH_RUNTIME)
|
set_cpp(WITH_RUNTIME)
|
||||||
add_executable(shell32_apitest menu.cpp testlist.c)
|
|
||||||
|
include_directories(${REACTOS_SOURCE_DIR}/lib/atl)
|
||||||
|
|
||||||
|
add_executable(shell32_apitest
|
||||||
|
CShellDesktop.cpp
|
||||||
|
menu.cpp
|
||||||
|
testlist.c)
|
||||||
target_link_libraries(shell32_apitest wine uuid)
|
target_link_libraries(shell32_apitest wine uuid)
|
||||||
set_module_type(shell32_apitest win32cui)
|
set_module_type(shell32_apitest win32cui)
|
||||||
add_importlibs(shell32_apitest msvcrt kernel32 user32 gdi32 shell32 ole32 shlwapi)
|
add_importlibs(shell32_apitest user32 gdi32 shell32 ole32 oleaut32 shlwapi msvcrt kernel32)
|
||||||
add_cd_file(TARGET shell32_apitest DESTINATION reactos/bin FOR all)
|
add_cd_file(TARGET shell32_apitest DESTINATION reactos/bin FOR all)
|
||||||
|
|
86
rostests/apitests/shell32/CShellDesktop.cpp
Normal file
86
rostests/apitests/shell32/CShellDesktop.cpp
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS api tests
|
||||||
|
* LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
|
||||||
|
* PURPOSE: Test for CShellDesktop
|
||||||
|
* PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "shelltest.h"
|
||||||
|
#include <atlbase.h>
|
||||||
|
#include <atlcom.h>
|
||||||
|
#include <strsafe.h>
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
#include <shellutils.h>
|
||||||
|
|
||||||
|
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));
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
START_TEST(CShellDesktop)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
CComPtr<IShellFolder2> psf2;
|
||||||
|
CComPtr<IShellFolder2> psf2_2;
|
||||||
|
CComPtr<IShellFolder> psf;
|
||||||
|
|
||||||
|
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
||||||
|
|
||||||
|
hr = CoCreateInstance(CLSID_ShellDesktop,
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* second create should give us a pointer to the same object */
|
||||||
|
hr = CoCreateInstance(CLSID_ShellDesktop,
|
||||||
|
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));
|
||||||
|
|
||||||
|
/* SHGetDesktopFolder should also give us the same pointer */
|
||||||
|
hr = SHGetDesktopFolder(&psf);
|
||||||
|
ok(hr == S_OK, "hr = %lx\n", hr);
|
||||||
|
ok(psf == static_cast<IShellFolder *>(psf2), "Expected %p == %p\n", static_cast<PVOID>(psf), static_cast<PVOID>(psf2));
|
||||||
|
|
||||||
|
TestShellFolder(psf2);
|
||||||
|
}
|
|
@ -3,11 +3,12 @@
|
||||||
#define STANDALONE
|
#define STANDALONE
|
||||||
#include <wine/test.h>
|
#include <wine/test.h>
|
||||||
|
|
||||||
|
extern void func_CShellDesktop(void);
|
||||||
extern void func_menu(void);
|
extern void func_menu(void);
|
||||||
|
|
||||||
const struct test winetest_testlist[] =
|
const struct test winetest_testlist[] =
|
||||||
{
|
{
|
||||||
|
{ "CShellDesktop", func_CShellDesktop },
|
||||||
{ "menu", func_menu },
|
{ "menu", func_menu },
|
||||||
|
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue