X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/65571ec7bf8d1b2e2adccab1478dcd7cab82647a..26df5dd39a8c09397b19cd98ea51600af5a1dea4:/tests/menu/menu.cpp diff --git a/tests/menu/menu.cpp b/tests/menu/menu.cpp index febce87903..7c0c3551d8 100644 --- a/tests/menu/menu.cpp +++ b/tests/menu/menu.cpp @@ -33,9 +33,9 @@ namespace enum { - MenuTestCase_Quit = wxID_EXIT, - MenuTestCase_About = wxID_ABOUT, - MenuTestCase_First = 10000 + MenuTestCase_Foo = 10000, + MenuTestCase_Bar, + MenuTestCase_First }; void PopulateMenu(wxMenu* menu, const wxString& name, size_t& itemcount) @@ -83,6 +83,9 @@ private: CPPUNIT_TEST( FindInMenubar ); CPPUNIT_TEST( FindInMenu ); CPPUNIT_TEST( Count ); + CPPUNIT_TEST( Labels ); + CPPUNIT_TEST( RadioItems ); + CPPUNIT_TEST( RemoveAdd ); CPPUNIT_TEST_SUITE_END(); void CreateFrame(); @@ -90,6 +93,9 @@ private: void FindInMenubar(); void FindInMenu(); void Count(); + void Labels(); + void RadioItems(); + void RemoveAdd(); wxFrame* m_frame; @@ -110,7 +116,7 @@ private: // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( MenuTestCase ); -// also include in it's own registry so that these tests can be run alone +// also include in its own registry so that these tests can be run alone CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( MenuTestCase, "MenuTestCase" ); void MenuTestCase::CreateFrame() @@ -137,16 +143,15 @@ void MenuTestCase::CreateFrame() subMenu->AppendSubMenu(subsubMenu, "Subsubmen&u", "Test a subsubmenu"); PopulateMenu(fileMenu, "Filemenu item ", itemcount); - // Add a 'real' item too, for future tests - fileMenu->Append(MenuTestCase_Quit, "E&xit\tAlt-X", "Quit this program"); + + fileMenu->Append(MenuTestCase_Foo, "&Foo\tCtrl-F", "Test item to be found"); PopulateMenu(helpMenu, "Helpmenu item ", itemcount); - helpMenu->Append(MenuTestCase_About, "&About...\tF1", - "(Would normally) Show about dialog"); + helpMenu->Append(MenuTestCase_Bar, "Bar"); helpMenu->AppendSubMenu(subMenu, "Sub&menu", "Test a submenu"); - // +2 for E&xit and &About, +2 for the 2 submenus + // +2 for "Foo" and "Bar", +2 for the 2 submenus m_itemCount = itemcount + 4; // Use an arraystring here, to help with future tests @@ -169,13 +174,16 @@ void MenuTestCase::FindInMenubar() CPPUNIT_ASSERT( bar->FindMenu("&Fail") == wxNOT_FOUND ); // Find by menu name plus item name: - CPPUNIT_ASSERT( bar->FindMenuItem("File", "Exit") != wxNOT_FOUND ); - CPPUNIT_ASSERT( bar->FindMenuItem("&File", "E&xit") != wxNOT_FOUND ); - // and using the menu title + CPPUNIT_ASSERT( bar->FindMenuItem("File", "Foo") != wxNOT_FOUND ); + CPPUNIT_ASSERT( bar->FindMenuItem("&File", "&Foo") != wxNOT_FOUND ); + // and using the menu label int index = bar->FindMenu("&File"); CPPUNIT_ASSERT( index != wxNOT_FOUND ); - wxString menutitle = bar->GetMenuLabel(index); - CPPUNIT_ASSERT( bar->FindMenuItem(menutitle, "E&xit") != wxNOT_FOUND ); + wxString menulabel = bar->GetMenuLabel(index); + CPPUNIT_ASSERT( bar->FindMenuItem(menulabel, "&Foo") != wxNOT_FOUND ); + // and title + wxString menutitle = bar->GetMenu(index)->GetTitle(); + CPPUNIT_ASSERT( bar->FindMenuItem(menutitle, "&Foo") != wxNOT_FOUND ); // Find by position: for (size_t n=0; n < bar->GetMenuCount(); ++n) @@ -186,17 +194,17 @@ void MenuTestCase::FindInMenubar() // Find by id: wxMenu* menu = NULL; wxMenuItem* item = NULL; - item = bar->FindItem(MenuTestCase_Quit, &menu); + item = bar->FindItem(MenuTestCase_Foo, &menu); CPPUNIT_ASSERT( item ); CPPUNIT_ASSERT( menu ); // Check that the correct menu was found - CPPUNIT_ASSERT( menu->FindChildItem(MenuTestCase_Quit) ); + CPPUNIT_ASSERT( menu->FindChildItem(MenuTestCase_Foo) ); // Find submenu item: item = bar->FindItem(m_submenuItemId, &menu); CPPUNIT_ASSERT( item ); CPPUNIT_ASSERT( menu ); - // and, for completeness, a submenu one: + // and, for completeness, a subsubmenu one: item = bar->FindItem(m_subsubmenuItemId, &menu); CPPUNIT_ASSERT( item ); CPPUNIT_ASSERT( menu ); @@ -208,24 +216,25 @@ void MenuTestCase::FindInMenu() // Find by name: wxMenu* menuFind = bar->GetMenu(0); - CPPUNIT_ASSERT( menuFind->FindItem("Exit") != wxNOT_FOUND ); - CPPUNIT_ASSERT( menuFind->FindItem("E&xit") != wxNOT_FOUND ); + CPPUNIT_ASSERT( menuFind->FindItem("Foo") != wxNOT_FOUND ); + CPPUNIT_ASSERT( menuFind->FindItem("&Foo") != wxNOT_FOUND ); // and for submenus wxMenu* menuHelp = bar->GetMenu(1); CPPUNIT_ASSERT( menuHelp->FindItem("Submenu") != wxNOT_FOUND ); CPPUNIT_ASSERT( menuHelp->FindItem("Sub&menu") != wxNOT_FOUND ); // Find by position: - for (size_t n=0; n < menuHelp->GetMenuItemCount(); ++n) + size_t n; + for (n=0; n < menuHelp->GetMenuItemCount(); ++n) { CPPUNIT_ASSERT( menuHelp->FindItemByPosition(n) ); } // Find by id: - CPPUNIT_ASSERT( menuHelp->FindItem(MenuTestCase_About) ); - CPPUNIT_ASSERT( menuHelp->FindItem(MenuTestCase_Quit) == NULL ); + CPPUNIT_ASSERT( menuHelp->FindItem(MenuTestCase_Bar) ); + CPPUNIT_ASSERT( menuHelp->FindItem(MenuTestCase_Foo) == NULL ); - for (size_t n=0; n < menuHelp->GetMenuItemCount(); ++n) + for (n=0; n < menuHelp->GetMenuItemCount(); ++n) { size_t locatedAt; wxMenuItem* itemByPos = menuHelp->FindItemByPosition(n); @@ -236,7 +245,7 @@ void MenuTestCase::FindInMenu() } // Find submenu item: - for (size_t n=0; n < menuHelp->GetMenuItemCount(); ++n) + for (n=0; n < menuHelp->GetMenuItemCount(); ++n) { wxMenuItem* item = menuHelp->FindItemByPosition(n); if (item->IsSubMenu()) @@ -264,3 +273,111 @@ void MenuTestCase::Count() } CPPUNIT_ASSERT_EQUAL( count, m_itemCount ); } + +void MenuTestCase::Labels() +{ + wxMenuBar* bar = m_frame->GetMenuBar(); + CPPUNIT_ASSERT( bar ); + wxMenu* filemenu; + wxMenuItem* itemFoo = bar->FindItem(MenuTestCase_Foo, &filemenu); + CPPUNIT_ASSERT( itemFoo ); + CPPUNIT_ASSERT( filemenu ); + + // These return labels including mnemonics/accelerators: + + // wxMenuBar + CPPUNIT_ASSERT_EQUAL( "&File", bar->GetMenuLabel(0) ); + CPPUNIT_ASSERT_EQUAL( "&Foo\tCtrl-F", bar->GetLabel(MenuTestCase_Foo) ); + + // wxMenu + CPPUNIT_ASSERT_EQUAL( "&File", filemenu->GetTitle() ); + CPPUNIT_ASSERT_EQUAL( "&Foo\tCtrl-F", filemenu->GetLabel(MenuTestCase_Foo) ); + + // wxMenuItem + CPPUNIT_ASSERT_EQUAL( "&Foo\tCtrl-F", itemFoo->GetItemLabel() ); + + // These return labels stripped of mnemonics/accelerators: + + // wxMenuBar + CPPUNIT_ASSERT_EQUAL( "File", bar->GetMenuLabelText(0) ); + + // wxMenu + CPPUNIT_ASSERT_EQUAL( "Foo", filemenu->GetLabelText(MenuTestCase_Foo) ); + + // wxMenuItem + CPPUNIT_ASSERT_EQUAL( "Foo", itemFoo->GetItemLabelText() ); + CPPUNIT_ASSERT_EQUAL( "Foo", wxMenuItem::GetLabelText("&Foo\tCtrl-F") ); +} + +void MenuTestCase::RadioItems() +{ + wxMenuBar * const bar = m_frame->GetMenuBar(); + wxMenu * const menu = new wxMenu; + bar->Append(menu, "&Radio"); + + // Adding consecutive radio items creates a radio group. + menu->AppendRadioItem(MenuTestCase_First, "Radio 0"); + menu->AppendRadioItem(MenuTestCase_First + 1, "Radio 1"); + + // First item of a radio group is checked by default. + CPPUNIT_ASSERT( menu->IsChecked(MenuTestCase_First) ); + + // Checking the second one make the first one unchecked however. + menu->Check(MenuTestCase_First + 1, true); + CPPUNIT_ASSERT( !menu->IsChecked(MenuTestCase_First) ); + CPPUNIT_ASSERT( menu->IsChecked(MenuTestCase_First + 1) ); + + // Adding more radio items after a separator creates another radio group... + menu->AppendSeparator(); + menu->AppendRadioItem(MenuTestCase_First + 2, "Radio 2"); + menu->AppendRadioItem(MenuTestCase_First + 3, "Radio 3"); + menu->AppendRadioItem(MenuTestCase_First + 4, "Radio 4"); + + // ... which is independent from the first one. + CPPUNIT_ASSERT( menu->IsChecked(MenuTestCase_First + 2) ); + + menu->Check(MenuTestCase_First + 3, true); + CPPUNIT_ASSERT( menu->IsChecked(MenuTestCase_First + 3) ); + CPPUNIT_ASSERT( !menu->IsChecked(MenuTestCase_First + 2) ); + CPPUNIT_ASSERT( menu->IsChecked(MenuTestCase_First + 1) ); + + + // Insert an item in the middle of an existing radio group. + menu->InsertRadioItem(4, MenuTestCase_First + 5, "Radio 5"); + CPPUNIT_ASSERT( menu->IsChecked(MenuTestCase_First + 3) ); + + menu->Check( MenuTestCase_First + 5, true ); + CPPUNIT_ASSERT( !menu->IsChecked(MenuTestCase_First + 3) ); + + + // Prepend a couple of items before the first group. + menu->PrependRadioItem(MenuTestCase_First + 6, "Radio 6"); + menu->PrependRadioItem(MenuTestCase_First + 7, "Radio 7"); + menu->Check(MenuTestCase_First + 7, true); + CPPUNIT_ASSERT( !menu->IsChecked(MenuTestCase_First + 1) ); + + + // Check that the last radio group still works as expected. + menu->Check(MenuTestCase_First + 4, true); + CPPUNIT_ASSERT( !menu->IsChecked(MenuTestCase_First + 5) ); +} + +void MenuTestCase::RemoveAdd() +{ + wxMenuBar* bar = m_frame->GetMenuBar(); + + wxMenu* menu0 = bar->GetMenu(0); + wxMenu* menu1 = bar->GetMenu(1); + wxMenuItem* item = new wxMenuItem(menu0, MenuTestCase_Foo + 100, "t&ext\tCtrl-E"); + menu0->Insert(0, item); + CPPUNIT_ASSERT( menu0->FindItemByPosition(0) == item ); + menu0->Remove(item); + CPPUNIT_ASSERT( menu0->FindItemByPosition(0) != item ); + menu1->Insert(0, item); + CPPUNIT_ASSERT( menu1->FindItemByPosition(0) == item ); + menu1->Remove(item); + CPPUNIT_ASSERT( menu1->FindItemByPosition(0) != item ); + menu0->Insert(0, item); + CPPUNIT_ASSERT( menu0->FindItemByPosition(0) == item ); + menu0->Delete(item); +}