Files
kefu/wechat_rpa/test_desktop_window.py
T
2026-09-21 10:34:06 +08:00

89 lines
3.6 KiB
Python

"""Window controls remain usable after removing the native desktop frame."""
import os
from unittest import TestCase, main, mock
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
from PySide6.QtCore import QPoint, Qt
from PySide6.QtTest import QTest
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget
from desktop_window import DesktopWindowBar
class DesktopWindowTest(TestCase):
@classmethod
def setUpClass(cls):
cls.app = QApplication.instance() or QApplication([])
def setUp(self):
self.window = QMainWindow()
self.window.resize(1000, 700)
self.bar = DesktopWindowBar(self.window)
self.window.setMenuBar(self.bar)
self.window.setCentralWidget(QWidget())
self.account = self.bar.addMenu("账号 · admin")
self.account.addAction("退出登录")
self.window.show()
self.app.processEvents()
def tearDown(self):
self.window.close()
self.window.deleteLater()
self.app.processEvents()
def test_buttons_minimize_restore_maximize_and_close(self):
self.assertTrue(self.window.windowFlags() & Qt.FramelessWindowHint)
self.bar.minimize_button.click()
self.assertTrue(self.window.isMinimized())
self.window.showNormal()
self.bar.maximize_button.click()
self.assertTrue(self.window.isMaximized())
self.assertEqual(self.bar.maximize_button.accessibleName(), "还原")
self.bar.maximize_button.click()
self.assertFalse(self.window.isMaximized())
self.assertEqual(self.bar.maximize_button.accessibleName(), "最大化")
self.bar.close_button.click()
self.assertFalse(self.window.isVisible())
def test_blank_header_moves_and_double_click_maximizes(self):
handle = mock.Mock()
with mock.patch.object(self.window, "windowHandle", return_value=handle):
QTest.mouseClick(self.bar, Qt.LeftButton, pos=QPoint(400, 16))
handle.startSystemMove.assert_called_once_with()
QTest.mouseDClick(self.bar, Qt.LeftButton, pos=QPoint(400, 16))
self.assertTrue(self.window.isMaximized())
QTest.mouseDClick(self.bar, Qt.LeftButton, pos=QPoint(400, 16))
self.assertFalse(self.window.isMaximized())
def test_account_menu_stays_available(self):
handle = mock.Mock()
point = self.bar.actionGeometry(self.account.menuAction()).center()
with mock.patch.object(self.window, "windowHandle", return_value=handle):
QTest.mouseClick(self.bar, Qt.LeftButton, pos=point)
handle.startSystemMove.assert_not_called()
self.assertTrue(self.account.isVisible())
self.assertEqual(self.account.actions()[0].text(), "退出登录")
self.account.hide()
def test_edges_resize_without_visible_frame_and_hide_when_maximized(self):
for edges, grip in self.bar._resize_handles.items():
with self.subTest(edges=edges):
self.assertTrue(self.window.rect().contains(grip.geometry()))
self.assertTrue(grip.isVisible())
handle = mock.Mock()
with mock.patch.object(self.window, "windowHandle", return_value=handle):
QTest.mouseClick(grip, Qt.LeftButton)
handle.startSystemResize.assert_called_once_with(edges)
self.window.showMaximized()
self.app.processEvents()
self.assertTrue(all(grip.isHidden() for grip in self.bar._resize_handles.values()))
self.window.showNormal()
self.app.processEvents()
self.assertTrue(all(grip.isVisible() for grip in self.bar._resize_handles.values()))
if __name__ == "__main__":
main()