[PATCH 08/10] Fix test failures on Vista and higher

Paul Vriens Paul.Vriens.Wine at gmail.com
Fri Nov 27 09:27:10 CST 2009


---
 dlls/shell32/tests/progman_dde.c |   53 ++++++++++++++++++++++++++++++++++---
 1 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/dlls/shell32/tests/progman_dde.c b/dlls/shell32/tests/progman_dde.c
index fd10298..f1d7d31 100644
--- a/dlls/shell32/tests/progman_dde.c
+++ b/dlls/shell32/tests/progman_dde.c
@@ -96,13 +96,20 @@ static void init_strings(void)
 
     if (pSHGetSpecialFolderPathA)
     {
-        /* FIXME: On Vista+ we should only use CSIDL_PROGRAMS */
         pSHGetSpecialFolderPathA(NULL, Programs, CSIDL_PROGRAMS, FALSE);
         if (!pSHGetSpecialFolderPathA(NULL, CommonPrograms, CSIDL_COMMON_PROGRAMS, FALSE))
         {
             /* Win9x */
             lstrcpyA(CommonPrograms, Programs);
         }
+        if (GetProcAddress(GetModuleHandleA("shell32.dll"), "SHGetKnownFolderPath"))
+        {
+            /* Vista and higher use CSIDL_PROGRAMS for these tests.
+             * Wine doesn't have SHGetKnownFolderPath yet but should most likely follow
+             * this new ProgMan DDE behavior once implemented.
+             */
+            lstrcpyA(CommonPrograms, Programs);
+        }
         pSHGetSpecialFolderPathA(NULL, startup, CSIDL_STARTUP, FALSE);
         lstrcpyA(Startup, (strrchr(startup, '\\') + 1));
     }
@@ -542,12 +549,25 @@ static void CompoundCommandTest(DWORD instance, HCONV hConv, const char *command
     }
 }
 
+static void CreateAddItemText(char *itemtext, const char *cmdline, const char *name)
+{
+    lstrcpyA(itemtext, "[AddItem(");
+    lstrcatA(itemtext, cmdline);
+    lstrcatA(itemtext, ",");
+    lstrcatA(itemtext, name);
+    lstrcatA(itemtext, ")]");
+}
+
 /* 1st set of tests */
 static int DdeTestProgman(DWORD instance, HCONV hConv)
 {
     HDDEDATA hData;
     UINT error;
     int testnum;
+    char temppath[MAX_PATH];
+    char f1g1[MAX_PATH], f2g1[MAX_PATH], f3g1[MAX_PATH], f1g3[MAX_PATH], f2g3[MAX_PATH];
+    char itemtext[MAX_PATH + 20];
+    char comptext[2 * (MAX_PATH + 20) + 21];
 
     testnum = 1;
     /* Invalid Command */
@@ -555,12 +575,23 @@ static int DdeTestProgman(DWORD instance, HCONV hConv)
     ok (error == DMLERR_NOTPROCESSED, "InvalidCommand(), expected error %s, received %s.\n",
         GetStringFromError(DMLERR_NOTPROCESSED), GetStringFromError(error));
 
+    /* On Vista+ the files have to exist when adding a link */
+    GetTempPathA(MAX_PATH, temppath);
+    GetTempFileNameA(temppath, "dde", 0, f1g1);
+    GetTempFileNameA(temppath, "dde", 0, f2g1);
+    GetTempFileNameA(temppath, "dde", 0, f3g1);
+    GetTempFileNameA(temppath, "dde", 0, f1g3);
+    GetTempFileNameA(temppath, "dde", 0, f2g3);
+
     /* CreateGroup Tests (including AddItem, DeleteItem) */
     CreateGroupTest(instance, hConv, "[CreateGroup(Group1)]", DMLERR_NO_ERROR, "Group1", Group1Title, DDE_TEST_COMMON|DDE_TEST_CREATEGROUP|testnum++);
-    AddItemTest(instance, hConv, "[AddItem(c:\\f1g1,f1g1Name)]", DMLERR_NO_ERROR, "f1g1Name.lnk", "Group1", DDE_TEST_COMMON|DDE_TEST_ADDITEM|testnum++);
-    AddItemTest(instance, hConv, "[AddItem(c:\\f2g1,f2g1Name)]", DMLERR_NO_ERROR, "f2g1Name.lnk", "Group1", DDE_TEST_COMMON|DDE_TEST_ADDITEM|testnum++);
+    CreateAddItemText(itemtext, f1g1, "f1g1Name");
+    AddItemTest(instance, hConv, itemtext, DMLERR_NO_ERROR, "f1g1Name.lnk", "Group1", DDE_TEST_COMMON|DDE_TEST_ADDITEM|testnum++);
+    CreateAddItemText(itemtext, f2g1, "f2g1Name");
+    AddItemTest(instance, hConv, itemtext, DMLERR_NO_ERROR, "f2g1Name.lnk", "Group1", DDE_TEST_COMMON|DDE_TEST_ADDITEM|testnum++);
     DeleteItemTest(instance, hConv, "[DeleteItem(f2g1Name)]", DMLERR_NO_ERROR, "f2g1Name.lnk", "Group1", DDE_TEST_COMMON|DDE_TEST_DELETEITEM|testnum++);
-    AddItemTest(instance, hConv, "[AddItem(c:\\f3g1,f3g1Name)]", DMLERR_NO_ERROR, "f3g1Name.lnk", "Group1", DDE_TEST_COMMON|DDE_TEST_ADDITEM|testnum++);
+    CreateAddItemText(itemtext, f3g1, "f3g1Name");
+    AddItemTest(instance, hConv, itemtext, DMLERR_NO_ERROR, "f3g1Name.lnk", "Group1", DDE_TEST_COMMON|DDE_TEST_ADDITEM|testnum++);
     CreateGroupTest(instance, hConv, "[CreateGroup(Group2)]", DMLERR_NO_ERROR, "Group2", Group2Title, DDE_TEST_COMMON|DDE_TEST_CREATEGROUP|testnum++);
     /* Create Group that already exists - same instance */
     CreateGroupTest(instance, hConv, "[CreateGroup(Group1)]", DMLERR_NO_ERROR, "Group1", Group1Title, DDE_TEST_COMMON|DDE_TEST_CREATEGROUP|testnum++);
@@ -575,12 +606,24 @@ static int DdeTestProgman(DWORD instance, HCONV hConv)
     DeleteGroupTest(instance, hConv, "[DeleteGroup(Group1)]", DMLERR_NO_ERROR, "Group1", DDE_TEST_DELETEGROUP|testnum++);
 
     /* Compound Execute String Command */
-    CompoundCommandTest(instance, hConv, "[CreateGroup(Group3)][AddItem(c:\\f1g3,f1g3Name)][AddItem(c:\\f2g3,f2g3Name)]", DMLERR_NO_ERROR, "Group3", Group3Title, "f1g3Name.lnk", "f2g3Name.lnk", DDE_TEST_COMMON|DDE_TEST_COMPOUND|testnum++);
+    lstrcpyA(comptext, "[CreateGroup(Group3)]");
+    CreateAddItemText(itemtext, f1g3, "f1g3Name");
+    lstrcatA(comptext, itemtext);
+    CreateAddItemText(itemtext, f2g3, "f2g3Name");
+    lstrcatA(comptext, itemtext);
+    CompoundCommandTest(instance, hConv, comptext, DMLERR_NO_ERROR, "Group3", Group3Title, "f1g3Name.lnk", "f2g3Name.lnk", DDE_TEST_COMMON|DDE_TEST_COMPOUND|testnum++);
+
     DeleteGroupTest(instance, hConv, "[DeleteGroup(Group3)]", DMLERR_NO_ERROR, "Group3", DDE_TEST_DELETEGROUP|testnum++);
 
     /* Full Parameters of Add Item */
     /* AddItem(CmdLine[,Name[,IconPath[,IconIndex[,xPos,yPos[,DefDir[,HotKey[,fMinimize[fSeparateSpace]]]]]]]) */
 
+    DeleteFileA(f1g1);
+    DeleteFileA(f2g1);
+    DeleteFileA(f3g1);
+    DeleteFileA(f1g3);
+    DeleteFileA(f2g3);
+
     return testnum;
 }
 
-- 
1.6.2.5


--------------000808060904000007020509--



More information about the wine-patches mailing list