Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197/* * PROJECT: ReactOS api tests * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory * PURPOSE: Test for CMyComputer * PROGRAMMER: Giannis Adamopoulos */
#include "shelltest.h"
#define NDEBUG#include <debug.h>#include <stdio.h>#include <shellutils.h>#include <versionhelpers.h>
LPITEMIDLIST _CreateDummyPidl(){ /* Create a tiny pidl with no contents */ LPITEMIDLIST testpidl = (LPITEMIDLIST)SHAlloc(3 * sizeof(WORD)); testpidl->mkid.cb = 2 * sizeof(WORD); *(WORD*)((char*)testpidl + (int)(2 * sizeof(WORD))) = 0;
return testpidl;}
VOID TestUninitialized(){ CComPtr<IShellFolder> psf; CComPtr<IEnumIDList> penum; CComPtr<IDropTarget> pdt; CComPtr<IContextMenu> pcm; CComPtr<IShellView> psv; LPITEMIDLIST retrievedPidl; ULONG pceltFetched; HRESULT hr;
/* Create a CFSFolder */ hr = CoCreateInstance(CLSID_ShellFSFolder, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IShellFolder, &psf)); ok(hr == S_OK, "hr = %lx\n", hr);
/* An uninitialized CFSFolder doesn't contain any items */ hr = psf->EnumObjects(NULL, 0, &penum); ok(hr == S_OK, "hr = %lx\n", hr); hr = penum->Next(0, &retrievedPidl, &pceltFetched); ok(hr == S_FALSE, "hr = %lx\n", hr); hr = penum->Next(1, &retrievedPidl, &pceltFetched); ok(hr == S_FALSE, "hr = %lx\n", hr);
/* It supports viewing */ hr = psf->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget, &pdt)); ok(hr == S_OK, "hr = %lx\n", hr); hr = psf->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &pcm)); ok(hr == S_OK, "hr = %lx\n", hr); hr = psf->CreateViewObject(NULL, IID_PPV_ARG(IShellView, &psv)); ok(hr == S_OK, "hr = %lx\n", hr);
/* And its display name is ... "C:\Documents and Settings\<username>\Desktop" */ STRRET strretName; hr = psf->GetDisplayNameOf(NULL,SHGDN_FORPARSING,&strretName); ok(hr == S_OK, "hr = %lx\n", hr); ok(strretName.uType == STRRET_WSTR, "strretName.uType == %x\n", strretName.uType); ok((wcsncmp(strretName.pOleStr, L"C:\\Documents and Settings\\", 26) == 0) || (wcsncmp(strretName.pOleStr, L"C:\\Users\\", 9) == 0), "wrong name, got: %S\n", strretName.pOleStr); ok(wcscmp(strretName.pOleStr + wcslen(strretName.pOleStr) - 8, L"\\Desktop") == NULL, "wrong name, got: %S\n", strretName.pOleStr);
hr = psf->GetDisplayNameOf(NULL,SHGDN_FORPARSING|SHGDN_INFOLDER,&strretName); ok(hr == E_INVALIDARG, "hr = %lx\n", hr);
/* Use Initialize method with a dummy pidl and test the still non initialized CFSFolder */ CComPtr<IPersistFolder2> ppf2; hr = psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2)); ok(hr == S_OK, "hr = %lx\n", hr);
LPITEMIDLIST testpidl = _CreateDummyPidl();
hr = ppf2->Initialize(testpidl); ok(hr == S_OK, "hr = %lx\n", hr);
CComHeapPtr<ITEMIDLIST> pidl; hr = ppf2->GetCurFolder(&pidl); ok(hr == S_OK, "hr = %lx\n", hr); ok(pidl->mkid.cb == 2 * sizeof(WORD), "got wrong pidl size, cb = %x\n", pidl->mkid.cb);
/* methods that worked before, now fail */ hr = psf->GetDisplayNameOf(NULL,SHGDN_FORPARSING,&strretName); ok(hr == E_INVALIDARG || hr == E_FAIL, "hr = %lx\n", hr); hr = psf->EnumObjects(NULL, 0, &penum); ok(hr == E_INVALIDARG || hr == HRESULT_FROM_WIN32(ERROR_CANCELLED), "hr = %lx\n", hr);
/* The following continue to work though */ hr = psf->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget, &pdt)); ok(hr == S_OK, "hr = %lx\n", hr); hr = psf->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &pcm)); ok(hr == S_OK, "hr = %lx\n", hr); hr = psf->CreateViewObject(NULL, IID_PPV_ARG(IShellView, &psv)); ok(hr == S_OK, "hr = %lx\n", hr);
}
VOID TestInitialize(){ HRESULT hr; STRRET strretName;
/* Create a CFSFolder */ CComPtr<IShellFolder> psf; hr = CoCreateInstance(CLSID_ShellFSFolder, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IShellFolder, &psf)); ok(hr == S_OK, "hr = %lx\n", hr);
CComPtr<IPersistFolder3> ppf3; hr = psf->QueryInterface(IID_PPV_ARG(IPersistFolder3, &ppf3)); ok(hr == S_OK, "hr = %lx\n", hr);
LPITEMIDLIST testpidl = _CreateDummyPidl(); PERSIST_FOLDER_TARGET_INFO pfti = {0}; PERSIST_FOLDER_TARGET_INFO queriedPfti; hr = ppf3->InitializeEx(NULL, NULL, NULL); ok(hr == E_INVALIDARG || // Vista+ hr == E_OUTOFMEMORY, // Win2k3 "hr = %lx\n", hr);
hr = ppf3->InitializeEx(NULL, NULL, &pfti); ok(hr == E_INVALIDARG || // Vista+ hr == E_OUTOFMEMORY, // Win2k3 "hr = %lx\n", hr);
wcscpy(pfti.szTargetParsingName, L"C:\\"); hr = ppf3->InitializeEx(NULL, NULL, &pfti); ok(hr == E_INVALIDARG || // Vista+ hr == E_OUTOFMEMORY, // Win2k3 "hr = %lx\n", hr);
hr = ppf3->InitializeEx(NULL, testpidl, NULL); ok(hr == S_OK, "hr = %lx\n", hr);
hr = ppf3->GetFolderTargetInfo(&queriedPfti); ok(hr == E_FAIL || // Win7+ hr == S_OK, // Win2k3-Vista "hr = %lx\n", hr);
hr = psf->GetDisplayNameOf(NULL,SHGDN_FORPARSING,&strretName); ok(hr == E_INVALIDARG || hr == E_FAIL, "hr = %lx\n", hr);
pfti.szTargetParsingName[0] = 0; hr = ppf3->InitializeEx(NULL, testpidl, &pfti); ok(hr == S_OK, "hr = %lx\n", hr);
hr = ppf3->GetFolderTargetInfo(&queriedPfti); ok(hr == S_OK, "hr = %lx\n", hr); ok(wcscmp(queriedPfti.szTargetParsingName, L"") == 0, "wrong name, got: %S\n", queriedPfti.szTargetParsingName);
hr = psf->GetDisplayNameOf(NULL,SHGDN_FORPARSING,&strretName); ok(hr == E_INVALIDARG || hr == E_FAIL, "hr = %lx\n", hr);
wcscpy(pfti.szTargetParsingName, L"C:\\"); hr = ppf3->InitializeEx(NULL, testpidl, &pfti); ok(hr == S_OK, "hr = %lx\n", hr);
hr = ppf3->GetFolderTargetInfo(&queriedPfti); ok(hr == S_OK, "hr = %lx\n", hr); ok(wcscmp(queriedPfti.szTargetParsingName, L"C:\\") == 0, "wrong name, got: %S\n", queriedPfti.szTargetParsingName);
hr = psf->GetDisplayNameOf(NULL,SHGDN_FORPARSING,&strretName); ok(hr == S_OK, "hr = %lx\n", hr); ok(strretName.uType == STRRET_WSTR, "strretName.uType == %x\n", strretName.uType); ok(wcscmp(strretName.pOleStr, L"C:\\") == 0, "wrong name, got: %S\n", strretName.pOleStr);}
VOID TestGetUIObjectOf(){ HRESULT hr;
/* Create a CFSFolder */ CComPtr<IShellFolder> psf; hr = CoCreateInstance(CLSID_ShellFSFolder, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IShellFolder, &psf)); ok(hr == S_OK, "hr = %lx\n", hr);
/* test 0 cidl for IDataObject */ CComPtr<IDataObject> pdo; hr = psf->GetUIObjectOf(NULL, 0, NULL, IID_NULL_PPV_ARG(IDataObject, &pdo)); ok(hr == E_INVALIDARG, "hr = %lx\n", hr);}
START_TEST(CFSFolder){ CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
TestUninitialized(); TestInitialize(); TestGetUIObjectOf();}