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() |