15 #ifndef INCG_IRIS_IUTEST_UTIL_MENU_HPP_52925DE1_A4AE_4CCB_B524_8E97AA73E03D_
16 #define INCG_IRIS_IUTEST_UTIL_MENU_HPP_52925DE1_A4AE_4CCB_B524_8E97AA73E03D_
22 #if defined(IUTEST_OS_WINDOWS)
36 typedef ::std::map<WORD, const ::iutest::TestInfo*> TestInfoMap;
37 typedef ::std::map<WORD, const ::iutest::TestCase*> TestCaseMap;
41 TestInfoMap m_TestInfoList;
42 TestCaseMap m_TestCaseList;
44 explicit TestMenu(WORD nIDTop) : m_nIDTop(nIDTop), m_nID(nIDTop), m_hRootMenu(NULL) {}
46 bool Create(HMENU hMenu)
52 if( m_hRootMenu == NULL )
59 return AppendPopup(hMenu,
"TestList", m_hRootMenu);
64 HMENU hRoot = CreateMenu();
70 Append(hRoot,
"以下をすべて実行", m_nID);
75 for(
int i=0; i < testcase_count; ++i )
77 const ::iutest::TestCase* pTestCase = pUnitTest->
GetTestCase(i);
79 HMENU hTestCase = AppendPopup(hRoot, pTestCase->name());
80 Append(hTestCase,
"以下をすべて実行", m_nID);
81 #if IUTEST_HAS_STD_EMPLACE
82 m_TestCaseList.emplace(m_nID, pTestCase);
84 m_TestCaseList.insert( ::std::pair<WORD, const ::iutest::TestCase*>(m_nID, pTestCase) );
87 for(
int j=0; j < test_count; ++j )
89 const ::iutest::TestInfo* pTestInfo = pTestCase->GetTestInfo(j);
90 Append(hTestCase, pTestInfo->name(), m_nID);
91 #if IUTEST_HAS_STD_EMPLACE
92 m_TestInfoList.emplace(m_nID, pTestInfo);
94 m_TestInfoList.insert(::std::pair<WORD, const ::iutest::TestInfo*>(m_nID, pTestInfo));
103 bool OnCommand(WORD wID)
105 if( wID == m_nIDTop )
112 TestInfoMap::iterator it = m_TestInfoList.find(wID);
113 if( it != m_TestInfoList.end() )
120 TestCaseMap::iterator it = m_TestCaseList.find(wID);
121 if( it != m_TestCaseList.end() )
123 ::std::string filter = it->second->name();
132 bool TrackPopupMenu(HWND hWnd, POINT point)
134 if ( !::TrackPopupMenu(m_hRootMenu
135 , TPM_LEFTALIGN | TPM_BOTTOMALIGN
148 static bool Append(HMENU hMenu,
const char* lpszName, WORD nID)
151 MENUITEMINFOA mii = {0};
152 mii.cbSize =
sizeof(mii);
153 mii.fMask = MIIM_ID | MIIM_TYPE;
154 mii.fType = MFT_STRING;
155 mii.dwTypeData = str;
157 strcpy_s(str, lpszName);
158 const int num = ::GetMenuItemCount(hMenu);
159 if( !::InsertMenuItemA(hMenu, num, TRUE, &mii) )
165 static bool AppendPopup(HMENU hMenu,
const char* lpszName, HMENU hSubMenu)
168 MENUITEMINFOA mii = {0};
169 mii.cbSize =
sizeof(mii);
170 mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_SUBMENU;
171 mii.fType = MFT_STRING;
172 mii.dwTypeData = str;
173 mii.hSubMenu = hSubMenu;
174 strcpy_s(str, lpszName);
175 const int num = ::GetMenuItemCount(hMenu);
176 if( !::InsertMenuItemA(hMenu, num, TRUE, &mii) )
182 static HMENU AppendPopup(HMENU hMenu,
const char* lpszName)
184 HMENU hSubMenu = CreateMenu();
185 if( !AppendPopup(hMenu, lpszName, hSubMenu) )
187 DestroyMenu(hSubMenu);
198 #endif // INCG_IRIS_IUTEST_MENU_TESTS_HPP_52925DE1_A4AE_4CCB_B524_8E97AA73E03D_