This commit is contained in:
Your Name
2026-08-27 14:04:28 +08:00
parent f7720831be
commit 334890171e
3016 changed files with 263403 additions and 27971 deletions
+103
View File
@@ -394,6 +394,109 @@ class MainWindowMinimizeTest(TestCase):
self.assertTrue(self.window.isVisible())
self.assertTrue(self.window.isMaximized())
def test_starting_the_listener_switches_to_capsule_by_itself(self):
"""开始监听就收进胶囊:控制台不该挡在企业微信前面。"""
self.assertFalse(self.window.capsule.isVisible())
self.window._running = True
self.window.enter_capsule_mode()
self.app.processEvents()
self.assertTrue(self.window.capsule.isVisible())
self.assertFalse(self.window.isVisible())
def test_entering_capsule_twice_is_harmless(self):
self.window._running = True
self.window.enter_capsule_mode()
self.app.processEvents()
geometry = self.window._saved_geometry
self.window.enter_capsule_mode()
self.app.processEvents()
# 第二次不能把"已经藏起来"的几何当成要恢复的几何存进去
self.assertIs(self.window._saved_geometry, geometry)
self.assertTrue(self.window.capsule.isVisible())
@skipUnless(QApplication is not None, "当前测试环境未安装 PySide6")
class SidebarMonitorToggleTest(TestCase):
"""侧栏底部整块状态区都要能启动/暂停,不能只有那颗球能点。"""
@classmethod
def setUpClass(cls):
cls.app = QApplication.instance() or QApplication([])
cls.app.setStyleSheet(APP_QSS)
def setUp(self):
from wechat_gui_qt import Sidebar
self.sidebar = Sidebar()
self.sidebar.show()
self.app.processEvents()
self.starts, self.stops = [], []
self.sidebar.startRequested.connect(lambda: self.starts.append(1))
self.sidebar.stopRequested.connect(lambda: self.stops.append(1))
def tearDown(self):
self.sidebar.close()
self.app.processEvents()
def _click(self, widget):
from PySide6.QtCore import QPointF
from PySide6.QtGui import QMouseEvent
pos = QPointF(widget.width() / 2, widget.height() / 2)
event = QMouseEvent(
QMouseEvent.Type.MouseButtonPress,
pos,
widget.mapToGlobal(QPoint(int(pos.x()), int(pos.y()))),
Qt.LeftButton,
Qt.LeftButton,
Qt.NoModifier,
)
self.app.sendEvent(widget, event)
self.app.processEvents()
def test_clicking_the_status_text_starts_the_listener(self):
# 用户点的往往正是"已停止"这几个字,过去它完全没反应
self._click(self.sidebar.status_title)
self.assertEqual((len(self.starts), len(self.stops)), (1, 0))
def test_clicking_the_status_text_while_running_pauses(self):
self.sidebar.set_status("running", "监听中", "后台监控中")
self._click(self.sidebar.status_title)
self.assertEqual((len(self.starts), len(self.stops)), (0, 1))
def test_clicking_the_orb_toggles_the_same_way(self):
self.sidebar.monitor_button.click()
self.sidebar.set_status("running", "监听中", "后台监控中")
self.sidebar.monitor_button.click()
self.sidebar.set_status("stopped", "已停止", "等待连接")
self.sidebar.monitor_button.click()
self.assertEqual((len(self.starts), len(self.stops)), (2, 1))
def test_one_click_never_fires_both_signals(self):
"""旧实现每次都 disconnect 再 connect;少断一次就会自相抵消。"""
for state, text in (
("connecting", "连接中"),
("running", "监听中"),
("waiting", "等待企业微信"),
("stopping", "正在停止"),
("stopped", "已停止"),
("error", "连接失败"),
):
self.sidebar.set_status(state, text, text)
self.sidebar.monitor_button.click()
self.assertEqual(len(self.starts) + len(self.stops), 1)
def test_the_tooltip_says_what_the_click_will_do(self):
self.assertEqual(self.sidebar.status_block.toolTip(), "点击开始监听")
self.sidebar.set_status("running", "监听中", "后台监控中")
self.assertEqual(self.sidebar.status_block.toolTip(), "点击暂停监听")
def test_intermediate_states_count_as_running(self):
for state in ("connecting", "waiting", "stopping"):
self.sidebar.set_status(state, state, state)
self.sidebar.monitor_button.click()
self.assertEqual((len(self.starts), len(self.stops)), (0, 3))
if __name__ == "__main__":
main()