From a105b5d355facb69042dc525c8b3b701fd62182c Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Tue, 6 Apr 2021 09:02:53 +0900 Subject: [PATCH] [FONTEXT_APITEST] Follow-up of #3585 (deb928c) Strengthen GetDisplayNameOf testcase. CORE-9281, CORE-16444 --- .../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 + * Copyright 2021 Katayama Hirofumi MZ */ #include @@ -15,6 +16,7 @@ #include #include #include +#include #include "wine/test.h" static HRESULT Initialize(CComPtr& spFolder) @@ -39,45 +41,68 @@ static HRESULT Initialize(CComPtr& 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& spFolder) +static void +Test_GetDisplayNameOf(CComPtr& spFolder, + DWORD dwFlags, LPCWSTR text, BOOL fRelative) { CComPtr fontsEnum; HRESULT hr = spFolder->EnumObjects(NULL, SHCONTF_NONFOLDERS, &fontsEnum); - ok_hex(hr, S_OK); if (FAILED(hr)) + { + skip("EnumObjects failed\n"); return; + } - CComHeapPtr 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 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; - // 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)); + WCHAR Buf[MAX_PATH]; + hr = StrRetToBufW(&strret, fontPidl, Buf, _countof(Buf)); + if (FAILED(hr)) + continue; + + 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); } }