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

commit c7b83d2ce4d6354aa179966d178267a2f0fbe96c
Author:     Mark Jansen <[email protected]>
AuthorDate: Wed Feb 1 15:43:32 2023 +0100
Commit:     Mark Jansen <[email protected]>
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 ([email protected])
+ * COPYRIGHT:   Copyright 2020-2023 Mark Jansen ([email protected])
  */
 
 #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);
 

Reply via email to