\r
using namespace GUITestUtils;\r
\r
-class DirFrameTest : public testing::Test\r
+class DirFrameTest : public CommonTest\r
{\r
protected:\r
DirFrameTest()\r
static void SetUpTestCase()\r
{\r
// You can do set-up work for each test here.\r
- std::string dir1 = (getModuleFileName().parent_path() / "..\\..\\Data\\Compare\\Dir1\\").u8string();\r
- std::string dir2 = (getModuleFileName().parent_path() / "..\\..\\Data\\Compare\\Dir2\\").u8string();\r
+ std::string dir1 = (getModuleFolder() / "..\\..\\Data\\Compare\\Dir1\\").u8string();\r
+ std::string dir2 = (getModuleFolder() / "..\\..\\Data\\Compare\\Dir2\\").u8string();\r
m_hwndWinMerge = execWinMerge(("/noprefs /maxmize /r " + dir1 + " " + dir2).c_str());\r
}\r
\r
waitForInputIdleByHWND(m_hwndWinMerge);\r
}\r
\r
- void selectMenu(UINT id)\r
- {\r
- GUITestUtils::selectMenu(m_hwndWinMerge, id);\r
- }\r
-\r
// Objects declared here can be used by all tests in the test case for Foo.\r
- static HWND m_hwndWinMerge;\r
};\r
\r
-HWND DirFrameTest::m_hwndWinMerge = nullptr;\r
-\r
TEST_F(DirFrameTest, FileSaveProject)\r
{\r
- selectMenu(ID_FILE_SAVEPROJECT);\r
- selectMenu(ID_FILE_CLOSE);\r
+ selectMenuAndSaveWindowImage(ID_FILE_SAVEPROJECT);\r
+ selectMenuAndSaveWindowImage(ID_FILE_CLOSE);\r
}\r
\r
TEST_F(DirFrameTest, EditSelectAll)\r
{\r
- selectMenu(ID_EDIT_SELECT_ALL);\r
+ selectMenuAndSaveWindowImage(ID_EDIT_SELECT_ALL);\r
}\r
\r
TEST_F(DirFrameTest, ViewFilters)\r
{\r
- selectMenu(ID_OPTIONS_SHOWIDENTICAL);\r
- selectMenu(ID_OPTIONS_SHOWDIFFERENT);\r
- selectMenu(ID_OPTIONS_SHOWUNIQUELEFT);\r
- selectMenu(ID_OPTIONS_SHOWUNIQUERIGHT);\r
- selectMenu(ID_OPTIONS_SHOWSKIPPED);\r
- selectMenu(ID_OPTIONS_SHOWBINARIES);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWIDENTICAL);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWDIFFERENT);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWUNIQUELEFT);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWUNIQUERIGHT);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWSKIPPED);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWBINARIES);\r
Sleep(500);\r
- selectMenu(ID_OPTIONS_SHOWIDENTICAL);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWIDENTICAL);\r
Sleep(500);\r
- selectMenu(ID_OPTIONS_SHOWDIFFERENT);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWDIFFERENT);\r
Sleep(500);\r
- selectMenu(ID_OPTIONS_SHOWUNIQUELEFT);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWUNIQUELEFT);\r
Sleep(500);\r
- selectMenu(ID_OPTIONS_SHOWUNIQUERIGHT);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWUNIQUERIGHT);\r
Sleep(500);\r
- selectMenu(ID_OPTIONS_SHOWSKIPPED);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWSKIPPED);\r
Sleep(500);\r
- selectMenu(ID_OPTIONS_SHOWBINARIES);\r
+ selectMenuAndSaveWindowImage(ID_OPTIONS_SHOWBINARIES);\r
Sleep(500);\r
}\r
\r
TEST_F(DirFrameTest, ViewTreeMode)\r
{\r
- selectMenu(ID_VIEW_TREEMODE);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_TREEMODE);\r
Sleep(500);\r
- selectMenu(ID_VIEW_TREEMODE);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_TREEMODE);\r
Sleep(500);\r
- selectMenu(ID_VIEW_EXPAND_ALLSUBDIRS);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_EXPAND_ALLSUBDIRS);\r
Sleep(500);\r
- selectMenu(ID_VIEW_COLLAPSE_ALLSUBDIRS);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_COLLAPSE_ALLSUBDIRS);\r
Sleep(500);\r
}\r
\r
TEST_F(DirFrameTest, ViewFont)\r
{\r
- selectMenu(ID_VIEW_SELECTFONT);\r
- HWND hwndDlg = findForegroundDialog();\r
- ASSERT_TRUE(hwndDlg != nullptr);\r
+ HWND hwndDlg = selectOpenDialogMenuAndSaveDialogImage(ID_VIEW_SELECTFONT);\r
if (hwndDlg)\r
{\r
typeText(L"Fixedsys\n");\r
waitUntilClose(hwndDlg);\r
}\r
- selectMenu(ID_VIEW_USEDEFAULTFONT);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_USEDEFAULTFONT);\r
}\r
\r
TEST_F(DirFrameTest, ViewSwapPanes)\r
{\r
- selectMenu(ID_VIEW_SWAPPANES);\r
- selectMenu(ID_VIEW_SWAPPANES);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_SWAPPANES);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_SWAPPANES);\r
}\r
\r
TEST_F(DirFrameTest, ViewCompareStatistics)\r
{\r
- selectMenu(ID_VIEW_DIR_STATISTICS);\r
- HWND hwndDlg = findForegroundDialog();\r
- ASSERT_TRUE(hwndDlg != nullptr);\r
+ HWND hwndDlg = selectOpenDialogMenuAndSaveDialogImage(ID_VIEW_DIR_STATISTICS);\r
if (hwndDlg)\r
{\r
typeText(L"\x1b");\r
\r
TEST_F(DirFrameTest, ViewRefresh)\r
{\r
- selectMenu(ID_REFRESH);\r
- selectMenu(ID_EDIT_SELECT_ALL);\r
- selectMenu(ID_RESCAN);\r
+ selectMenuAndSaveWindowImage(ID_REFRESH);\r
+ selectMenuAndSaveWindowImage(ID_EDIT_SELECT_ALL);\r
+ selectMenuAndSaveWindowImage(ID_RESCAN);\r
Sleep(2000);\r
}\r
\r
\r
namespace GUITestUtils\r
{\r
+ bool saveWindowImageAsPNG(HWND hwnd, const std::filesystem::path& filename);\r
DWORD waitForInputIdleByHWND(HWND hwnd, DWORD dwMilliseconds = WAIT_TIMEOUT);\r
HWND findForegroundDialog();\r
void typeText(const wchar_t *text);\r
void typeAltPlusKey(char key);\r
std::filesystem::path getModuleFileName();\r
+ std::filesystem::path getModuleFolder();\r
void waitUntilClose(HWND hwnd);\r
void waitUntilFocus(HWND hwnd);\r
- void selectMenu(HWND hwnd, unsigned id);\r
+ void selectMenu(HWND hwnd, unsigned id, bool async = false);\r
+ inline void selectMenuAsync(HWND hwnd, unsigned id) { selectMenu(hwnd, id, true); };\r
HWND execWinMerge(const std::string& args = "/noprefs /maxmize");\r
+\r
}\r
+\r
+#define selectMenuAndSaveWindowImage(id) { selectMenu(id); saveImage(#id); }\r
+#define selectOpenDialogMenuAndSaveDialogImage(id) ([this](){ HWND hwnd = selectOpenDialogMenu(id); saveForegroundDialogImage(#id); return hwnd; })()\r
+\r
+class CommonTest : public testing::Test\r
+{\r
+public:\r
+ void selectMenu(UINT id)\r
+ {\r
+ GUITestUtils::selectMenu(m_hwndWinMerge, id);\r
+ }\r
+\r
+ HWND selectOpenDialogMenu(UINT id)\r
+ {\r
+ GUITestUtils::selectMenuAsync(m_hwndWinMerge, id);\r
+ HWND hwndDlg = GUITestUtils::findForegroundDialog();\r
+ return hwndDlg;\r
+ }\r
+\r
+ static std::filesystem::path getScreenshotFolderPath()\r
+ {\r
+ return GUITestUtils::getModuleFolder() / L"../../../Build/Screenshot/";\r
+ }\r
+\r
+ static std::filesystem::path getScreenshotFilePath(const char *id = nullptr)\r
+ {\r
+ std::string basename = ::testing::UnitTest::GetInstance()->current_test_info()->test_case_name();\r
+ basename.append(".");\r
+ basename.append(::testing::UnitTest::GetInstance()->current_test_info()->name());\r
+ if (id)\r
+ {\r
+ basename.append(".");\r
+ basename.append(id);\r
+ }\r
+ std::filesystem::path path = getScreenshotFolderPath() / (basename + ".png");\r
+ int i = 2;\r
+ while (std::filesystem::exists(path))\r
+ {\r
+ path = getScreenshotFolderPath() / (basename + "(" + std::to_string(i) + ").png");\r
+ ++i;\r
+ }\r
+ return path;\r
+ }\r
+\r
+ void saveImage(const char *id = nullptr)\r
+ {\r
+ ASSERT_TRUE(GUITestUtils::saveWindowImageAsPNG(m_hwndWinMerge, getScreenshotFilePath(id)));\r
+ }\r
+\r
+ void saveForegroundDialogImage(const char *id = "")\r
+ {\r
+ HWND hwndDlg = GUITestUtils::findForegroundDialog();\r
+ ASSERT_TRUE(hwndDlg != nullptr);\r
+ if (hwndDlg)\r
+ ASSERT_TRUE(GUITestUtils::saveWindowImageAsPNG(hwndDlg, getScreenshotFilePath(id)));\r
+ }\r
+\r
+protected:\r
+ static HWND m_hwndWinMerge;\r
+};\r
\r
using namespace GUITestUtils;\r
\r
-class MainFrameTest : public testing::Test\r
+class MainFrameTest : public CommonTest\r
{\r
protected:\r
MainFrameTest()\r
{\r
// You can do set-up work for each test here.\r
m_hwndWinMerge = execWinMerge();\r
+ std::error_code ec;\r
+ std::filesystem::create_directory(getScreenshotFolderPath(), ec);\r
}\r
\r
static void TearDownTestCase()\r
// before the destructor).\r
ASSERT_TRUE(IsWindow(m_hwndWinMerge));\r
waitForInputIdleByHWND(m_hwndWinMerge);\r
- }\r
-\r
- void selectMenu(UINT id)\r
- {\r
- GUITestUtils::selectMenu(m_hwndWinMerge, id);\r
+ SendMessage(m_hwndWinMerge, WM_COMMAND, ID_WINDOW_CLOSEALL, 0);\r
}\r
\r
// Objects declared here can be used by all tests in the test case for Foo.\r
- static HWND m_hwndWinMerge;\r
};\r
\r
-HWND MainFrameTest::m_hwndWinMerge = nullptr;\r
-\r
TEST_F(MainFrameTest, FileNew)\r
{\r
- selectMenu(ID_FILE_NEW);\r
- selectMenu(ID_WINDOW_CLOSEALL);\r
+ selectMenuAndSaveWindowImage(ID_FILE_NEW);\r
}\r
\r
TEST_F(MainFrameTest, FileNew3)\r
{\r
- selectMenu(ID_FILE_NEW3);\r
- selectMenu(ID_WINDOW_CLOSEALL);\r
+ selectMenuAndSaveWindowImage(ID_FILE_NEW3);\r
}\r
\r
TEST_F(MainFrameTest, FileOpen)\r
{\r
- selectMenu(ID_FILE_OPEN);\r
- selectMenu(ID_WINDOW_CLOSEALL);\r
+ selectMenuAndSaveWindowImage(ID_FILE_OPEN);\r
}\r
\r
TEST_F(MainFrameTest, FileOpenConflict)\r
{\r
- selectMenu(ID_FILE_OPENCONFLICT);\r
- HWND hwndOpen = findForegroundDialog();\r
- ASSERT_TRUE(hwndOpen != nullptr);\r
+ HWND hwndOpen = selectOpenDialogMenuAndSaveDialogImage(ID_FILE_OPENCONFLICT);\r
if (hwndOpen)\r
{\r
- typeText((getModuleFileName().parent_path() / "..\\..\\Data\\big_file.conflict\n").c_str());\r
+ typeText((getModuleFolder() / "..\\..\\Data\\big_file.conflict\n").c_str());\r
waitUntilClose(hwndOpen);\r
}\r
- selectMenu(ID_WINDOW_CLOSEALL);\r
- HWND hwndSave = findForegroundDialog();\r
- ASSERT_TRUE(hwndSave != nullptr);\r
+ HWND hwndSave = selectOpenDialogMenuAndSaveDialogImage(ID_WINDOW_CLOSEALL);\r
if (hwndSave)\r
{\r
typeAltPlusKey('R');\r
\r
TEST_F(MainFrameTest, FileOpenProject)\r
{\r
- selectMenu(ID_FILE_OPENPROJECT);\r
- HWND hwndDlg = findForegroundDialog();\r
- ASSERT_TRUE(hwndDlg != nullptr);\r
+ HWND hwndDlg = selectOpenDialogMenuAndSaveDialogImage(ID_FILE_OPENPROJECT);\r
if (hwndDlg)\r
{\r
- typeText((getModuleFileName().parent_path() / "..\\..\\Data\\Dir2.WinMerge\n").c_str());\r
+ typeText((getModuleFolder() / "..\\..\\Data\\Dir2.WinMerge\n").c_str());\r
waitUntilClose(hwndDlg);\r
Sleep(1000);\r
}\r
- selectMenu(ID_WINDOW_CLOSEALL);\r
}\r
\r
TEST_F(MainFrameTest, FileSaveProject)\r
{\r
- selectMenu(ID_FILE_SAVEPROJECT);\r
- selectMenu(ID_WINDOW_CLOSEALL);\r
+ selectMenuAndSaveWindowImage(ID_FILE_SAVEPROJECT);\r
}\r
\r
TEST_F(MainFrameTest, EditOptions)\r
{\r
- selectMenu(ID_OPTIONS);\r
- HWND hwndDlg = findForegroundDialog();\r
- ASSERT_TRUE(hwndDlg != nullptr);\r
+ HWND hwndDlg = selectOpenDialogMenuAndSaveDialogImage(ID_OPTIONS);\r
if (hwndDlg)\r
{\r
typeText(L"\x1b");\r
\r
TEST_F(MainFrameTest, ViewToolbar)\r
{\r
- selectMenu(ID_TOOLBAR_NONE);\r
- selectMenu(ID_TOOLBAR_SMALL);\r
- selectMenu(ID_TOOLBAR_NONE);\r
- selectMenu(ID_TOOLBAR_BIG);\r
- selectMenu(ID_TOOLBAR_NONE);\r
- selectMenu(ID_TOOLBAR_HUGE);\r
- selectMenu(ID_TOOLBAR_NONE);\r
- selectMenu(ID_TOOLBAR_SMALL);\r
+ selectMenuAndSaveWindowImage(ID_TOOLBAR_NONE);\r
+ selectMenuAndSaveWindowImage(ID_TOOLBAR_SMALL);\r
+ selectMenuAndSaveWindowImage(ID_TOOLBAR_NONE);\r
+ selectMenuAndSaveWindowImage(ID_TOOLBAR_BIG);\r
+ selectMenuAndSaveWindowImage(ID_TOOLBAR_NONE);\r
+ selectMenuAndSaveWindowImage(ID_TOOLBAR_HUGE);\r
+ selectMenuAndSaveWindowImage(ID_TOOLBAR_NONE);\r
+ selectMenuAndSaveWindowImage(ID_TOOLBAR_SMALL);\r
}\r
\r
TEST_F(MainFrameTest, ViewStatusBar)\r
{\r
- selectMenu(ID_VIEW_STATUS_BAR);\r
- selectMenu(ID_VIEW_STATUS_BAR);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_STATUS_BAR);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_STATUS_BAR);\r
}\r
\r
TEST_F(MainFrameTest, ViewTabBar)\r
{\r
- selectMenu(ID_VIEW_TAB_BAR);\r
- selectMenu(ID_VIEW_TAB_BAR);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_TAB_BAR);\r
+ selectMenuAndSaveWindowImage(ID_VIEW_TAB_BAR);\r
}\r
\r
TEST_F(MainFrameTest, ToolsFilters)\r
{\r
- selectMenu(ID_TOOLS_FILTERS);\r
- HWND hwndDlg = findForegroundDialog();\r
- ASSERT_TRUE(hwndDlg != nullptr);\r
+ HWND hwndDlg = selectOpenDialogMenuAndSaveDialogImage(ID_TOOLS_FILTERS);\r
if (hwndDlg)\r
{\r
typeText(L"\x1b");\r
\r
TEST_F(MainFrameTest, ToolsGeneratePatch)\r
{\r
- selectMenu(ID_TOOLS_GENERATEPATCH);\r
- HWND hwndDlg = findForegroundDialog();\r
- ASSERT_TRUE(hwndDlg != nullptr);\r
+ HWND hwndDlg = selectOpenDialogMenuAndSaveDialogImage(ID_TOOLS_GENERATEPATCH);\r
if (hwndDlg)\r
{\r
typeText(L"\x1b");\r
\r
TEST_F(MainFrameTest, PluginsSettings)\r
{\r
- selectMenu(ID_PLUGINS_LIST);\r
- HWND hwndDlg = findForegroundDialog();\r
- ASSERT_TRUE(hwndDlg != nullptr);\r
+ HWND hwndDlg = selectOpenDialogMenuAndSaveDialogImage(ID_PLUGINS_LIST);\r
if (hwndDlg)\r
{\r
typeText(L"\x1b");\r
\r
TEST_F(MainFrameTest, PluginsPrediffer)\r
{\r
- selectMenu(ID_PREDIFFER_AUTO);\r
- selectMenu(ID_PREDIFFER_MANUAL);\r
+ selectMenuAndSaveWindowImage(ID_PREDIFFER_AUTO);\r
+ selectMenuAndSaveWindowImage(ID_PREDIFFER_MANUAL);\r
}\r
\r
TEST_F(MainFrameTest, PluginsUnpacker)\r
{\r
- selectMenu(ID_UNPACK_AUTO);\r
- selectMenu(ID_UNPACK_MANUAL);\r
+ selectMenuAndSaveWindowImage(ID_UNPACK_AUTO);\r
+ selectMenuAndSaveWindowImage(ID_UNPACK_MANUAL);\r
}\r
\r
TEST_F(MainFrameTest, PluginsReload)\r
{\r
- selectMenu(ID_RELOAD_PLUGINS);\r
+ selectMenuAndSaveWindowImage(ID_RELOAD_PLUGINS);\r
}\r
\r
TEST_F(MainFrameTest, WindowClose)\r
{\r
- selectMenu(ID_FILE_NEW);\r
- selectMenu(ID_FILE_CLOSE);\r
+ selectMenuAndSaveWindowImage(ID_FILE_NEW);\r
+ selectMenuAndSaveWindowImage(ID_FILE_CLOSE);\r
}\r
\r
TEST_F(MainFrameTest, WindowCloseAll)\r
{\r
- selectMenu(ID_FILE_NEW);\r
- selectMenu(ID_FILE_NEW);\r
- selectMenu(ID_WINDOW_CLOSEALL);\r
+ selectMenuAndSaveWindowImage(ID_FILE_NEW);\r
+ selectMenuAndSaveWindowImage(ID_FILE_NEW);\r
+ selectMenuAndSaveWindowImage(ID_WINDOW_CLOSEALL);\r
}\r
\r
TEST_F(MainFrameTest, WindowChangePane)\r
{\r
- selectMenu(ID_FILE_NEW);\r
- selectMenu(ID_WINDOW_CHANGE_PANE);\r
- selectMenu(ID_WINDOW_CLOSEALL);\r
+ selectMenuAndSaveWindowImage(ID_FILE_NEW);\r
+ selectMenuAndSaveWindowImage(ID_WINDOW_CHANGE_PANE);\r
}\r
\r
TEST_F(MainFrameTest, WindowArrangement)\r
{\r
- selectMenu(ID_FILE_NEW);\r
- selectMenu(ID_FILE_NEW);\r
- selectMenu(ID_WINDOW_TILE_HORZ);\r
- selectMenu(ID_WINDOW_TILE_VERT);\r
- selectMenu(ID_WINDOW_CASCADE);\r
- selectMenu(ID_WINDOW_CLOSEALL);\r
+ selectMenuAndSaveWindowImage(ID_FILE_NEW);\r
+ selectMenuAndSaveWindowImage(ID_FILE_NEW);\r
+ selectMenuAndSaveWindowImage(ID_WINDOW_TILE_HORZ);\r
+ selectMenuAndSaveWindowImage(ID_WINDOW_TILE_VERT);\r
+ selectMenuAndSaveWindowImage(ID_WINDOW_CASCADE);\r
}\r
\r
TEST_F(MainFrameTest, HelpWinMergeHelp)\r
{\r
- selectMenu(ID_HELP_CONTENTS);\r
+ selectMenuAndSaveWindowImage(ID_HELP_CONTENTS);\r
Sleep(1000);\r
SwitchToThisWindow(m_hwndWinMerge, TRUE);\r
}\r
\r
TEST_F(MainFrameTest, HelpReleaseNotes)\r
{\r
- selectMenu(ID_HELP_RELEASENOTES);\r
+ selectMenuAndSaveWindowImage(ID_HELP_RELEASENOTES);\r
Sleep(1000);\r
SwitchToThisWindow(m_hwndWinMerge, TRUE);\r
}\r
\r
TEST_F(MainFrameTest, HelpTranslations)\r
{\r
- selectMenu(ID_HELP_TRANSLATIONS);\r
+ selectMenuAndSaveWindowImage(ID_HELP_TRANSLATIONS);\r
Sleep(1000);\r
SwitchToThisWindow(m_hwndWinMerge, TRUE);\r
}\r
\r
TEST_F(MainFrameTest, HelpConfiguraiton)\r
{\r
- selectMenu(ID_HELP_GETCONFIG);\r
+ selectMenuAndSaveWindowImage(ID_HELP_GETCONFIG);\r
Sleep(1000);\r
SwitchToThisWindow(m_hwndWinMerge, TRUE);\r
}\r
\r
TEST_F(MainFrameTest, HelpGNULicense)\r
{\r
- selectMenu(ID_HELP_GNULICENSE);\r
+ selectMenuAndSaveWindowImage(ID_HELP_GNULICENSE);\r
Sleep(1000);\r
SwitchToThisWindow(m_hwndWinMerge, TRUE);\r
}\r
\r
TEST_F(MainFrameTest, HelpAbout)\r
{\r
- selectMenu(ID_APP_ABOUT);\r
- HWND hwndDlg = findForegroundDialog();\r
- ASSERT_TRUE(hwndDlg != nullptr);\r
+ HWND hwndDlg = selectOpenDialogMenuAndSaveDialogImage(ID_APP_ABOUT);\r
if (hwndDlg)\r
{\r
typeText(L"\x1b");\r