ReactOS 0.4.16-dev-927-g467dec4
ShellInfo.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS API tests
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Test for SHGetFileInfo
5 * COPYRIGHT: Copyright 2024 Whindmar Saksit <whindsaks@proton.me>
6 */
7
8#include "shelltest.h"
9#include <shellutils.h>
10
11#define UNIQUEEXT L"ABC123XYZ"
12#define my_ok_all_flags(val, flags) ok_eq_hex((val) & (flags), (flags))
13
15{
16 return SHGetFileInfoW(Path, Attributes, &Info, sizeof(Info), Flags);
17}
18
20{
21 return SHGFI((PCWSTR)Pidl, Info, Flags | SHGFI_PIDL, Attributes);
22}
23
25{
26 CCoInit ComInit;
27 LPITEMIDLIST pidl;
29 UINT flags;
31
37 ok_int(SHGFI(UNIQUEEXT, info, SHGFI_USEFILEATTRIBUTES), TRUE); // Success when asking for no info
39 ok_int(SHGFI(UNIQUEEXT, info, SHGFI_EXETYPE | SHGFI_USEFILEATTRIBUTES), TRUE); // Invalid combination, returns TRUE!
40
42 ok_int(LOWORD(SHGFI(buf, info, SHGFI_EXETYPE)), 0x4550); // 'PE'
43
45 ZeroMemory(&info, sizeof(info));
46 info.dwAttributes = ~SFGAO_VALIDATE;
48 ok_ptr(StrStrIW(info.szTypeName, UNIQUEEXT), NULL); // A file without extension (not "EXT File")
49 my_ok_all_flags(info.dwAttributes, SFGAO_FILESYSTEM | SFGAO_STREAM);
50
51 ZeroMemory(&info, sizeof(info));
52 info.dwAttributes = ~SFGAO_VALIDATE;
54 ok_ptr(StrStrIW(info.szTypeName, UNIQUEEXT), NULL); // A directory (not "EXT File")
55 my_ok_all_flags(info.dwAttributes, SFGAO_FILESYSTEM | SFGAO_FOLDER);
56
57 ZeroMemory(&info, sizeof(info));
58 info.dwAttributes = ~SFGAO_VALIDATE;
60 ok_bool_true(StrStrIW(info.szTypeName, UNIQUEEXT) != NULL, ".ext is treated as extension");
61 my_ok_all_flags(info.dwAttributes, SFGAO_FILESYSTEM | SFGAO_STREAM);
62
63 info.dwAttributes = ~SFGAO_VALIDATE;
64 ok_int(SHGFI(L"c:", info, flags | SHGFI_ATTR_SPECIFIED), TRUE); // ROS fails this, a parsing bug in CDrivesFolder?
65 my_ok_all_flags(info.dwAttributes, SFGAO_FILESYSTEM | SFGAO_FILESYSANCESTOR);
66
67 info.dwAttributes = ~SFGAO_VALIDATE;
69 my_ok_all_flags(info.dwAttributes, SFGAO_FILESYSTEM | SFGAO_FILESYSANCESTOR);
70
71 pidl = SHSimpleIDListFromPath(L"c:\\foo");
72 info.iIcon = -1;
74 ok_int(info.iIcon != -1, TRUE);
75 ILFree(pidl);
76}
PRTL_UNICODE_STRING_BUFFER Path
#define UNIQUEEXT
Definition: ShellInfo.cpp:11
#define my_ok_all_flags(val, flags)
Definition: ShellInfo.cpp:12
static DWORD_PTR SHGFI(PCWSTR Path, SHFILEINFOW &Info, UINT Flags, UINT Attributes=0)
Definition: ShellInfo.cpp:14
#define ok_bool_true(value, desc)
Definition: apitest.h:59
#define START_TEST(x)
Definition: atltest.h:75
#define ok_int(expression, result)
Definition: atltest.h:134
#define ok_ptr(expression, result)
Definition: atltest.h:108
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
Definition: string.c:380
#define MAX_PATH
Definition: compat.h:34
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLbitfield flags
Definition: glext.h:7161
unsigned int UINT
Definition: ndis.h:50
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:430
#define SHGFI_ATTR_SPECIFIED
Definition: shellapi.h:175
#define SHGetFileInfo
Definition: shellapi.h:720
#define SHGFI_SYSICONINDEX
Definition: shellapi.h:172
#define SHGFI_ICONLOCATION
Definition: shellapi.h:170
#define SHGFI_DISPLAYNAME
Definition: shellapi.h:167
#define SHGFI_TYPENAME
Definition: shellapi.h:168
#define SHGFI_USEFILEATTRIBUTES
Definition: shellapi.h:182
#define SHGFI_ATTRIBUTES
Definition: shellapi.h:169
#define SHGFI_PIDL
Definition: shellapi.h:181
#define SHGFI_EXETYPE
Definition: shellapi.h:171
PIDLIST_ABSOLUTE WINAPI SHSimpleIDListFromPath(PCWSTR)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define _countof(array)
Definition: sndvol32.h:70
COM Initialisation.
Definition: shellclasses.h:179
const uint16_t * PCWSTR
Definition: typedefs.h:57
uint32_t DWORD_PTR
Definition: typedefs.h:65
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
#define ZeroMemory
Definition: winbase.h:1743
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
__wchar_t WCHAR
Definition: xmlstorage.h:180