Reactos
at master 110 lines 3.5 kB view raw
1/* 2 * PROJECT: ReactOS api tests 3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory 4 * PURPOSE: Test for CMyComputer 5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org> 6 */ 7 8#include "shelltest.h" 9 10#define NDEBUG 11#include <debug.h> 12#include <stdio.h> 13#include <shellutils.h> 14 15#define INVALID_POINTER ((PVOID)(ULONG_PTR)0xdeadbeefdeadbeefULL) 16 17static 18VOID 19TestShellFolder( 20 _In_ IShellFolder2 *psf2) 21{ 22 HRESULT hr; 23 CComPtr<IDropTarget> pdt; 24 CComPtr<IDropTarget> pdt_2; 25 CComPtr<IContextMenu> pcm; 26 CComPtr<IContextMenu> pcm_2; 27 CComPtr<IShellView> psv; 28 CComPtr<IShellView> psv_2; 29 30 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget, &pdt)); 31 ok(hr == S_OK, "hr = %lx\n", hr); 32 33 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget, &pdt_2)); 34 ok(hr == S_OK, "hr = %lx\n", hr); 35 ok(pdt != pdt_2, "Expected %p != %p\n", static_cast<PVOID>(pdt), static_cast<PVOID>(pdt_2)); 36 37 if (GetNTVersion() < _WIN32_WINNT_WIN10) 38 { 39 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &pcm)); 40 ok(hr == S_OK, "hr = %lx\n", hr); 41 42 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &pcm_2)); 43 ok(hr == S_OK, "hr = %lx\n", hr); 44 ok(pcm != pcm_2, "Expected %p != %p\n", static_cast<PVOID>(pcm), static_cast<PVOID>(pcm_2)); 45 46 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IShellView, &psv)); 47 ok(hr == S_OK, "hr = %lx\n", hr); 48 49 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IShellView, &psv_2)); 50 ok(hr == S_OK, "hr = %lx\n", hr); 51 ok(psv != psv_2, "Expected %p != %p\n", static_cast<PVOID>(psv), static_cast<PVOID>(psv_2)); 52 } 53} 54 55VOID TestInitialize(_In_ IShellFolder2 *psf2) 56{ 57 CComPtr<IPersistFolder2> ppf2; 58 HRESULT hr = psf2->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2)); 59 ok(hr == S_OK, "hr = %lx\n", hr); 60 61 if (GetNTVersion() < _WIN32_WINNT_WIN10) 62 { 63 hr = ppf2->Initialize(NULL); 64 ok(hr == S_OK, "hr = %lx\n", hr); 65 66 hr = ppf2->Initialize((LPCITEMIDLIST)INVALID_POINTER); 67 ok(hr == S_OK, "hr = %lx\n", hr); 68 69 CComHeapPtr<ITEMIDLIST> pidl; 70 hr = ppf2->GetCurFolder(&pidl); 71 ok(hr == S_OK, "hr = %lx\n", hr); 72 // 0 in early win10, 14 in xp; crashes on late win10 73 ok(pidl->mkid.cb == 0x14, "expected empty pidl got cb = %x\n", pidl->mkid.cb); 74 } 75} 76 77START_TEST(CMyComputer) 78{ 79 HRESULT hr; 80 CComPtr<IShellFolder2> psf2; 81 CComPtr<IShellFolder2> psf2_2; 82 CComPtr<IShellFolder> psf; 83 84 CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); 85 86 hr = CoCreateInstance(CLSID_MyComputer, 87 NULL, 88 CLSCTX_INPROC_SERVER, 89 IID_PPV_ARG(IShellFolder2, &psf2)); 90 ok(hr == S_OK, "hr = %lx\n", hr); 91 if (FAILED(hr)) 92 { 93 skip("Could not instantiate CShellDesktop\n"); 94 return; 95 } 96 97 if (GetNTVersion() < _WIN32_WINNT_VISTA) 98 { 99 /* NT5.x returns a pointer to the same object but not NT6.x and newer. */ 100 hr = CoCreateInstance(CLSID_MyComputer, 101 NULL, 102 CLSCTX_INPROC_SERVER, 103 IID_PPV_ARG(IShellFolder2, &psf2_2)); 104 ok(hr == S_OK, "hr = %lx\n", hr); 105 ok(psf2 == psf2_2, "Expected %p == %p\n", static_cast<PVOID>(psf2), static_cast<PVOID>(psf2_2)); 106 } 107 108 TestShellFolder(psf2); 109 TestInitialize(psf2); 110}