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/CMakeLis…
==============================================================================
--- 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/CShellDe…
==============================================================================
--- 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(a)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 }
};