poc/project/llmclipboard/notification_test.py
2025-03-02 18:56:33 +08:00

217 lines
7.1 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
LLMClipboard 通知系统测试脚本
用于测试各种通知场景和错误处理机制
"""
import sys
import os
import time
import logging
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel
from PyQt6.QtCore import Qt, QTimer
# 添加项目根目录到路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
# 导入LLMClipboard模块
from llmclipboard.gui import MainWindow
from llmclipboard.app import TextCaptureService
# 配置日志
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(),
logging.FileHandler('notification_test.log', encoding='utf-8')
]
)
logger = logging.getLogger('notification_test')
class NotificationTestWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("LLMClipboard 通知测试")
self.resize(500, 400)
# 创建主窗口实例
self.main_window = MainWindow()
# 创建服务实例
self.service = TextCaptureService()
self.main_window.service = self.service
self.service.gui = self.main_window
# 创建测试界面
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
# 添加标题
title = QLabel("LLMClipboard 通知系统测试")
title.setStyleSheet("font-size: 18px; font-weight: bold;")
title.setAlignment(Qt.AlignmentFlag.AlignCenter)
layout.addWidget(title)
# 添加测试按钮
self.add_test_button(layout, "测试基本通知", self.test_basic_notification)
self.add_test_button(layout, "测试文件保存通知", self.test_file_save_notification)
self.add_test_button(layout, "测试图片保存通知", self.test_image_save_notification)
self.add_test_button(layout, "测试多个通知队列", self.test_notification_queue)
self.add_test_button(layout, "测试错误通知", self.test_error_notification)
self.add_test_button(layout, "测试托盘图标通知", self.test_tray_notification)
self.add_test_button(layout, "测试备用通知机制", self.test_fallback_notification)
# 添加状态标签
self.status_label = QLabel("就绪")
self.status_label.setStyleSheet("font-style: italic;")
self.status_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
layout.addWidget(self.status_label)
# 显示主窗口
self.main_window.show()
def add_test_button(self, layout, text, callback):
"""添加测试按钮"""
button = QPushButton(text)
button.setMinimumHeight(40)
button.clicked.connect(callback)
layout.addWidget(button)
def update_status(self, message):
"""更新状态标签"""
self.status_label.setText(message)
logger.info(message)
# 5秒后重置状态
QTimer.singleShot(5000, lambda: self.status_label.setText("就绪"))
def test_basic_notification(self):
"""测试基本通知"""
self.update_status("正在测试基本通知...")
self.main_window.show_notification(
"测试通知",
"这是一个基本的测试通知消息",
"info"
)
def test_file_save_notification(self):
"""测试文件保存通知"""
self.update_status("正在测试文件保存通知...")
# 创建临时内容
content = """# 测试文档
这是一个测试文档内容,用于测试文件保存通知功能。
## 测试章节
* 项目1
* 项目2
* 项目3
## 代码示例
```python
def hello_world():
print("Hello, World!")
```
"""
# 保存内容
self.service.save_to_markdown(content)
def test_image_save_notification(self):
"""测试图片保存通知"""
self.update_status("正在测试图片保存通知...")
try:
# 创建测试图片
from PIL import Image, ImageDraw
# 创建一个彩色测试图像
img = Image.new('RGB', (800, 600), color=(73, 109, 137))
d = ImageDraw.Draw(img)
# 绘制一些图形
d.rectangle([(200, 100), (600, 500)], fill=(255, 255, 255), outline=(255, 0, 0))
d.ellipse([(250, 150), (550, 450)], fill=(0, 255, 0))
d.line([(200, 100), (600, 500)], fill=(0, 0, 255), width=5)
# 保存图片
self.service.save_image(img)
except Exception as e:
logger.error(f"创建测试图片失败: {e}")
self.update_status(f"创建测试图片失败: {e}")
def test_notification_queue(self):
"""测试多个通知队列"""
self.update_status("正在测试多个通知队列...")
# 发送多个通知
for i in range(5):
self.main_window.show_notification(
f"测试通知 {i+1}",
f"这是第 {i+1} 个测试通知消息,测试通知队列处理",
"info"
)
def test_error_notification(self):
"""测试错误通知"""
self.update_status("正在测试错误通知...")
self.main_window.show_notification(
"错误通知测试",
"这是一个错误通知测试消息",
"error"
)
def test_tray_notification(self):
"""测试托盘图标通知"""
self.update_status("正在测试托盘图标通知...")
# 确保托盘图标存在
if hasattr(self.main_window, 'tray_icon') and self.main_window.tray_icon is not None:
self.main_window.show_tray_message(
"托盘通知测试",
"这是一个托盘图标通知测试消息",
"info",
3000
)
else:
self.update_status("托盘图标不可用,无法测试托盘通知")
def test_fallback_notification(self):
"""测试备用通知机制"""
self.update_status("正在测试备用通知机制...")
# 临时禁用托盘图标,强制使用备用通知
if hasattr(self.main_window, 'tray_icon'):
original_tray = self.main_window.tray_icon
self.main_window.tray_icon = None
# 显示通知 (将使用备用机制)
self.main_window.show_notification(
"备用通知测试",
"这是一个备用通知机制测试消息",
"info"
)
# 恢复托盘图标
self.main_window.tray_icon = original_tray
else:
self.update_status("无法测试备用通知机制,托盘图标不存在")
def main():
app = QApplication(sys.argv)
window = NotificationTestWindow()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()