Files
whale-town/tests/test_character_personalization.gd
2025-12-05 19:00:14 +08:00

199 lines
7.7 KiB
GDScript

extends Node
## 角色个性化系统测试
## 测试角色个性化功能的各个方面
func _ready():
"""运行所有个性化测试"""
print("=== 角色个性化系统测试开始 ===")
test_character_data_personalization()
test_appearance_generation()
test_personality_generation()
test_achievement_system()
test_experience_and_leveling()
test_status_and_mood_system()
print("=== 角色个性化系统测试完成 ===")
## 测试角色数据个性化
func test_character_data_personalization():
"""测试角色数据的个性化字段"""
print("\n--- 测试角色数据个性化 ---")
# 创建角色数据
var character_data = CharacterData.create("测试角色", "test_owner")
# 验证默认个性化字段存在
assert(character_data.has(CharacterData.FIELD_APPEARANCE), "应该有外观字段")
assert(character_data.has(CharacterData.FIELD_PERSONALITY), "应该有个性字段")
assert(character_data.has(CharacterData.FIELD_STATUS), "应该有状态字段")
assert(character_data.has(CharacterData.FIELD_MOOD), "应该有心情字段")
assert(character_data.has(CharacterData.FIELD_LEVEL), "应该有等级字段")
assert(character_data.has(CharacterData.FIELD_EXPERIENCE), "应该有经验字段")
# 测试设置外观
var new_appearance = {
"body_color": "#FF0000",
"head_color": "#00FF00"
}
CharacterData.set_appearance(character_data, new_appearance)
assert(character_data[CharacterData.FIELD_APPEARANCE]["body_color"] == "#FF0000", "外观应该被正确设置")
# 测试设置状态和心情
CharacterData.set_status(character_data, "busy")
CharacterData.set_mood(character_data, "happy")
assert(character_data[CharacterData.FIELD_STATUS] == "busy", "状态应该被正确设置")
assert(character_data[CharacterData.FIELD_MOOD] == "happy", "心情应该被正确设置")
# 测试属性设置
CharacterData.set_attribute(character_data, "charisma", 8)
assert(character_data[CharacterData.FIELD_ATTRIBUTES]["charisma"] == 8, "属性应该被正确设置")
# 测试技能设置
CharacterData.set_skill(character_data, "communication", 5)
assert(character_data[CharacterData.FIELD_SKILLS]["communication"] == 5, "技能应该被正确设置")
# 测试成就添加
var achievement = {
"id": "test_achievement",
"name": "测试成就",
"description": "这是一个测试成就"
}
CharacterData.add_achievement(character_data, achievement)
assert(character_data[CharacterData.FIELD_ACHIEVEMENTS].size() == 1, "成就应该被添加")
# 测试经验和升级
var leveled_up = CharacterData.add_experience(character_data, 150)
assert(leveled_up, "应该升级")
assert(character_data[CharacterData.FIELD_LEVEL] == 2, "等级应该提升到2")
print("✅ 角色数据个性化测试通过")
## 测试外观生成
func test_appearance_generation():
"""测试外观生成功能"""
print("\n--- 测试外观生成 ---")
# 生成随机外观
var appearance = CharacterPersonalization.generate_random_appearance()
# 验证必需字段
assert(appearance.has("body_color"), "应该有身体颜色")
assert(appearance.has("head_color"), "应该有头部颜色")
assert(appearance.has("hair_color"), "应该有头发颜色")
assert(appearance.has("clothing_color"), "应该有服装颜色")
# 验证颜色格式
assert(appearance["body_color"].begins_with("#"), "身体颜色应该是十六进制格式")
assert(appearance["body_color"].length() == 7, "身体颜色应该是7位十六进制")
# 验证外观数据
assert(CharacterPersonalization.validate_appearance(appearance), "生成的外观应该有效")
print("✅ 外观生成测试通过")
## 测试个性生成
func test_personality_generation():
"""测试个性生成功能"""
print("\n--- 测试个性生成 ---")
# 生成随机个性
var personality = CharacterPersonalization.generate_random_personality()
# 验证字段
assert(personality.has("traits"), "应该有特征字段")
assert(personality.has("favorite_activity"), "应该有喜欢的活动字段")
# 验证特征数量
var traits = personality["traits"]
assert(traits.size() >= 2 and traits.size() <= 4, "特征数量应该在2-4之间")
# 验证活动在有效列表中
var activity = personality["favorite_activity"]
assert(activity in CharacterPersonalization.ACTIVITIES, "活动应该在有效列表中")
print("✅ 个性生成测试通过")
## 测试成就系统
func test_achievement_system():
"""测试成就系统"""
print("\n--- 测试成就系统 ---")
# 创建测试角色数据
var character_data = CharacterData.create("测试角色", "test_owner")
# 测试首次登录成就
var achievements = CharacterPersonalization.check_achievements(character_data, "first_login")
assert(achievements.size() == 1, "应该获得首次登录成就")
assert(achievements[0]["id"] == "first_login", "成就ID应该正确")
# 测试重复成就不会被添加
var duplicate_achievements = CharacterPersonalization.check_achievements(character_data, "first_login")
assert(duplicate_achievements.size() == 0, "重复成就不应该被添加")
# 测试等级成就
character_data[CharacterData.FIELD_LEVEL] = 5
var level_achievements = CharacterPersonalization.check_achievements(character_data, "level_up")
assert(level_achievements.size() == 1, "应该获得等级5成就")
assert(level_achievements[0]["id"] == "level_5", "成就ID应该是level_5")
print("✅ 成就系统测试通过")
## 测试经验和升级系统
func test_experience_and_leveling():
"""测试经验和升级系统"""
print("\n--- 测试经验和升级系统 ---")
# 创建测试角色数据
var character_data = CharacterData.create("测试角色", "test_owner")
# 测试经验计算
var required_exp = CharacterData.get_required_experience(1)
assert(required_exp == 150, "1级升2级应该需要150经验")
var required_exp_2 = CharacterData.get_required_experience(2)
assert(required_exp_2 == 250, "2级升3级应该需要250经验")
# 测试升级
var leveled_up = CharacterData.add_experience(character_data, 150)
assert(leveled_up, "应该升级")
assert(character_data[CharacterData.FIELD_LEVEL] == 2, "等级应该是2")
assert(character_data[CharacterData.FIELD_EXPERIENCE] == 0, "经验应该重置")
# 测试部分经验
var not_leveled = CharacterData.add_experience(character_data, 100)
assert(not not_leveled, "不应该升级")
assert(character_data[CharacterData.FIELD_LEVEL] == 2, "等级应该保持2")
assert(character_data[CharacterData.FIELD_EXPERIENCE] == 100, "经验应该是100")
print("✅ 经验和升级系统测试通过")
## 测试状态和心情系统
func test_status_and_mood_system():
"""测试状态和心情系统"""
print("\n--- 测试状态和心情系统 ---")
# 测试心情表情符号
assert(CharacterPersonalization.get_mood_emoji("happy") == "😊", "开心心情应该有正确表情")
assert(CharacterPersonalization.get_mood_emoji("sad") == "😢", "难过心情应该有正确表情")
# 测试状态颜色
assert(CharacterPersonalization.get_status_color("active") == Color.GREEN, "活跃状态应该是绿色")
assert(CharacterPersonalization.get_status_color("busy") == Color.ORANGE, "忙碌状态应该是橙色")
# 测试个性化描述生成
var character_data = CharacterData.create("测试角色", "test_owner")
var description = CharacterPersonalization.generate_personality_description(character_data)
assert(description.length() > 0, "应该生成个性化描述")
assert("角色" in description, "描述应该包含'角色'")
print("✅ 状态和心情系统测试通过")
## 断言函数
func assert(condition: bool, message: String):
"""简单的断言函数"""
if not condition:
push_error("断言失败: " + message)
print("" + message)
else:
print("" + message)