Nicolas Le Cam : shell32/tests: Fix GetAttributesOf tests on Win2k and below.

Alexandre Julliard julliard at winehq.org
Mon Apr 6 09:00:33 CDT 2009


Module: wine
Branch: master
Commit: bf7fa5b69072042eb17695a1b7009cc009d173f9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bf7fa5b69072042eb17695a1b7009cc009d173f9

Author: Nicolas Le Cam <niko.lecam at gmail.com>
Date:   Sun Apr  5 22:59:12 2009 +0200

shell32/tests: Fix GetAttributesOf tests on Win2k and below.

---

 dlls/shell32/tests/shlfolder.c |   77 ++++++++++++++++++++++++++++++---------
 1 files changed, 59 insertions(+), 18 deletions(-)

diff --git a/dlls/shell32/tests/shlfolder.c b/dlls/shell32/tests/shlfolder.c
index 7c33867..60df9e6 100644
--- a/dlls/shell32/tests/shlfolder.c
+++ b/dlls/shell32/tests/shlfolder.c
@@ -695,12 +695,31 @@ static void test_GetAttributesOf(void)
     LPCITEMIDLIST pidlEmpty = (LPCITEMIDLIST)&emptyitem;
     LPITEMIDLIST pidlMyComputer;
     DWORD dwFlags;
-    static const DWORD dwDesktopFlags = /* As observed on WinXP SP2 */
-        SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR |
-        SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER;
-    static const DWORD dwMyComputerFlags = /* As observed on WinXP SP2 */
-        SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET |
-        SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER;
+    static const DWORD desktopFlags[] = {
+        /* WinXP */
+        SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | SFGAO_FILESYSANCESTOR |
+        SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER,
+        /* Win2k */
+        SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_STREAM | SFGAO_FILESYSANCESTOR |
+        SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER,
+        /* WinMe, Win9x, WinNT*/
+        SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSANCESTOR |
+        SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER
+    };
+    static const DWORD myComputerFlags[] = {
+        /* WinXP */
+        SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET |
+        SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER,
+        /* Win2k */
+        SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_STREAM |
+        SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER,
+        /* WinMe, Win9x, WinNT */
+        SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR |
+        SFGAO_FOLDER | SFGAO_HASSUBFOLDER,
+        /* Win95, WinNT when queried directly */
+        SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR |
+        SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER
+    };
     WCHAR wszMyComputer[] = { 
         ':',':','{','2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-',
         'A','2','D','8','-','0','8','0','0','2','B','3','0','3','0','9','D','}',0 };
@@ -709,7 +728,8 @@ static void test_GetAttributesOf(void)
     static WCHAR cTestDirW[] = {'t','e','s','t','d','i','r',0};
     IShellFolder *IDesktopFolder, *testIShellFolder;
     ITEMIDLIST *newPIDL;
-    int len;
+    int len, i;
+    BOOL foundFlagsMatch;
 
     hr = SHGetDesktopFolder(&psfDesktop);
     ok (SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr);
@@ -719,15 +739,25 @@ static void test_GetAttributesOf(void)
     dwFlags = 0xffffffff;
     hr = IShellFolder_GetAttributesOf(psfDesktop, 1, &pidlEmpty, &dwFlags);
     ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(empty pidl) failed! hr = %08x\n", hr);
-    ok (dwFlags == dwDesktopFlags, "Wrong Desktop attributes: %08x, expected: %08x\n", 
-        dwFlags, dwDesktopFlags);
+    for (i = 0, foundFlagsMatch = FALSE; !foundFlagsMatch &&
+         i < sizeof(desktopFlags) / sizeof(desktopFlags[0]); i++)
+    {
+        if (desktopFlags[i] == dwFlags)
+            foundFlagsMatch = TRUE;
+    }
+    ok (foundFlagsMatch, "Wrong Desktop attributes: %08x\n", dwFlags);
 
     /* .. or with no itemidlist at all. */
     dwFlags = 0xffffffff;
     hr = IShellFolder_GetAttributesOf(psfDesktop, 0, NULL, &dwFlags);
     ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(NULL) failed! hr = %08x\n", hr);
-    ok (dwFlags == dwDesktopFlags, "Wrong Desktop attributes: %08x, expected: %08x\n", 
-        dwFlags, dwDesktopFlags);
+    for (i = 0, foundFlagsMatch = FALSE; !foundFlagsMatch &&
+         i < sizeof(desktopFlags) / sizeof(desktopFlags[0]); i++)
+    {
+        if (desktopFlags[i] == dwFlags)
+            foundFlagsMatch = TRUE;
+    }
+    ok (foundFlagsMatch, "Wrong Desktop attributes: %08x\n", dwFlags);
    
     /* Testing the attributes of the MyComputer shellfolder */
     hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, wszMyComputer, NULL, &pidlMyComputer, NULL);
@@ -737,7 +767,7 @@ static void test_GetAttributesOf(void)
         return;
     }
 
-    /* WinXP SP2 sets the SFGAO_CANLINK flag, when MyComputer is queried via the Desktop 
+    /* Windows sets the SFGAO_CANLINK flag, when MyComputer is queried via the Desktop
      * folder object. It doesn't do this, if MyComputer is queried directly (see below).
      * SFGAO_CANLINK is the same as DROPEFFECT_LINK, which MSDN says means: "Drag source
      * should create a link to the original data". You can't create links on MyComputer on
@@ -747,8 +777,13 @@ static void test_GetAttributesOf(void)
     dwFlags = 0xffffffff;
     hr = IShellFolder_GetAttributesOf(psfDesktop, 1, (LPCITEMIDLIST*)&pidlMyComputer, &dwFlags);
     ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(MyComputer) failed! hr = %08x\n", hr);
-    ok ((dwFlags & ~(DWORD)SFGAO_CANLINK) == dwMyComputerFlags, 
-                    "Wrong MyComputer attributes: %08x, expected: %08x\n", dwFlags, dwMyComputerFlags);
+    for (i = 0, foundFlagsMatch = FALSE; !foundFlagsMatch &&
+         i < sizeof(myComputerFlags) / sizeof(myComputerFlags[0]); i++)
+    {
+        if (myComputerFlags[i] == (dwFlags & ~(DWORD)SFGAO_CANLINK))
+            foundFlagsMatch = TRUE;
+    }
+    ok (foundFlagsMatch, "Wrong MyComputer attributes: %08x\n", dwFlags);
 
     hr = IShellFolder_BindToObject(psfDesktop, pidlMyComputer, NULL, &IID_IShellFolder, (LPVOID*)&psfMyComputer);
     ok (SUCCEEDED(hr), "Desktop failed to bind to MyComputer object! hr = %08x\n", hr);
@@ -765,8 +800,14 @@ static void test_GetAttributesOf(void)
     dwFlags = 0xffffffff;
     hr = IShellFolder_GetAttributesOf(psfMyComputer, 0, NULL, &dwFlags);
     ok (SUCCEEDED(hr), "MyComputer->GetAttributesOf(NULL) failed! hr = %08x\n", hr); 
-    todo_wine { ok (dwFlags == dwMyComputerFlags, 
-                    "Wrong MyComputer attributes: %08x, expected: %08x\n", dwFlags, dwMyComputerFlags); }
+    for (i = 0, foundFlagsMatch = FALSE; !foundFlagsMatch &&
+         i < sizeof(myComputerFlags) / sizeof(myComputerFlags[0]); i++)
+    {
+        if (myComputerFlags[i] == dwFlags)
+            foundFlagsMatch = TRUE;
+    }
+    todo_wine
+    ok (foundFlagsMatch, "Wrong MyComputer attributes: %08x\n", dwFlags);
 
     IShellFolder_Release(psfMyComputer);
 
@@ -774,8 +815,8 @@ static void test_GetAttributesOf(void)
     len = lstrlenA(cCurrDirA);
 
     if (len == 0) {
-	win_skip("GetCurrentDirectoryA returned empty string. Skipping test_GetAttributesOf\n");
-	return;
+        win_skip("GetCurrentDirectoryA returned empty string. Skipping test_GetAttributesOf\n");
+        return;
     }
     if(cCurrDirA[len-1] == '\\')
 	cCurrDirA[len-1] = 0;




More information about the wine-cvs mailing list