40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""工位 Qt 运行时回归:无设备、无 ROS,检测导致一分钟崩溃的引用计数错误。
|
|
|
|
运行:bash station/run_station.sh --self-test
|
|
"""
|
|
import sys
|
|
import unittest
|
|
|
|
import PySide6
|
|
from PySide6.QtWidgets import QApplication, QLabel
|
|
|
|
|
|
class QtRuntimeTest(unittest.TestCase):
|
|
def test_void_calls_preserve_none(self):
|
|
# 先检查版本,防止在有缺陷的绑定上运行压力循环导致解释器直接 abort。
|
|
self.assertEqual(PySide6.__version__, "6.8.3")
|
|
app = QApplication.instance() or QApplication([])
|
|
label = QLabel("warmup")
|
|
|
|
def refresh():
|
|
label.setText("updated")
|
|
label.update()
|
|
label.setVisible(False)
|
|
label.style().unpolish(label)
|
|
label.style().polish(label)
|
|
|
|
for _ in range(20):
|
|
refresh()
|
|
app.processEvents()
|
|
before = sys.getrefcount(None)
|
|
for _ in range(4000):
|
|
refresh()
|
|
after = sys.getrefcount(None)
|
|
self.assertGreater(after - before, -50, "Qt 调用持续递减 None 引用计数")
|
|
label.deleteLater()
|
|
app.processEvents()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|