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/CMakeLists.txt?rev=68200&r1=68199&r2=68200&view=diff
==============================================================================
--- 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/CShellDesktop.cpp?rev=68200
==============================================================================
--- 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 <[email protected]>
+ */
+
+#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.c?rev=68200&r1=68199&r2=68200&view=diff
==============================================================================
--- 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 }
 };


Reply via email to