92 lines
3.0 KiB
Python
92 lines
3.0 KiB
Python
#!/usr/bin/env python3
|
|
"""Test for mcrfpy.keypressScene() - Related to issue #61"""
|
|
import mcrfpy
|
|
|
|
# Track keypresses for different scenes
|
|
scene1_presses = []
|
|
scene2_presses = []
|
|
|
|
def scene1_handler(key_code):
|
|
"""Handle keyboard events for scene 1"""
|
|
scene1_presses.append(key_code)
|
|
print(f"Scene 1 key pressed: {key_code}")
|
|
|
|
def scene2_handler(key_code):
|
|
"""Handle keyboard events for scene 2"""
|
|
scene2_presses.append(key_code)
|
|
print(f"Scene 2 key pressed: {key_code}")
|
|
|
|
def test_keypressScene():
|
|
"""Test keyboard event handling for scenes"""
|
|
print("=== Testing mcrfpy.keypressScene() ===")
|
|
|
|
# Test 1: Basic handler registration
|
|
print("\n1. Basic handler registration:")
|
|
mcrfpy.createScene("scene1")
|
|
mcrfpy.setScene("scene1")
|
|
|
|
try:
|
|
mcrfpy.keypressScene(scene1_handler)
|
|
print("✓ Keypress handler registered for scene1")
|
|
except Exception as e:
|
|
print(f"✗ Failed to register handler: {e}")
|
|
print("FAIL")
|
|
return
|
|
|
|
# Test 2: Handler persists across scene changes
|
|
print("\n2. Testing handler persistence:")
|
|
mcrfpy.createScene("scene2")
|
|
mcrfpy.setScene("scene2")
|
|
|
|
try:
|
|
mcrfpy.keypressScene(scene2_handler)
|
|
print("✓ Keypress handler registered for scene2")
|
|
except Exception as e:
|
|
print(f"✗ Failed to register handler for scene2: {e}")
|
|
|
|
# Switch back to scene1
|
|
mcrfpy.setScene("scene1")
|
|
current = mcrfpy.currentScene()
|
|
print(f"✓ Switched back to: {current}")
|
|
|
|
# Test 3: Clear handler
|
|
print("\n3. Testing handler clearing:")
|
|
try:
|
|
mcrfpy.keypressScene(None)
|
|
print("✓ Handler cleared with None")
|
|
except Exception as e:
|
|
print(f"✗ Failed to clear handler: {e}")
|
|
|
|
# Test 4: Re-register handler
|
|
print("\n4. Testing re-registration:")
|
|
try:
|
|
mcrfpy.keypressScene(scene1_handler)
|
|
print("✓ Handler re-registered successfully")
|
|
except Exception as e:
|
|
print(f"✗ Failed to re-register: {e}")
|
|
|
|
# Test 5: Lambda functions
|
|
print("\n5. Testing lambda functions:")
|
|
try:
|
|
mcrfpy.keypressScene(lambda k: print(f"Lambda key: {k}"))
|
|
print("✓ Lambda function accepted as handler")
|
|
except Exception as e:
|
|
print(f"✗ Failed with lambda: {e}")
|
|
|
|
# Known issues
|
|
print("\n⚠ Known Issues:")
|
|
print("- Invalid argument (non-callable) causes segfault")
|
|
print("- No way to query current handler")
|
|
print("- Handler is global, not per-scene (issue #61)")
|
|
|
|
# Summary related to issue #61
|
|
print("\n📋 Issue #61 Analysis:")
|
|
print("Current: mcrfpy.keypressScene() sets a global handler")
|
|
print("Proposed: Scene objects should encapsulate their own callbacks")
|
|
print("Impact: Currently only one keypress handler active at a time")
|
|
|
|
print("\n=== Test Complete ===")
|
|
print("PASS - API functions correctly within current limitations")
|
|
|
|
# Run test immediately
|
|
test_keypressScene() |