#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 测试自动恢复功能的简单脚本 """ import sys import os import tempfile import shutil import time from datetime import datetime # 添加MetaCore目录到Python路径 current_dir = os.path.dirname(os.path.abspath(__file__)) metacore_dir = os.path.join(current_dir, '..', 'MetaCore') sys.path.insert(0, metacore_dir) try: from data.project_manager import Project, ProjectManager print("✅ 成功导入项目管理器") # 创建临时目录 temp_dir = tempfile.mkdtemp(prefix="auto_restore_test_") print(f"📁 创建临时目录: {temp_dir}") # 创建项目管理器 pm = ProjectManager() # 创建测试项目目录 test_project_dir = os.path.join(temp_dir, "自动恢复测试项目") os.makedirs(test_project_dir, exist_ok=True) # 创建测试文件 with open(os.path.join(test_project_dir, "test.txt"), 'w', encoding='utf-8') as f: f.write("这是一个测试文件") print(f"📂 创建测试项目目录: {test_project_dir}") # 创建测试项目 test_project = Project( id=999, title="自动恢复测试项目", date=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), type="test", image="🔄", path=temp_dir, project_dir=test_project_dir, description="用于测试自动恢复功能的项目", status="normal" ) pm.projects.append(test_project) print("✅ 创建测试项目") # 模拟项目目录被删除 print("\n🗑️ 模拟删除项目目录...") shutil.rmtree(test_project_dir) print("✅ 项目目录已删除") # 模拟用户选择保留项目(设置为待删除状态) test_project.status = "pending_delete" print("✅ 项目状态设置为 pending_delete") # 测试检测逻辑 print("\n🔍 测试检测逻辑...") pm.check_all_projects_existence() print("✅ 检测逻辑运行完成(应该没有检测到恢复)") # 恢复项目目录 print("\n📂 恢复项目目录...") os.makedirs(test_project_dir, exist_ok=True) with open(os.path.join(test_project_dir, "test.txt"), 'w', encoding='utf-8') as f: f.write("这是一个恢复的测试文件") print("✅ 项目目录已恢复") # 测试自动恢复检测 print("\n🔄 测试自动恢复检测...") # 创建一个简单的信号接收器来测试 restored_projects = [] def mock_handle_restored(projects): restored_projects.extend(projects) print(f"🎉 检测到 {len(projects)} 个项目需要恢复") for project in projects: pm.auto_restore_project(project) print(f"✅ 项目已自动恢复: {project.title}") # 手动调用检测方法 deleted_projects = [] restored_projects_detected = [] for project in pm.projects: if project.project_dir: if project.status == 'pending_delete' and os.path.exists(project.project_dir): restored_projects_detected.append(project) if restored_projects_detected: print(f"🔍 检测到 {len(restored_projects_detected)} 个项目目录已恢复") mock_handle_restored(restored_projects_detected) else: print("❌ 未检测到需要恢复的项目") # 验证恢复结果 print(f"\n📊 验证结果:") print(f"项目状态: {test_project.status}") print(f"目录存在: {os.path.exists(test_project.project_dir)}") if test_project.status == "normal" and os.path.exists(test_project.project_dir): print("🎉 自动恢复功能测试成功!") else: print("❌ 自动恢复功能测试失败") # 清理临时目录 print(f"\n🧹 清理临时目录: {temp_dir}") shutil.rmtree(temp_dir) print("✅ 清理完成") except ImportError as e: print(f"❌ 导入错误:{e}") sys.exit(1) except Exception as e: print(f"❌ 测试失败:{e}") import traceback traceback.print_exc() sys.exit(1)