https://git.reactos.org/?p=reactos.git;a=commitdiff;h=654c59a5f82298815b726…
commit 654c59a5f82298815b7261e6c4fdea8b79b3f988
Author: Whindmar Saksit <whindsaks(a)proton.me>
AuthorDate: Sun Oct 13 17:46:06 2024 +0200
Commit: GitHub <noreply(a)github.com>
CommitDate: Sun Oct 13 17:46:06 2024 +0200
[SHELL32_APITEST] Basic ILIsEqual tests (#7438)
---
modules/rostests/apitests/shell32/ItemIDList.cpp | 60 +++++++++++++++++++++++-
modules/rostests/apitests/shell32/testlist.c | 2 +
2 files changed, 61 insertions(+), 1 deletion(-)
diff --git a/modules/rostests/apitests/shell32/ItemIDList.cpp
b/modules/rostests/apitests/shell32/ItemIDList.cpp
index 08214efb876..9665dede641 100644
--- a/modules/rostests/apitests/shell32/ItemIDList.cpp
+++ b/modules/rostests/apitests/shell32/ItemIDList.cpp
@@ -9,7 +9,10 @@
#include "shelltest.h"
#include <shellutils.h>
-enum { DIRBIT = 1, FILEBIT = 2 };
+enum {
+ DIRBIT = 1, FILEBIT = 2,
+ PT_COMPUTER_REGITEM = 0x2E,
+};
static BYTE GetPIDLType(LPCITEMIDLIST pidl)
{
@@ -202,3 +205,58 @@ START_TEST(PIDL)
skip("?\n");
ILFree(pidl);
}
+
+START_TEST(ILIsEqual)
+{
+ LPITEMIDLIST p1, p2, pidl;
+
+ p1 = p2 = NULL;
+ ok_int(ILIsEqual(p1, p2), TRUE);
+
+ ITEMIDLIST emptyitem = {}, emptyitem2 = {};
+ ok_int(ILIsEqual(&emptyitem, &emptyitem2), TRUE);
+
+ ok_int(ILIsEqual(NULL, &emptyitem), FALSE); // These two are not equal for some
reason
+
+ p1 = SHCloneSpecialIDList(NULL, CSIDL_DRIVES, FALSE);
+ p2 = SHCloneSpecialIDList(NULL, CSIDL_DRIVES, FALSE);
+ if (p1 && p2)
+ {
+ ok_int(ILIsEqual(p1, p2), TRUE);
+ p1->mkid.abID[0] = PT_COMPUTER_REGITEM; // RegItem in wrong parent
+ ok_int(ILIsEqual(p1, p2), FALSE);
+ }
+ else
+ {
+ skip("Unable to initialize test\n");
+ }
+ ILFree(p1);
+ ILFree(p2);
+
+ // ILIsParent must compare like ILIsEqual
+ p1 = SHSimpleIDListFromPath(L"c:\\");
+ p2 = SHSimpleIDListFromPath(L"c:\\dir\\file");
+ if (p1 && p2)
+ {
+ ok_int(ILIsParent(NULL, p1, FALSE), FALSE); // NULL is always false
+ ok_int(ILIsParent(p1, NULL, FALSE), FALSE); // NULL is always false
+ ok_int(ILIsParent(NULL, NULL, FALSE), FALSE); // NULL is always false
+ ok_int(ILIsParent(p1, p1, FALSE), TRUE); // I'm my own parent
+ ok_int(ILIsParent(p1, p1, TRUE), FALSE); // Self is not immediate
+ ok_int(ILIsParent(p1, p2, FALSE), TRUE); // Grandchild
+ ok_int(ILIsParent(p1, p2, TRUE), FALSE); // Grandchild is not immediate
+ ok_ptr(ILFindChild(p1, p2), ILGetNext(ILGetNext(p2))); // Child is
"dir\\file", skip MyComputer and C:
+ ok_int(ILIsEmpty(pidl = ILFindChild(p1, p1)) && pidl, TRUE); // Self
+ ILRemoveLastID(p2);
+ ok_int(ILIsParent(p1, p2, TRUE), TRUE); // Immediate child
+
+ p1->mkid.abID[0] = PT_COMPUTER_REGITEM; // RegItem in wrong parent
+ ok_int(ILIsParent(p1, p2, FALSE), FALSE);
+ }
+ else
+ {
+ skip("Unable to initialize test\n");
+ }
+ ILFree(p1);
+ ILFree(p2);
+}
diff --git a/modules/rostests/apitests/shell32/testlist.c
b/modules/rostests/apitests/shell32/testlist.c
index 9f4fbf34e9e..4b16a6dd4d5 100644
--- a/modules/rostests/apitests/shell32/testlist.c
+++ b/modules/rostests/apitests/shell32/testlist.c
@@ -19,6 +19,7 @@ extern void func_FindExecutable(void);
extern void func_GetDisplayNameOf(void);
extern void func_GUIDFromString(void);
extern void func_ILCreateFromPath(void);
+extern void func_ILIsEqual(void);
extern void func_Int64ToString(void);
extern void func_IShellFolderViewCB(void);
extern void func_menu(void);
@@ -63,6 +64,7 @@ const struct test winetest_testlist[] =
{ "GetDisplayNameOf", func_GetDisplayNameOf },
{ "GUIDFromString", func_GUIDFromString },
{ "ILCreateFromPath", func_ILCreateFromPath },
+ { "ILIsEqual", func_ILIsEqual },
{ "Int64ToString", func_Int64ToString },
{ "IShellFolderViewCB", func_IShellFolderViewCB },
{ "menu", func_menu },