MMORPG_AI_NPC_MCP_CLIENT_SERVER / tests /test_enhanced_features.py
Chris4K's picture
Upload 195 files
4c75d73 verified
#!/usr/bin/env python3
"""
Test Enhanced MMORPG Features
This script verifies the implementation of:
1. Player Glow Implementation (current player gets yellow border highlight)
2. Player Names Display Implementation (show player names above sprites with level info)
3. Status Line Implementation (game info bar with player count, time, controls info)
4. Current Player Tracking (proper assignment and cleanup)
"""
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
from src.facades.game_facade import GameFacade
from src.ui.interface_manager import InterfaceManager
from src.ui.huggingface_ui import HuggingFaceUI
def test_enhanced_features():
"""Test all enhanced MMORPG features."""
print("🧪 Testing Enhanced MMORPG Features")
print("=" * 50)
# Initialize components
game_facade = GameFacade()
ui = HuggingFaceUI(game_facade)
interface_manager = InterfaceManager(game_facade, ui)
print("✅ Components initialized successfully")
# Test 1: Current Player Tracking Initialization
print("\n1. Testing Current Player Tracking...")
assert hasattr(interface_manager, 'current_player_id'), "current_player_id attribute missing"
assert interface_manager.current_player_id is None, "current_player_id should be None initially"
print("✅ Current player tracking properly initialized")
# Test 2: Join Game and Current Player Assignment
print("\n2. Testing Join Game with Current Player Assignment...")
# Test the interface manager join handler directly
current_state = {}
result = interface_manager._handle_join_game("TestPlayer1", current_state)
updated_state, status, player_list, world_html = result
# The join handler should have created a player and set current_player_id
player1_id = updated_state.get("player_id")
assert player1_id is not None, "Failed to join game via interface manager"
# Verify current player ID is set
assert interface_manager.current_player_id == player1_id, f"current_player_id not set correctly. Expected: {player1_id}, Got: {interface_manager.current_player_id}"
assert updated_state["player_id"] == player1_id, "Player state not updated correctly"
print(f"✅ Current player ID set correctly: {interface_manager.current_player_id}")
# Test 3: World HTML Generation with Player Glow
print("\n3. Testing World HTML Generation with Enhanced Features...")
world_html = interface_manager._generate_world_html_with_players()
# Check for enhanced features in HTML
assert "border: 2px solid yellow; border-radius: 50%;" in world_html, "Player glow effect missing"
assert "TestPlayer1" in world_html, "Player name missing from display"
assert "Lv." in world_html, "Level display missing"
assert "Fantasy Realm" in world_html, "Status line missing"
assert "Use WASD or Arrow Keys" in world_html, "Controls info missing"
print("✅ World HTML contains all enhanced features")
# Test 4: Multiple Players with Glow Distinction
print("\n4. Testing Multiple Players with Glow Distinction...")
# Add a second player via interface manager
current_state2 = {}
result2 = interface_manager._handle_join_game("TestPlayer2", current_state2)
updated_state2, status2, player_list2, world_html2 = result2
player2_id = updated_state2.get("player_id")
# The second player should now be the current player
assert interface_manager.current_player_id == player2_id, "Current player should be updated to latest joiner"
world_html_multi = interface_manager._generate_world_html_with_players()
# Count yellow borders (should be only 1 for current player)
yellow_border_count = world_html_multi.count("border: 2px solid yellow; border-radius: 50%;")
assert yellow_border_count == 1, f"Expected 1 yellow border, found {yellow_border_count}"
print("✅ Only current player has glow effect")
# Test 5: Leave Game and Current Player Cleanup
print("\n5. Testing Leave Game and Current Player Cleanup...")
leave_result = interface_manager._handle_leave_game(updated_state2) # Use the second player's state
new_state, leave_status, player_list_after, world_html_after = leave_result
# Verify current player ID is cleared
assert interface_manager.current_player_id is None, "current_player_id not cleared on leave"
assert new_state == {}, "Player state not cleared on leave"
print("✅ Current player tracking cleared on leave")
# Test 6: Status Line Dynamic Content
print("\n6. Testing Status Line Dynamic Content...")
# Join again to test status line
current_state3 = {}
result3 = interface_manager._handle_join_game("StatusTestPlayer", current_state3)
updated_state3, status3, player_list3, world_html3 = result3
player3_id = updated_state3.get("player_id")
world_html_status = interface_manager._generate_world_html_with_players()
# Check for dynamic status line content
assert "Players:" in world_html_status, "Player count missing from status"
assert "Last Update:" in world_html_status, "Timestamp missing from status"
import re
time_pattern = r'\d{2}:\d{2}:\d{2}'
assert re.search(time_pattern, world_html_status), "Time format not found in status"
print("✅ Status line contains dynamic content")
# Test 7: Player Name Background Opacity
print("\n7. Testing Player Name Background Opacity...")
assert "rgba(255,215,0,0.9)" in world_html_status, "Current player name background missing"
assert "rgba(255,215,0,0.6)" in world_html_status, "Other player name background missing"
print("✅ Player name backgrounds have correct opacity")
# Test 8: Z-Index Layering
print("\n8. Testing Z-Index Layering...")
assert "z-index: 10" in world_html_status, "Sprite z-index missing"
assert "z-index: 11" in world_html_status, "Name z-index missing"
assert "z-index: 12" in world_html_status, "Status z-index missing"
print("✅ Z-index layering implemented correctly")
print("\n" + "=" * 50)
print("🎉 ALL ENHANCED FEATURES TESTS PASSED!")
print("=" * 50)
# Summary of implemented features
print("\n📋 Enhanced Features Successfully Implemented:")
print("✅ 1. Player Glow Effect - Current player gets yellow border highlight")
print("✅ 2. Player Names Display - Names with level info shown above sprites")
print("✅ 3. Status Line - Game info bar with player count, time, controls")
print("✅ 4. Current Player Tracking - Proper assignment and cleanup")
print("✅ 5. Dynamic Background Opacity - Different opacity for current vs other players")
print("✅ 6. Proper Z-Index Layering - Sprites, names, and status properly layered")
print("✅ 7. Enhanced HTML Generation - All features integrated into world view")
print("✅ 8. Keyboard Controls Integration - Controls info in status line")
return True
if __name__ == "__main__":
try:
test_enhanced_features()
sys.exit(0)
except Exception as e:
print(f"❌ Test failed with error: {e}")
import traceback
traceback.print_exc()
sys.exit(1)