[SHELL32_APITEST] Add SHSimpleIDListFromPath testcase (#6892)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Wed, 15 May 2024 08:01:41 +0000 (17:01 +0900)
committerGitHub <noreply@github.com>
Wed, 15 May 2024 08:01:41 +0000 (17:01 +0900)
Inspect the behavior of
shell32!SHSimpleIDListFromPath function.
JIRA issue: CORE-19591

modules/rostests/apitests/shell32/CMakeLists.txt
modules/rostests/apitests/shell32/SHSimpleIDListFromPath.cpp [new file with mode: 0644]
modules/rostests/apitests/shell32/testlist.c

index acd85a2..5bc7911 100644 (file)
@@ -32,6 +32,7 @@ list(APPEND SOURCE
     SHCreateFileExtractIconW.cpp
     SHParseDisplayName.cpp
     SHRestricted.cpp
+    SHSimpleIDListFromPath.cpp
     She.cpp
     ShellExecCmdLine.cpp
     ShellExecuteEx.cpp
diff --git a/modules/rostests/apitests/shell32/SHSimpleIDListFromPath.cpp b/modules/rostests/apitests/shell32/SHSimpleIDListFromPath.cpp
new file mode 100644 (file)
index 0000000..34ffdae
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * PROJECT:     ReactOS API tests
+ * LICENSE:     GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
+ * PURPOSE:     Test for SHSimpleIDListFromPath
+ * COPYRIGHT:   Copyright 2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
+ */
+
+#include "shelltest.h"
+#include <shellutils.h>
+
+START_TEST(SHSimpleIDListFromPath)
+{
+    HRESULT hr;
+    WCHAR szPath[MAX_PATH];
+    GetWindowsDirectoryW(szPath, _countof(szPath));
+
+    // We compare pidl1 and pidl2
+    CComHeapPtr<ITEMIDLIST> pidl1(SHSimpleIDListFromPath(szPath));
+    CComHeapPtr<ITEMIDLIST> pidl2(ILCreateFromPathW(szPath));
+
+    // Yes, they are equal logically
+    LPITEMIDLIST pidl1Last = ILFindLastID(pidl1), pidl2Last = ILFindLastID(pidl2);
+    ok_int(ILIsEqual(pidl1, pidl2), TRUE);
+    ok_int(ILIsEqual(pidl1Last, pidl2Last), TRUE);
+
+    // Bind to parent
+    CComPtr<IShellFolder> psf1, psf2;
+    hr = SHBindToParent(pidl1, IID_PPV_ARG(IShellFolder, &psf1), NULL);
+    ok_long(hr, S_OK);
+    hr = SHBindToParent(pidl2, IID_PPV_ARG(IShellFolder, &psf2), NULL);
+    ok_long(hr, S_OK);
+
+    // Get attributes
+    DWORD attrs1 = SFGAO_FOLDER, attrs2 = SFGAO_FOLDER;
+    hr = (psf1 ? psf1->GetAttributesOf(1, &pidl1Last, &attrs1) : E_UNEXPECTED);
+    ok_long(hr, S_OK);
+    hr = (psf2 ? psf2->GetAttributesOf(1, &pidl2Last, &attrs2) : E_UNEXPECTED);
+    ok_long(hr, S_OK);
+
+    // There is the difference in attributes:
+    ok_long((attrs1 & SFGAO_FOLDER), 0);
+    ok_long((attrs2 & SFGAO_FOLDER), SFGAO_FOLDER);
+}
index 7e42b73..bf977ba 100644 (file)
@@ -40,6 +40,7 @@ extern void func_ShellState(void);
 extern void func_SHGetAttributesFromDataObject(void);
 extern void func_SHLimitInputEdit(void);
 extern void func_SHParseDisplayName(void);
+extern void func_SHSimpleIDListFromPath(void);
 extern void func_SHRestricted(void);
 
 const struct test winetest_testlist[] =
@@ -81,6 +82,7 @@ const struct test winetest_testlist[] =
     { "SHGetAttributesFromDataObject", func_SHGetAttributesFromDataObject },
     { "SHLimitInputEdit", func_SHLimitInputEdit },
     { "SHParseDisplayName", func_SHParseDisplayName },
+    { "SHSimpleIDListFromPath", func_SHSimpleIDListFromPath },
     { "SHRestricted", func_SHRestricted },
 
     { 0, 0 }