Author: tfaber Date: Sat Jun 20 09:07:29 2015 New Revision: 68200
URL: http://svn.reactos.org/svn/reactos?rev=68200&view=rev Log: [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
Added: trunk/rostests/apitests/shell32/CShellDesktop.cpp (with props) Modified: trunk/rostests/apitests/shell32/CMakeLists.txt trunk/rostests/apitests/shell32/testlist.c
Modified: trunk/rostests/apitests/shell32/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/shell32/CMakeList... ============================================================================== --- trunk/rostests/apitests/shell32/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/apitests/shell32/CMakeLists.txt [iso-8859-1] Sat Jun 20 09:07:29 2015 @@ -1,7 +1,13 @@
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) 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)
Added: trunk/rostests/apitests/shell32/CShellDesktop.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/shell32/CShellDes... ============================================================================== --- trunk/rostests/apitests/shell32/CShellDesktop.cpp (added) +++ trunk/rostests/apitests/shell32/CShellDesktop.cpp [iso-8859-1] Sat Jun 20 09:07:29 2015 @@ -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); +}
Propchange: trunk/rostests/apitests/shell32/CShellDesktop.cpp ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/rostests/apitests/shell32/testlist.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/shell32/testlist.... ============================================================================== --- trunk/rostests/apitests/shell32/testlist.c [iso-8859-1] (original) +++ trunk/rostests/apitests/shell32/testlist.c [iso-8859-1] Sat Jun 20 09:07:29 2015 @@ -3,11 +3,12 @@ #define STANDALONE #include <wine/test.h>
+extern void func_CShellDesktop(void); extern void func_menu(void);
const struct test winetest_testlist[] = { + { "CShellDesktop", func_CShellDesktop }, { "menu", func_menu }, - { 0, 0 } };