OSDN Git Service

GUITests: Add more tests (5)
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 4 Aug 2019 14:26:54 +0000 (23:26 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 4 Aug 2019 14:26:54 +0000 (23:26 +0900)
Testing/GoogleTest/GUITests/DirFrameTest.cpp
Testing/GoogleTest/GUITests/GUITestUtils.cpp
Testing/GoogleTest/GUITests/GUITestUtils.h
Testing/GoogleTest/GUITests/MainFrameTest.cpp

index c92beb5..fde552d 100644 (file)
@@ -57,6 +57,68 @@ protected:
        // Objects declared here can be used by all tests in the test case for Foo.\r
 };\r
 \r
+TEST_F(DirFrameTest, Menus)\r
+{\r
+       // System menu\r
+       typeAltPlusKey(' ');\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("MDIChildSystem");\r
+       // File menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("File");\r
+       // File/ReadOnly menu\r
+       for (int i = 0; i < 6; ++i)\r
+               typeKey(VK_DOWN);\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("FileReadOnly");\r
+       // Edit menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Edit");\r
+       // View menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("View");\r
+       // View/3-way Compare menu\r
+       for (int i = 0; i < 7; ++i)\r
+               typeKey(VK_DOWN);\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("View3WayCompare");\r
+       typeKey(VK_LEFT);\r
+       // View/Toolbar\r
+       for (int i = 0; i < 8; ++i)\r
+               typeKey(VK_DOWN);\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("ViewToolbar");\r
+       // Merge menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Merge");\r
+       // Tools menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Tools");\r
+       // Plugins menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Plugins");\r
+       // Window menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Window");\r
+       // Help menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Help");\r
+       // Close menu\r
+       typeKey(VK_MENU);\r
+}\r
+\r
 TEST_F(DirFrameTest, FileSaveProject)\r
 {\r
        selectMenuAndSaveWindowImage(ID_FILE_SAVEPROJECT);\r
@@ -151,8 +213,7 @@ TEST_F(DirFrameTest, ToolsCustomizeColumns)
 \r
 TEST_F(DirFrameTest, ToolsGeneratePatch)\r
 {\r
-       keybd_event(VK_END, 0, 0, 0);\r
-       keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0);\r
+       typeKey(VK_END);\r
        HWND hwndDlg = selectOpenDialogMenuAndSaveDialogImage(ID_TOOLS_GENERATEPATCH);\r
        if (hwndDlg)\r
        {\r
index 6b130ed..cf2ec79 100644 (file)
@@ -1,4 +1,7 @@
 #include "pch.h"\r
+#include <dwmapi.h>\r
+\r
+#pragma comment(lib, "dwmapi.lib")\r
 \r
 namespace GUITestUtils\r
 {\r
@@ -6,11 +9,13 @@ namespace GUITestUtils
 bool saveWindowImageAsPNG(HWND hwnd, const std::filesystem::path& filename)\r
 {\r
        RECT rc{};\r
-       GetWindowRect(hwnd, &rc);\r
+       DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &rc, sizeof(RECT));\r
        CImage img;\r
        img.Create(rc.right - rc.left, rc.bottom - rc.top, 24);\r
-       PrintWindow(hwnd, img.GetDC(), 0);\r
+       HDC hdc = GetDC(nullptr);\r
+       BitBlt(img.GetDC(), 0, 0, rc.right - rc.left, rc.bottom - rc.top, hdc, rc.left, rc.top, SRCCOPY);\r
        img.ReleaseDC();\r
+       ReleaseDC(nullptr, hdc);\r
        return SUCCEEDED(img.Save(filename.c_str(), Gdiplus::ImageFormatPNG));\r
 }\r
 \r
@@ -84,6 +89,12 @@ void typeAltPlusKey(char key)
        keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);\r
 }\r
 \r
+void typeKey(unsigned char vk)\r
+{\r
+       keybd_event(vk, 0, 0, 0);\r
+       keybd_event(vk, 0, KEYEVENTF_KEYUP, 0);\r
+}\r
+\r
 std::filesystem::path getModuleFileName()\r
 {\r
        wchar_t szPath[256];\r
index da0bbf5..bbb3582 100644 (file)
@@ -8,6 +8,7 @@ namespace GUITestUtils
        HWND findForegroundDialog();\r
        void typeText(const wchar_t *text);\r
        void typeAltPlusKey(char key);\r
+       void typeKey(unsigned char vk);\r
        std::filesystem::path getModuleFileName();\r
        std::filesystem::path getModuleFolder();\r
        bool isMenuItemChecked(HWND hwnd, int id);\r
index 39428f9..9bac804 100644 (file)
@@ -56,6 +56,47 @@ protected:
        // Objects declared here can be used by all tests in the test case for Foo.\r
 };\r
 \r
+TEST_F(MainFrameTest, Menus)\r
+{\r
+       // System menu\r
+       typeAltPlusKey(' ');\r
+       saveForegroundWindowImage("System");\r
+       // File menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("File");\r
+       // Edit menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Edit");\r
+       // View menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("View");\r
+       // View/Toolbar menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("ViewToolbar");\r
+       // Tools menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Tools");\r
+       // Plugins menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Plugins");\r
+       // Window menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Window");\r
+       // Help menu\r
+       typeKey(VK_RIGHT);\r
+       Sleep(200);\r
+       saveForegroundWindowImage("Help");\r
+       // Close menu\r
+       typeKey(VK_MENU);\r
+}\r
+\r
 TEST_F(MainFrameTest, FileNew)\r
 {\r
        selectMenuAndSaveWindowImage(ID_FILE_NEW);\r