#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 测试NFC角色切换功能 """ import json import os import sys from nfc_manager import NFCManager def test_character_loading(): """测试角色配置加载""" print("🔍 测试角色配置加载...") # 创建测试NFC管理器 nfc_manager = NFCManager() # 检查映射是否正确加载 expected_mappings = { '1DC6C90D0D1080': 'libai', '1DC7C90D0D1080': 'zhubajie' } for uid, character in expected_mappings.items(): if uid in nfc_manager.uid_to_character: actual_character = nfc_manager.uid_to_character[uid] if actual_character == character: print(f"✅ {character} -> {uid}") else: print(f"❌ {character} -> {uid} (实际: {actual_character})") else: print(f"❌ 未找到UID: {uid}") return len(nfc_manager.uid_to_character) == len(expected_mappings) def test_uid_reading(): """测试UID读取功能(需要真实NFC设备)""" print("\n🔍 测试UID读取功能...") nfc_manager = NFCManager() try: uid = nfc_manager._read_uid() if uid: print(f"✅ 读取到UID: {uid}") return True else: print("⚠️ 未读取到UID(可能没有NFC设备或卡片)") return False except Exception as e: print(f"❌ UID读取失败: {e}") return False def test_character_switch_callback(): """测试角色切换回调""" print("\n🔍 测试角色切换回调...") nfc_manager = NFCManager() def callback(character_name): print(f"🎭 角色切换回调被调用: {character_name}") nfc_manager.set_character_switch_callback(callback) # 模拟角色切换 test_uid = '1DC6C90D0D1080' if test_uid in nfc_manager.uid_to_character: character_name = nfc_manager.uid_to_character[test_uid] print(f"📡 模拟检测到UID: {test_uid}") print(f"🎭 应该切换到角色: {character_name}") # 手动调用回调函数 if nfc_manager.character_switch_callback: nfc_manager.character_switch_callback(character_name) return True return False def test_character_configs(): """测试角色配置文件""" print("\n🔍 测试角色配置文件...") characters_dir = "characters" test_files = ['libai.json', 'zhubajie.json'] for filename in test_files: filepath = os.path.join(characters_dir, filename) if os.path.exists(filepath): try: with open(filepath, 'r', encoding='utf-8') as f: config = json.load(f) required_fields = ['name', 'nfc_uid', 'greeting'] missing_fields = [field for field in required_fields if field not in config] if not missing_fields: print(f"✅ {filename}: {config['name']} (NFC: {config['nfc_uid']})") else: print(f"❌ {filename}: 缺少字段 {missing_fields}") except Exception as e: print(f"❌ {filename}: 读取失败 - {e}") else: print(f"❌ {filename}: 文件不存在") def main(): """主测试函数""" print("🧪 NFC角色切换功能测试") print("=" * 50) # 测试角色配置文件 test_character_configs() # 测试角色加载 loading_success = test_character_loading() # 测试UID读取 reading_success = test_uid_reading() # 测试角色切换回调 callback_success = test_character_switch_callback() print("\n" + "=" * 50) print("📊 测试结果:") print(f" 角色配置加载: {'✅ 通过' if loading_success else '❌ 失败'}") print(f" UID读取功能: {'✅ 通过' if reading_success else '⚠️ 需要NFC设备'}") print(f" 角色切换回调: {'✅ 通过' if callback_success else '❌ 失败'}") if loading_success and callback_success: print("\n🎉 核心功能测试通过!") print("💡 提示: 要测试完整的NFC功能,请:") print(" 1. 安装libnfc工具") print(" 2. 连接NFC读取器") print(" 3. 运行: python multiprocess_recorder.py --enable-nfc") else: print("\n❌ 部分测试失败,请检查配置") if __name__ == "__main__": main()