Dmitry Timoshkov : user32: Add a test for the menu resource loader,
make it pass under Wine.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue May 15 14:02:08 CDT 2007
Module: wine
Branch: master
Commit: 34015b93a4af1d9387e32bad070a6ac6fdcd0a07
URL: http://source.winehq.org/git/wine.git/?a=commit;h=34015b93a4af1d9387e32bad070a6ac6fdcd0a07
Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date: Tue May 15 16:33:29 2007 +0900
user32: Add a test for the menu resource loader, make it pass under Wine.
---
dlls/user32/menu.c | 2 +
dlls/user32/tests/menu.c | 86 ++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 86 insertions(+), 2 deletions(-)
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index 789f769..b57b0dc 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -2032,6 +2032,8 @@ static BOOL MENU_SetItemData( MENUITEM *item, UINT flags, UINT_PTR id,
item->text = NULL;
}
+ if (flags & MF_SEPARATOR) flags |= MF_GRAYED | MF_DISABLED;
+
if (flags & MF_OWNERDRAW)
item->dwItemData = (DWORD_PTR)str;
else
diff --git a/dlls/user32/tests/menu.c b/dlls/user32/tests/menu.c
index 141d6c5..5c94b4c 100644
--- a/dlls/user32/tests/menu.c
+++ b/dlls/user32/tests/menu.c
@@ -1914,9 +1914,7 @@ static void check_menu_items(HMENU hmenu, UINT checked_cmd, UINT checked_type,
if (mii.fType == MFT_SEPARATOR)
{
-todo_wine {
ok(mii.fState == MFS_GRAYED, "id %u: expected fState MFS_GRAYED, got %04x\n", checked_cmd, mii.fState);
-}
ok(mii.wID == 0, "id %u: expected wID 0, got %u\n", checked_cmd, mii.wID);
}
else
@@ -1988,6 +1986,89 @@ static void test_CheckMenuRadioItem(void)
check_menu_items(hmenu, -1, 0, 0);
}
+static void test_menu_resource_layout(void)
+{
+ static const struct
+ {
+ MENUITEMTEMPLATEHEADER mith;
+ WORD data[];
+ } menu_template =
+ {
+ { 0, 0 }, /* versionNumber, offset */
+ {
+ /* mtOption, mtID, mtString[] '\0' terminated */
+ MF_STRING, 1, 'F', 0,
+ MF_STRING, 2, 0,
+ MF_SEPARATOR, 3, 0,
+ /* MF_SEPARATOR, 4, 'S', 0, FIXME: Wine ignores 'S' */
+ MF_STRING|MF_GRAYED|MF_END, 5, 'E', 0
+ }
+ };
+ static const struct
+ {
+ UINT type, state, id;
+ const char *str;
+ } menu_data[] =
+ {
+ { MF_STRING, MF_ENABLED, 1, "F" },
+ { MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 2, "" },
+ { MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 3, "" },
+ /*{ MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 4, "S" }, FIXME: Wine ignores 'S'*/
+ { MF_STRING, MF_GRAYED, 5, "E" },
+ { MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 6, "" },
+ { MF_STRING, MF_ENABLED, 7, "" },
+ { MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 8, "" }
+ };
+ HMENU hmenu;
+ UINT count, i;
+ BOOL ret;
+
+ hmenu = LoadMenuIndirect(&menu_template);
+ ok(hmenu != 0, "LoadMenuIndirect error %u\n", GetLastError());
+
+ ret = AppendMenu(hmenu, MF_STRING, 6, NULL);
+ ok(ret, "AppendMenu failed\n");
+ ret = AppendMenu(hmenu, MF_STRING, 7, "\0");
+ ok(ret, "AppendMenu failed\n");
+ ret = AppendMenu(hmenu, MF_SEPARATOR, 8, "separator");
+ ok(ret, "AppendMenu failed\n");
+
+ count = GetMenuItemCount(hmenu);
+ ok(count == sizeof(menu_data)/sizeof(menu_data[0]),
+ "expected %u menu items, got %u\n",
+ (UINT)sizeof(menu_data)/sizeof(menu_data[0]), count);
+
+ for (i = 0; i < count; i++)
+ {
+ char buf[20];
+ MENUITEMINFO mii;
+
+ memset(&mii, 0, sizeof(mii));
+ mii.cbSize = sizeof(mii);
+ mii.dwTypeData = buf;
+ mii.cch = sizeof(buf);
+ mii.fMask = MIIM_FTYPE | MIIM_STATE | MIIM_ID | MIIM_STRING;
+ ret = GetMenuItemInfo(hmenu, i, TRUE, &mii);
+ ok(ret, "GetMenuItemInfo(%u) failed\n", i);
+#if 0
+ trace("item #%u: fType %04x, fState %04x, wID %u, dwTypeData %s\n",
+ i, mii.fType, mii.fState, mii.wID, (LPCSTR)mii.dwTypeData);
+#endif
+ ok(mii.fType == menu_data[i].type,
+ "%u: expected fType %04x, got %04x\n", i, menu_data[i].type, mii.fType);
+ ok(mii.fState == menu_data[i].state,
+ "%u: expected fState %04x, got %04x\n", i, menu_data[i].state, mii.fState);
+ ok(mii.wID == menu_data[i].id,
+ "%u: expected wID %04x, got %04x\n", i, menu_data[i].id, mii.wID);
+ ok(mii.cch == strlen(menu_data[i].str),
+ "%u: expected cch %u, got %u\n", i, (UINT)strlen(menu_data[i].str), mii.cch);
+ ok(!strcmp((LPCSTR)mii.dwTypeData, menu_data[i].str),
+ "%u: expected dwTypeData %s, got %s\n", i, menu_data[i].str, (LPCSTR)mii.dwTypeData);
+ }
+
+ DestroyMenu(hmenu);
+}
+
START_TEST(menu)
{
pSetMenuInfo =
@@ -2007,4 +2088,5 @@ START_TEST(menu)
test_menu_flags();
test_menu_hilitemenuitem();
test_CheckMenuRadioItem();
+ test_menu_resource_layout();
}
More information about the wine-cvs
mailing list