2 #include <filesystem>
\r
5 namespace GUITestUtils
\r
7 time_t getStartTime();
\r
8 bool saveWindowImageAsPNG(HWND hwnd, const std::filesystem::path& filename);
\r
9 DWORD waitForInputIdleByHWND(HWND hwnd, DWORD dwMilliseconds = WAIT_TIMEOUT);
\r
10 HWND findForegroundDialog();
\r
11 void typeText(const wchar_t *text);
\r
12 void typeAltPlusKey(char key);
\r
13 void typeKey(unsigned char vk);
\r
16 void setFocusDlgItem(HWND hwnd, int id);
\r
17 std::filesystem::path getModuleFileName();
\r
18 std::filesystem::path getModuleFolder();
\r
19 bool isMenuItemChecked(HWND hwnd, int id);
\r
20 void waitUntilClose(HWND hwnd);
\r
21 void waitUntilFocus(HWND hwnd);
\r
22 void waitUntilProcessExit(HWND hwnd);
\r
23 void selectMenu(HWND hwnd, unsigned id, bool async = false);
\r
24 inline void selectMenuAsync(HWND hwnd, unsigned id) { selectMenu(hwnd, id, true); };
\r
25 HWND execWinMerge(const std::string& args = "/noprefs /maxmize");
\r
26 HWND execInstaller(const std::string& args = "");
\r
27 const std::set<int> languages();
\r
28 const char * languageIdToName(int id);
\r
31 #define selectMenuAndSaveWindowImage(id) selectMenuAndSaveWindowImageHelper(id, #id)
\r
32 #define selectOpenDialogMenuAndSaveDialogImage(id) selectOpenDialogMenuAndSaveDialogImageHelper(id, #id)
\r
34 class CommonTest : public testing::TestWithParam<int>
\r
37 void selectMenu(UINT id)
\r
39 GUITestUtils::selectMenu(m_hwndWinMerge, id);
\r
42 void selectMenuAsync(UINT id)
\r
44 GUITestUtils::selectMenu(m_hwndWinMerge, id, true);
\r
47 void selectYesOnFileNavConfirmationMessageBox()
\r
49 HWND foreground = GetForegroundWindow();
\r
52 int cTxtLen = GetWindowTextLength(foreground);
\r
53 // Expecting message box title "WinMerge" in File navigation confirmations
\r
54 // for Tests not run in English, tbd, needed?
\r
57 LPWSTR pszMem = (LPWSTR)VirtualAlloc((LPVOID)NULL, (DWORD)(cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE);
\r
58 GetWindowText(foreground, pszMem, cTxtLen + 1);
\r
59 if (wcscmp(pszMem, L"WinMerge") == 0)
\r
61 GUITestUtils::typeKey(VK_RETURN);
\r
63 VirtualFree(pszMem, 0, MEM_RELEASE);
\r
68 void selectMenuAndSaveWindowImageHelper(UINT id, const char *str)
\r
72 if (GUITestUtils::isMenuItemChecked(m_hwndWinMerge, id))
\r
73 saveImage((std::string(str) + ".Checked").c_str());
\r
78 HWND selectOpenDialogMenu(UINT id)
\r
80 GUITestUtils::selectMenuAsync(m_hwndWinMerge, id);
\r
81 HWND hwndDlg = GUITestUtils::findForegroundDialog();
\r
85 HWND selectOpenDialogMenuAndSaveDialogImageHelper(UINT id, const char *str)
\r
87 HWND hwnd = selectOpenDialogMenu(id);
\r
89 saveForegroundDialogImage(str);
\r
93 std::filesystem::path getScreenshotFolderPath()
\r
95 std::filesystem::path screenshotFolder;
\r
98 time_t t = GUITestUtils::getStartTime();
\r
99 localtime_s(&tm, &t);
\r
100 strftime(buf, sizeof buf, "%FT%H%M%S", &tm);
\r
101 screenshotFolder = GUITestUtils::getModuleFolder() / "..\\..\\..\\Build\\GUITests\\Screenshots" / buf / GUITestUtils::languageIdToName(GetParam());
\r
102 std::error_code ec;
\r
103 std::filesystem::create_directories(screenshotFolder, ec);
\r
104 return screenshotFolder;
\r
107 std::filesystem::path getScreenshotFilePath(const char *id = nullptr)
\r
109 std::string basename = GUITestUtils::languageIdToName(GetParam());
\r
110 basename.append(".");
\r
111 basename.append(::testing::UnitTest::GetInstance()->current_test_info()->test_case_name());
\r
112 basename.append(".");
\r
113 basename.append(::testing::UnitTest::GetInstance()->current_test_info()->name());
\r
116 basename.append(".");
\r
117 basename.append(id);
\r
119 for (auto& c : basename)
\r
124 std::filesystem::path path = getScreenshotFolderPath() / (basename + ".png");
\r
126 while (std::filesystem::exists(path))
\r
128 path = getScreenshotFolderPath() / (basename + "(" + std::to_string(i) + ").png");
\r
134 void saveImage(const char *id = nullptr)
\r
136 ASSERT_TRUE(GUITestUtils::saveWindowImageAsPNG(m_hwndWinMerge, getScreenshotFilePath(id)));
\r
139 void saveForegroundDialogImage(const char *id = "")
\r
141 HWND hwndDlg = GUITestUtils::findForegroundDialog();
\r
142 ASSERT_TRUE(hwndDlg != nullptr);
\r
144 ASSERT_TRUE(GUITestUtils::saveWindowImageAsPNG(hwndDlg, getScreenshotFilePath(id)));
\r
147 void saveForegroundWindowImage(const char *id = "")
\r
149 HWND hwnd = GetForegroundWindow();
\r
150 ASSERT_TRUE(hwnd != nullptr);
\r
152 ASSERT_TRUE(GUITestUtils::saveWindowImageAsPNG(hwnd, getScreenshotFilePath(id)));
\r
156 HWND m_hwndWinMerge = nullptr;
\r