mirror of
https://github.com/reactos/reactos.git
synced 2025-07-27 19:32:10 +00:00
[SHELL32_APITEST] Fix control panel printers PIDL test (#8022)
This commit is contained in:
parent
57981ed025
commit
6bd0ffc494
1 changed files with 41 additions and 1 deletions
|
@ -13,6 +13,8 @@ enum {
|
||||||
DIRBIT = 1, FILEBIT = 2,
|
DIRBIT = 1, FILEBIT = 2,
|
||||||
PT_COMPUTER_REGITEM = 0x2E,
|
PT_COMPUTER_REGITEM = 0x2E,
|
||||||
PT_INTERNET_URL = 0x61,
|
PT_INTERNET_URL = 0x61,
|
||||||
|
PT_CONTROLS_OLDREGITEM = 0x70,
|
||||||
|
PT_CONTROLS_NEWREGITEM = 0x71,
|
||||||
};
|
};
|
||||||
|
|
||||||
static BYTE GetPIDLType(LPCITEMIDLIST pidl)
|
static BYTE GetPIDLType(LPCITEMIDLIST pidl)
|
||||||
|
@ -49,6 +51,13 @@ static int FileStruct_Att(LPCITEMIDLIST pidl)
|
||||||
return p ? p->att : (UINT(1) << 31);
|
return p ? p->att : (UINT(1) << 31);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT ParseDisplayName(PWSTR pszPath, LPITEMIDLIST *ppidl, IBindCtx *pBC = NULL)
|
||||||
|
{
|
||||||
|
CComPtr<IShellFolder> pSF;
|
||||||
|
HRESULT hr = SHGetDesktopFolder(&pSF);
|
||||||
|
return FAILED(hr) ? hr : pSF->ParseDisplayName(NULL, pBC, pszPath, NULL, ppidl, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT GetDisplayNameOf(IShellFolder *pSF, LPCITEMIDLIST pidl, UINT Flags, PWSTR Buf, UINT Cap)
|
static HRESULT GetDisplayNameOf(IShellFolder *pSF, LPCITEMIDLIST pidl, UINT Flags, PWSTR Buf, UINT Cap)
|
||||||
{
|
{
|
||||||
STRRET sr;
|
STRRET sr;
|
||||||
|
@ -58,6 +67,14 @@ static HRESULT GetDisplayNameOf(IShellFolder *pSF, LPCITEMIDLIST pidl, UINT Flag
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT GetDisplayNameOf(PCIDLIST_ABSOLUTE pidl, UINT Flags, PWSTR Buf, UINT Cap)
|
||||||
|
{
|
||||||
|
CComPtr<IShellFolder> pSF;
|
||||||
|
PCUITEMID_CHILD pidlChild;
|
||||||
|
HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &pSF), &pidlChild);
|
||||||
|
return FAILED(hr) ? hr : GetDisplayNameOf(pSF, pidlChild, Flags, Buf, Cap);
|
||||||
|
}
|
||||||
|
|
||||||
#define TEST_CLSID(pidl, type, offset, clsid) \
|
#define TEST_CLSID(pidl, type, offset, clsid) \
|
||||||
do { \
|
do { \
|
||||||
ok_long(GetPIDLType(pidl), (type)); \
|
ok_long(GetPIDLType(pidl), (type)); \
|
||||||
|
@ -217,9 +234,32 @@ START_TEST(PIDL)
|
||||||
|
|
||||||
pidl = SHCloneSpecialIDList(NULL, CSIDL_PRINTERS, FALSE);
|
pidl = SHCloneSpecialIDList(NULL, CSIDL_PRINTERS, FALSE);
|
||||||
if (pidl)
|
if (pidl)
|
||||||
TEST_CLSID(ILFindLastID(pidl), 0x71, 14, CLSID_Printers);
|
{
|
||||||
|
// Accept both the old and new format from the special folder API (NT5 vs NT6)
|
||||||
|
LPITEMIDLIST pidlLeaf = ILFindLastID(pidl);
|
||||||
|
if (LOBYTE(GetVersion()) < 6)
|
||||||
|
TEST_CLSID(pidlLeaf, PT_CONTROLS_OLDREGITEM, 4, CLSID_Printers);
|
||||||
else
|
else
|
||||||
|
TEST_CLSID(pidlLeaf, PT_CONTROLS_NEWREGITEM, 14, CLSID_Printers);
|
||||||
|
|
||||||
|
// The Control Panel should always return the new format when parsing
|
||||||
|
LPITEMIDLIST pidl2;
|
||||||
|
WCHAR szParse[MAX_PATH];
|
||||||
|
if (SUCCEEDED(GetDisplayNameOf(pidl, SHGDN_FORPARSING, szParse, _countof(szParse))) &&
|
||||||
|
SUCCEEDED(ParseDisplayName(szParse, &pidl2)))
|
||||||
|
{
|
||||||
|
TEST_CLSID(ILFindLastID(pidl2), PT_CONTROLS_NEWREGITEM, 14, CLSID_Printers);
|
||||||
|
ILFree(pidl2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
skip("Failed to parse in Control Panel\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
skip("?\n");
|
skip("?\n");
|
||||||
|
}
|
||||||
ILFree(pidl);
|
ILFree(pidl);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue