2 * Tests for recycle bin functions
4 * Copyright 2011 Jay Yang
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.
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.
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
21 #define WIN32_LEAN_AND_MEAN
26 #include "wine/test.h"
28 static int (WINAPI
*pSHQueryRecycleBinA
)(LPCSTR
,LPSHQUERYRBINFO
);
29 static int (WINAPI
*pSHFileOperationA
)(LPSHFILEOPSTRUCTA
);
31 static char int64_buffer
[65];
32 /* Note: This function uses a single buffer for the return value.*/
33 static const char* str_from_int64(__int64 ll
)
36 if (sizeof(ll
) > sizeof(unsigned long) && ll
>> 32)
37 sprintf(int64_buffer
,"%lx%08lx",(unsigned long)(ll
>> 32),(unsigned long)ll
);
39 sprintf(int64_buffer
,"%lx",(unsigned long)ll
);
43 static void setup_pointers(void)
45 HMODULE hshell32
= GetModuleHandleA("shell32.dll");
46 pSHQueryRecycleBinA
= (void*)GetProcAddress(hshell32
, "SHQueryRecycleBinA");
47 pSHFileOperationA
= (void*)GetProcAddress(hshell32
, "SHFileOperationA");
50 static void test_query_recyclebin(void)
52 SHQUERYRBINFO info1
={sizeof(info1
),0xdeadbeef,0xdeadbeef};
53 SHQUERYRBINFO info2
={sizeof(info2
),0xdeadbeef,0xdeadbeef};
58 CHAR temp_path
[MAX_PATH
-14], buf
[MAX_PATH
+1];
59 if(!pSHQueryRecycleBinA
)
61 skip("SHQueryRecycleBinA does not exist\n");
64 if(!pSHFileOperationA
)
66 skip("SHFileOperationA does not exist\n");
69 ok(GetTempPathA(sizeof(temp_path
), temp_path
), "GetTempPath failed\n");
70 ok(GetTempFileNameA(temp_path
, "trash", 0, buf
), "GetTempFileName failed\n");
71 buf
[strlen(buf
) + 1] = '\0';
72 hr
= pSHQueryRecycleBinA(buf
,&info1
);
73 ok(hr
== S_OK
, "SHQueryRecycleBinA failed with error 0x%x\n", hr
);
74 ok(info1
.i64Size
!=0xdeadbeef,"i64Size not set\n");
75 ok(info1
.i64NumItems
!=0xdeadbeef,"i64NumItems not set\n");
76 /*create and send a file to the recycle bin*/
77 file
= CreateFileA(buf
,GENERIC_WRITE
,0,NULL
,CREATE_ALWAYS
,0,NULL
);
78 ok(file
!= INVALID_HANDLE_VALUE
, "Failure to open file %s\n",buf
);
79 WriteFile(file
,buf
,strlen(buf
),&written
,NULL
);
82 shfo
.wFunc
= FO_DELETE
;
85 shfo
.fFlags
= FOF_FILESONLY
| FOF_NOCONFIRMATION
| FOF_SILENT
| FOF_ALLOWUNDO
;
86 shfo
.hNameMappings
= NULL
;
87 shfo
.lpszProgressTitle
= NULL
;
88 ok(!pSHFileOperationA(&shfo
), "Deletion was not successful\n");
89 hr
= pSHQueryRecycleBinA(buf
,&info2
);
90 ok(hr
== S_OK
, "SHQueryRecycleBinA failed with error 0x%x\n", hr
);
91 ok(info2
.i64Size
==info1
.i64Size
+written
,"Expected recycle bin to have 0x%s bytes\n",str_from_int64(info1
.i64Size
+written
));
92 ok(info2
.i64NumItems
==info1
.i64NumItems
+1,"Expected recycle bin to have 0x%s items\n",str_from_int64(info1
.i64NumItems
+1));
96 START_TEST(recyclebin
)
99 test_query_recyclebin();