1 /* 2 * Tests for recycle bin functions 3 * 4 * Copyright 2011 Jay Yang 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 19 */ 20 21 #define WIN32_LEAN_AND_MEAN 22 #include <windows.h> 23 #include "shellapi.h" 24 25 #include <stdio.h> 26 #include "wine/test.h" 27 28 static int (WINAPI *pSHQueryRecycleBinA)(LPCSTR,LPSHQUERYRBINFO); 29 static int (WINAPI *pSHFileOperationA)(LPSHFILEOPSTRUCTA); 30 31 static void setup_pointers(void) 32 { 33 HMODULE hshell32 = GetModuleHandleA("shell32.dll"); 34 pSHQueryRecycleBinA = (void*)GetProcAddress(hshell32, "SHQueryRecycleBinA"); 35 pSHFileOperationA = (void*)GetProcAddress(hshell32, "SHFileOperationA"); 36 } 37 38 static void test_query_recyclebin(void) 39 { 40 SHQUERYRBINFO info1={sizeof(info1),0xdeadbeef,0xdeadbeef}; 41 SHQUERYRBINFO info2={sizeof(info2),0xdeadbeef,0xdeadbeef}; 42 UINT written; 43 HRESULT hr; 44 HANDLE file; 45 SHFILEOPSTRUCTA shfo; 46 CHAR temp_path[MAX_PATH-14], buf[MAX_PATH+1]; 47 if(!pSHQueryRecycleBinA) 48 { 49 skip("SHQueryRecycleBinA does not exist\n"); 50 return; 51 } 52 if(!pSHFileOperationA) 53 { 54 skip("SHFileOperationA does not exist\n"); 55 return; 56 } 57 ok(GetTempPathA(sizeof(temp_path), temp_path), "GetTempPath failed\n"); 58 ok(GetTempFileNameA(temp_path, "trash", 0, buf), "GetTempFileName failed\n"); 59 buf[strlen(buf) + 1] = '\0'; 60 hr = pSHQueryRecycleBinA(buf,&info1); 61 ok(hr == S_OK, "SHQueryRecycleBinA failed with error 0x%x\n", hr); 62 ok(info1.i64Size!=0xdeadbeef,"i64Size not set\n"); 63 ok(info1.i64NumItems!=0xdeadbeef,"i64NumItems not set\n"); 64 /*create and send a file to the recycle bin*/ 65 file = CreateFileA(buf,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL); 66 ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n",buf); 67 WriteFile(file,buf,strlen(buf),&written,NULL); 68 CloseHandle(file); 69 shfo.hwnd = NULL; 70 shfo.wFunc = FO_DELETE; 71 shfo.pFrom = buf; 72 shfo.pTo = NULL; 73 shfo.fFlags = FOF_FILESONLY | FOF_NOCONFIRMATION | FOF_SILENT | FOF_ALLOWUNDO; 74 shfo.hNameMappings = NULL; 75 shfo.lpszProgressTitle = NULL; 76 ok(!pSHFileOperationA(&shfo), "Deletion was not successful\n"); 77 hr = pSHQueryRecycleBinA(buf,&info2); 78 ok(hr == S_OK, "SHQueryRecycleBinA failed with error 0x%x\n", hr); 79 ok(info2.i64Size==info1.i64Size+written,"Expected recycle bin to have 0x%s bytes\n",wine_dbgstr_longlong(info1.i64Size+written)); 80 ok(info2.i64NumItems==info1.i64NumItems+1,"Expected recycle bin to have 0x%s items\n",wine_dbgstr_longlong(info1.i64NumItems+1)); 81 } 82 83 84 START_TEST(recyclebin) 85 { 86 setup_pointers(); 87 test_query_recyclebin(); 88 } 89