https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a105b5d355facb69042dc…
commit a105b5d355facb69042dc525c8b3b701fd62182c
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Tue Apr 6 09:02:53 2021 +0900
Commit: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
CommitDate: Tue Apr 6 09:02:53 2021 +0900
[FONTEXT_APITEST] Follow-up of #3585 (deb928c)
Strengthen GetDisplayNameOf testcase. CORE-9281, CORE-16444
---
.../rostests/apitests/fontext/GetDisplayNameOf.cpp | 97 +++++++++++++++++-----
1 file changed, 74 insertions(+), 23 deletions(-)
diff --git a/modules/rostests/apitests/fontext/GetDisplayNameOf.cpp
b/modules/rostests/apitests/fontext/GetDisplayNameOf.cpp
index a0c164d6683..ac0c7abb425 100644
--- a/modules/rostests/apitests/fontext/GetDisplayNameOf.cpp
+++ b/modules/rostests/apitests/fontext/GetDisplayNameOf.cpp
@@ -3,6 +3,7 @@
* LICENSE: GPL-2.0-or-later (
https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Tests for fontext GetDisplayNameOf behavior
* COPYRIGHT: Copyright 2021 Mark Jansen <mark.jansen(a)reactos.org>
+ * Copyright 2021 Katayama Hirofumi MZ
<katayama.hirofumi.mz(a)gmail.com>
*/
#include <ntstatus.h>
@@ -15,6 +16,7 @@
#include <shlobj.h>
#include <shlwapi.h>
#include <shellutils.h>
+#include <versionhelpers.h>
#include "wine/test.h"
static HRESULT Initialize(CComPtr<IShellFolder>& spFolder)
@@ -39,45 +41,68 @@ static HRESULT Initialize(CComPtr<IShellFolder>& spFolder)
hr = desktopFolder->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder,
&spFolder));
ok_hex(hr, S_OK);
+ if (FAILED(hr))
+ {
+ skip("BindToObject failed\n");
+ return hr;
+ }
+
return hr;
}
-static void Test_GetDisplayNameOf(CComPtr<IShellFolder>& spFolder)
+static void
+Test_GetDisplayNameOf(CComPtr<IShellFolder>& spFolder,
+ DWORD dwFlags, LPCWSTR text, BOOL fRelative)
{
CComPtr<IEnumIDList> fontsEnum;
HRESULT hr = spFolder->EnumObjects(NULL, SHCONTF_NONFOLDERS, &fontsEnum);
-
ok_hex(hr, S_OK);
if (FAILED(hr))
+ {
+ skip("EnumObjects failed\n");
return;
+ }
- CComHeapPtr<ITEMIDLIST> fontPidl;
- ULONG fetched = 0;
- hr = fontsEnum->Next(1, &fontPidl, &fetched);
- STRRET strret;
- hr = spFolder->GetDisplayNameOf(fontPidl, SHGDN_FORPARSING, &strret);
- ok_hex(hr, S_OK);
- if (FAILED(hr))
- return;
+ BOOL bFound = FALSE;
+ for (;;)
+ {
+ CComHeapPtr<ITEMIDLIST> fontPidl;
+ ULONG fetched = 0;
+ hr = fontsEnum->Next(1, &fontPidl, &fetched);
+ if (FAILED(hr) || hr == S_FALSE)
+ break;
- WCHAR Buf[MAX_PATH];
- hr = StrRetToBufW(&strret, fontPidl, Buf, _countof(Buf));
- ok_hex(hr, S_OK);
- if (FAILED(hr))
- return;
+ STRRET strret;
+ hr = spFolder->GetDisplayNameOf(fontPidl, dwFlags, &strret);
+ if (FAILED(hr))
+ continue;
+
+ WCHAR Buf[MAX_PATH];
+ hr = StrRetToBufW(&strret, fontPidl, Buf, _countof(Buf));
+ if (FAILED(hr))
+ continue;
- // On 2k3 where this is not a custom IShellFolder, it will return something like:
- // 'C:\\WINDOWS\\Fonts\\arial.ttf'
- // On Vista+ this results in something like:
- // 'C:\\Windows\\Fonts\\System Bold'
- BOOL bRelative = PathIsRelativeW(Buf);
- trace("Path: %s\n", wine_dbgstr_w(Buf));
- ok(bRelative == FALSE, "Path not relative? (%s)\n", wine_dbgstr_w(Buf));
+ trace("Path: %s\n", wine_dbgstr_w(Buf));
+ if (lstrcmpiW(text, Buf) == 0)
+ {
+ bFound = TRUE;
+ ok_int(PathIsRelativeW(Buf), fRelative);
+ break;
+ }
+ }
+
+ ok_int(bFound, TRUE);
}
START_TEST(GetDisplayNameOf)
{
+ if (IsWindowsVistaOrGreater())
+ {
+ skip("Vista+\n");
+ return;
+ }
+
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
{
@@ -85,7 +110,33 @@ START_TEST(GetDisplayNameOf)
HRESULT hr = Initialize(spFolder);
if (SUCCEEDED(hr))
{
- Test_GetDisplayNameOf(spFolder);
+ WCHAR szPath[MAX_PATH];
+ SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, 0, szPath);
+ PathAppendW(szPath, L"arial.ttf");
+
+ trace("SHGDN_NORMAL\n");
+ Test_GetDisplayNameOf(spFolder, SHGDN_NORMAL, L"arial.ttf", TRUE);
+
+ trace("SHGDN_INFOLDER\n");
+ Test_GetDisplayNameOf(spFolder, SHGDN_INFOLDER, L"arial.ttf",
TRUE);
+
+ trace("SHGDN_FORPARSING\n");
+ Test_GetDisplayNameOf(spFolder, SHGDN_FORPARSING, szPath, FALSE);
+
+ trace("SHGDN_INFOLDER | SHGDN_FORPARSING\n");
+ Test_GetDisplayNameOf(spFolder, SHGDN_INFOLDER | SHGDN_FORPARSING,
L"arial.ttf", TRUE);
+
+ trace("SHGDN_FORADDRESSBAR\n");
+ Test_GetDisplayNameOf(spFolder, SHGDN_FORADDRESSBAR, L"arial.ttf",
TRUE);
+
+ trace("SHGDN_INFOLDER | SHGDN_FORADDRESSBAR\n");
+ Test_GetDisplayNameOf(spFolder, SHGDN_INFOLDER | SHGDN_FORADDRESSBAR,
L"arial.ttf", TRUE);
+
+ trace("SHGDN_FORPARSING | SHGDN_FORADDRESSBAR\n");
+ Test_GetDisplayNameOf(spFolder, SHGDN_FORPARSING | SHGDN_FORADDRESSBAR,
szPath, FALSE);
+
+ trace("SHGDN_INFOLDER | SHGDN_FORPARSING |
SHGDN_FORADDRESSBAR\n");
+ Test_GetDisplayNameOf(spFolder, SHGDN_INFOLDER | SHGDN_FORPARSING |
SHGDN_FORADDRESSBAR, L"arial.ttf", TRUE);
}
}