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 17 static 18 VOID 19 TestShellFolder( 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 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &pcm)); 38 ok(hr == S_OK, "hr = %lx\n", hr); 39 40 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &pcm_2)); 41 ok(hr == S_OK, "hr = %lx\n", hr); 42 ok(pcm != pcm_2, "Expected %p != %p\n", static_cast<PVOID>(pcm), static_cast<PVOID>(pcm_2)); 43 44 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IShellView, &psv)); 45 ok(hr == S_OK, "hr = %lx\n", hr); 46 47 hr = psf2->CreateViewObject(NULL, IID_PPV_ARG(IShellView, &psv_2)); 48 ok(hr == S_OK, "hr = %lx\n", hr); 49 ok(psv != psv_2, "Expected %p != %p\n", static_cast<PVOID>(psv), static_cast<PVOID>(psv_2)); 50 } 51 52 VOID TestInitialize(_In_ IShellFolder2 *psf2) 53 { 54 CComPtr<IPersistFolder2> ppf2; 55 HRESULT hr = psf2->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2)); 56 ok(hr == S_OK, "hr = %lx\n", hr); 57 58 hr = ppf2->Initialize(NULL); 59 ok(hr == S_OK, "hr = %lx\n", hr); 60 61 hr = ppf2->Initialize((LPCITEMIDLIST)INVALID_POINTER); 62 ok(hr == S_OK, "hr = %lx\n", hr); 63 64 //crashes in xp 65 //hr = ppf2->GetCurFolder(NULL); 66 //ok(hr == E_INVALIDARG, "hr = %lx\n", hr); 67 68 CComHeapPtr<ITEMIDLIST> pidl; 69 hr = ppf2->GetCurFolder(&pidl); 70 ok(hr == S_OK, "hr = %lx\n", hr); 71 // 0 in win10, 14 in xp 72 ok(pidl->mkid.cb == 0x14, "expected empty pidl got cb = %x\n", pidl->mkid.cb); 73 } 74 75 START_TEST(CMyComputer) 76 { 77 HRESULT hr; 78 CComPtr<IShellFolder2> psf2; 79 CComPtr<IShellFolder2> psf2_2; 80 CComPtr<IShellFolder> psf; 81 82 CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); 83 84 hr = CoCreateInstance(CLSID_MyComputer, 85 NULL, 86 CLSCTX_INPROC_SERVER, 87 IID_PPV_ARG(IShellFolder2, &psf2)); 88 ok(hr == S_OK, "hr = %lx\n", hr); 89 if (FAILED(hr)) 90 { 91 skip("Could not instantiate CShellDesktop\n"); 92 return; 93 } 94 95 /* second create should give us a pointer to the same object */ 96 hr = CoCreateInstance(CLSID_MyComputer, 97 NULL, 98 CLSCTX_INPROC_SERVER, 99 IID_PPV_ARG(IShellFolder2, &psf2_2)); 100 ok(hr == S_OK, "hr = %lx\n", hr); 101 ok(psf2 == psf2_2, "Expected %p == %p\n", static_cast<PVOID>(psf2), static_cast<PVOID>(psf2_2)); 102 103 TestShellFolder(psf2); 104 TestInitialize(psf2); 105 } 106