https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c7b83d2ce4d6354aa1799…
commit c7b83d2ce4d6354aa179966d178267a2f0fbe96c
Author: Mark Jansen <mark.jansen(a)reactos.org>
AuthorDate: Wed Feb 1 15:43:32 2023 +0100
Commit: Mark Jansen <mark.jansen(a)reactos.org>
CommitDate: Wed Feb 1 15:43:32 2023 +0100
[ZIPFLDR_APITEST] Fix the test on 2k3, where a zip folder is marked as 'file',
not as 'folder'
---
.../rostests/apitests/zipfldr/EnumParentDir.cpp | 124 +++++++--------------
1 file changed, 42 insertions(+), 82 deletions(-)
diff --git a/modules/rostests/apitests/zipfldr/EnumParentDir.cpp
b/modules/rostests/apitests/zipfldr/EnumParentDir.cpp
index 8eec80e3436..71f0352dad4 100644
--- a/modules/rostests/apitests/zipfldr/EnumParentDir.cpp
+++ b/modules/rostests/apitests/zipfldr/EnumParentDir.cpp
@@ -2,7 +2,7 @@
* PROJECT: ReactOS api tests
* LICENSE: GPL-2.0-or-later (
https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Test the result of enumerating over a folder with a zip in it
- * COPYRIGHT: Copyright 2020 Mark Jansen (mark.jansen(a)reactos.org)
+ * COPYRIGHT: Copyright 2020-2023 Mark Jansen (mark.jansen(a)reactos.org)
*/
#include "precomp.h"
@@ -50,124 +50,73 @@ void FindExpectedFile(FileInfo* Array, size_t len, IShellFolder*
pFolder, PCUITE
}
}
-static void test_EnumDirFiles(const WCHAR* TestFolder)
-{
- CComPtr<IShellFolder> spFolder;
- if (!InitializeShellFolder(TestFolder, spFolder))
- return;
-
- CComPtr<IEnumIDList> spEnum;
- ok_int(zipfldr_loaded(), FALSE);
- HRESULT hr = spFolder->EnumObjects(NULL, SHCONTF_NONFOLDERS, &spEnum);
- ok_hr(hr, S_OK);
- if (!SUCCEEDED(hr))
- return;
- ok_int(zipfldr_loaded(), FALSE);
-
- SFGAOF BaseAttributes = SFGAO_FILESYSTEM;
- FileInfo ExpectedFiles[] = {
- { L"test.txt", BaseAttributes, false },
- };
-
- ULONG totalFetched = 0;
- do
- {
- CComHeapPtr<ITEMID_CHILD> child;
- ULONG celtFetched = 0;
- hr = spEnum->Next(1, &child, &celtFetched);
- if (hr != S_OK)
- break;
- ok_int(celtFetched, 1);
- if (celtFetched != 1)
- break;
-
- LPCWSTR ExpectedName;
- SFGAOF ExpectedAttributes;
- FindExpectedFile(ExpectedFiles, RTL_NUMBER_OF(ExpectedFiles), spFolder, child,
ExpectedName, ExpectedAttributes);
-
- totalFetched++;
-
- ok_displayname(spFolder, child, SHGDN_NORMAL, ExpectedName);
-
- SFGAOF Attributes = SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM |
SFGAO_HASSUBFOLDER;
- hr = spFolder->GetAttributesOf(1, &child, &Attributes);
- /* Just keep the ones we are interested in */
- Attributes &= (SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR |
SFGAO_STORAGEANCESTOR);
- ok_hr(hr, S_OK);
- ok_hex(Attributes, ExpectedAttributes);
- } while (true);
-
- ok_int(totalFetched, RTL_NUMBER_OF(ExpectedFiles));
- ok_hr(hr, S_FALSE);
- ok_int(zipfldr_loaded(), FALSE);
-}
+const SFGAOF BaseFileAttributes = SFGAO_FILESYSTEM;
+const SFGAOF BaseFolderAttributes = SFGAO_FILESYSTEM | SFGAO_FOLDER;
+FileInfo ExpectedFiles[] = {
+ { L"test.txt", BaseFileAttributes, false },
+ { L"TMP0.zip", BaseFileAttributes, false}, // 2k3 Shows this as a file,
newer shows this as a folder
+ { L"ASUBFLD", BaseFolderAttributes | SFGAO_FILESYSANCESTOR |
SFGAO_STORAGEANCESTOR, false },
+};
+BOOL FoundZipfldr = FALSE;
-static void test_EnumDirDirs(const WCHAR* TestFolder)
+static void
+test_EnumDirFiles(const WCHAR *TestFolder, BOOL EnumFolders)
{
CComPtr<IShellFolder> spFolder;
if (!InitializeShellFolder(TestFolder, spFolder))
return;
CComPtr<IEnumIDList> spEnum;
- ok_int(zipfldr_loaded(), FALSE);
- HRESULT hr = spFolder->EnumObjects(NULL, SHCONTF_FOLDERS, &spEnum);
+ ok_int(zipfldr_loaded(), FoundZipfldr);
+ HRESULT hr = spFolder->EnumObjects(NULL, EnumFolders ? SHCONTF_FOLDERS :
SHCONTF_NONFOLDERS, &spEnum);
ok_hr(hr, S_OK);
if (!SUCCEEDED(hr))
return;
+ ok_int(zipfldr_loaded(), FoundZipfldr);
- ok_int(zipfldr_loaded(), FALSE);
-
- SFGAOF BaseAttributes = SFGAO_FILESYSTEM | SFGAO_FOLDER;
- FileInfo ExpectedFiles[] = {
- { L"TMP0.zip", BaseAttributes, false},
- { L"ASUBFLD", BaseAttributes | SFGAO_FILESYSANCESTOR |
SFGAO_STORAGEANCESTOR, false },
- };
-
- bool bFoundZipfldr = false;
-
- ULONG totalFetched = 0;
do
{
CComHeapPtr<ITEMID_CHILD> child;
ULONG celtFetched = 0;
- ok_int(zipfldr_loaded(), bFoundZipfldr ? TRUE : FALSE);
+ ok_int(zipfldr_loaded(), FoundZipfldr);
hr = spEnum->Next(1, &child, &celtFetched);
+ ok_int(zipfldr_loaded(), FoundZipfldr);
if (hr != S_OK)
break;
ok_int(celtFetched, 1);
if (celtFetched != 1)
break;
- ok_int(zipfldr_loaded(), bFoundZipfldr ? TRUE : FALSE);
-
LPCWSTR ExpectedName;
SFGAOF ExpectedAttributes;
FindExpectedFile(ExpectedFiles, RTL_NUMBER_OF(ExpectedFiles), spFolder, child,
ExpectedName, ExpectedAttributes);
- totalFetched++;
-
+ ok_int(zipfldr_loaded(), FoundZipfldr);
ok_displayname(spFolder, child, SHGDN_NORMAL, ExpectedName);
- trace("Current: %S\n", ExpectedName);
+ ok_int(zipfldr_loaded(), FoundZipfldr);
SFGAOF Attributes = SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM |
SFGAO_HASSUBFOLDER;
hr = spFolder->GetAttributesOf(1, &child, &Attributes);
- if ((ExpectedAttributes & SFGAO_FILESYSANCESTOR))
- {
- ok_int(zipfldr_loaded(), bFoundZipfldr ? TRUE : FALSE);
- }
- else
+
+ if (!wcsicmp(ExpectedName, L"TMP0.zip"))
{
- ok_int(zipfldr_loaded(), TRUE);
- bFoundZipfldr = true;
+ // We allow both .zip files being a 'file' (2k3) or a
'folder' (win10)
+ if (Attributes & SFGAO_FOLDER)
+ ExpectedAttributes |= SFGAO_FOLDER;
+ // Only at this point (after calling GetAttributesOf) it will load zipfldr
+ FoundZipfldr = TRUE;
+ trace("Found zip (%S)\n", ExpectedName);
}
+ ok_int(zipfldr_loaded(), FoundZipfldr);
+
/* Just keep the ones we are interested in */
Attributes &= (SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR |
SFGAO_STORAGEANCESTOR);
ok_hr(hr, S_OK);
ok_hex(Attributes, ExpectedAttributes);
} while (true);
- ok_int(totalFetched, RTL_NUMBER_OF(ExpectedFiles));
ok_hr(hr, S_FALSE);
+ ok_int(zipfldr_loaded(), FoundZipfldr);
}
@@ -179,6 +128,8 @@ START_TEST(EnumParentDir)
if (!SUCCEEDED(hr))
return;
+ ok_int(zipfldr_loaded(), FALSE);
+
WCHAR TestFolder[MAX_PATH], TestFile[MAX_PATH], SubFolder[MAX_PATH];
GetTempPathW(_countof(TestFolder), TestFolder);
PathAppendW(TestFolder, L"ZipDir");
@@ -204,8 +155,17 @@ START_TEST(EnumParentDir)
CreateDirectoryW(SubFolder, NULL);
- test_EnumDirFiles(TestFolder);
- test_EnumDirDirs(TestFolder);
+ winetest_push_context("Files");
+ test_EnumDirFiles(TestFolder, FALSE);
+ winetest_pop_context();
+ winetest_push_context("Folders");
+ test_EnumDirFiles(TestFolder, TRUE);
+ winetest_pop_context();
+
+ for (size_t n = 0; n < RTL_NUMBER_OF(ExpectedFiles); ++n)
+ {
+ ok(ExpectedFiles[n].Found, "Did not find %S\n",
ExpectedFiles[n].Name);
+ }
RemoveDirectoryW(SubFolder);