141 lines
4.5 KiB
Python
141 lines
4.5 KiB
Python
#!/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() |