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

170 lines
4.6 KiB
GDScript
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.
extends Node
## 键盘输入响应属性测试
## Feature: godot-ai-town-game, Property 11: 键盘输入响应
const TEST_ITERATIONS = 100
# 测试结果统计
var test_results = {
"passed": 0,
"failed": 0,
"errors": []
}
func _ready():
print("\n=== Property Test: Keyboard Input Response ===")
await test_property_keyboard_input_response()
print_results()
print("=== Property Test Completed ===\n")
## Feature: godot-ai-town-game, Property 11: 键盘输入响应
func test_property_keyboard_input_response():
"""
属性测试:键盘输入响应
对于任意有效的键盘移动输入(方向键或 WASD
系统应该将玩家角色移动到相应方向,并将移动数据同步到服务器
验证需求: 5.1
"""
print("\n[Property Test] Testing keyboard input response...")
print("Running ", TEST_ITERATIONS, " iterations...")
# 定义所有可能的移动动作
var move_actions = ["move_up", "move_down", "move_left", "move_right"]
var expected_directions = {
"move_up": Vector2(0, -1),
"move_down": Vector2(0, 1),
"move_left": Vector2(-1, 0),
"move_right": Vector2(1, 0)
}
for i in range(TEST_ITERATIONS):
# 随机选择一个移动动作
var action = move_actions[randi() % move_actions.size()]
var expected_dir = expected_directions[action]
# 创建输入处理器
var input_handler = InputHandler.new()
add_child(input_handler)
# 等待一帧以确保初始化完成
await get_tree().process_frame
# 模拟按键输入
var input_event = InputEventAction.new()
input_event.action = action
input_event.pressed = true
Input.parse_input_event(input_event)
# 等待输入处理
await get_tree().process_frame
# 获取移动方向
var actual_dir = input_handler.get_move_direction()
# 验证方向是否正确
var direction_correct = actual_dir.normalized().distance_to(expected_dir.normalized()) < 0.01
if direction_correct:
test_results["passed"] += 1
else:
test_results["failed"] += 1
test_results["errors"].append({
"iteration": i + 1,
"action": action,
"expected": expected_dir,
"actual": actual_dir
})
# 释放按键
input_event.pressed = false
Input.parse_input_event(input_event)
# 清理
input_handler.queue_free()
await get_tree().process_frame
# 测试组合输入(对角线移动)
await test_diagonal_movement()
func test_diagonal_movement():
"""测试对角线移动(组合输入)"""
print("\n[Property Test] Testing diagonal movement...")
var diagonal_tests = [
{
"actions": ["move_up", "move_right"],
"expected": Vector2(1, -1).normalized()
},
{
"actions": ["move_up", "move_left"],
"expected": Vector2(-1, -1).normalized()
},
{
"actions": ["move_down", "move_right"],
"expected": Vector2(1, 1).normalized()
},
{
"actions": ["move_down", "move_left"],
"expected": Vector2(-1, 1).normalized()
}
]
for test_case in diagonal_tests:
var input_handler = InputHandler.new()
add_child(input_handler)
await get_tree().process_frame
# 模拟组合按键
for action in test_case["actions"]:
var input_event = InputEventAction.new()
input_event.action = action
input_event.pressed = true
Input.parse_input_event(input_event)
await get_tree().process_frame
# 获取移动方向
var actual_dir = input_handler.get_move_direction()
# 验证方向
var direction_correct = actual_dir.distance_to(test_case["expected"]) < 0.01
if direction_correct:
test_results["passed"] += 1
else:
test_results["failed"] += 1
test_results["errors"].append({
"type": "diagonal",
"actions": test_case["actions"],
"expected": test_case["expected"],
"actual": actual_dir
})
# 释放所有按键
for action in test_case["actions"]:
var input_event = InputEventAction.new()
input_event.action = action
input_event.pressed = false
Input.parse_input_event(input_event)
input_handler.queue_free()
await get_tree().process_frame
func print_results():
"""打印测试结果"""
print("\n=== Test Results ===")
print("Total iterations: ", TEST_ITERATIONS + 4) # +4 for diagonal tests
print("Passed: ", test_results["passed"])
print("Failed: ", test_results["failed"])
if test_results["failed"] > 0:
print("\n❌ FAILED: Some iterations failed")
print("First 5 errors:")
for i in range(min(5, test_results["errors"].size())):
var error = test_results["errors"][i]
print(" Error ", i + 1, ": ", error)
else:
print("\n✅ PASSED: All keyboard input responses work correctly")
print("Property 11 validated: Keyboard inputs correctly translate to character movement")