https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c7b83d2ce4d6354aa17996...
commit c7b83d2ce4d6354aa179966d178267a2f0fbe96c Author: Mark Jansen mark.jansen@reactos.org AuthorDate: Wed Feb 1 15:43:32 2023 +0100 Commit: Mark Jansen mark.jansen@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@reactos.org) + * COPYRIGHT: Copyright 2020-2023 Mark Jansen (mark.jansen@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);