Local-Voice/test_nfc_functionality.py
2025-09-22 02:06:00 +08:00

141 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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()