"""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()