https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a105b5d355facb69042dc525c8b3b701fd62182c

commit a105b5d355facb69042dc525c8b3b701fd62182c
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Tue Apr 6 09:02:53 2021 +0900
Commit:     Katayama Hirofumi MZ <[email protected]>
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 <[email protected]>
+ *              Copyright 2021 Katayama Hirofumi MZ 
<[email protected]>
  */
 
 #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);
         }
     }
 

Reply via email to