McRogueFace/tests/unit/keypress_scene_validation_test.py

93 lines
No EOL
2.8 KiB
Python

#!/usr/bin/env python3
"""
Test for keypressScene() validation - should reject non-callable arguments
"""
def test_keypress_validation(timer, runtime):
"""Test that keypressScene validates its argument is callable"""
import mcrfpy
import sys
print("Testing keypressScene() validation...")
# Create test scene
test = mcrfpy.Scene("test")
test.activate()
# Test 1: Valid callable (function)
def key_handler(key, action):
print(f"Key pressed: {key}, action: {action}")
try:
test.on_key = key_handler
print("✓ Accepted valid function as key handler")
except Exception as e:
print(f"✗ Rejected valid function: {e}")
raise
# Test 2: Valid callable (lambda)
try:
test.on_key = lambda k, a: None
print("✓ Accepted valid lambda as key handler")
except Exception as e:
print(f"✗ Rejected valid lambda: {e}")
raise
# Test 3: Invalid - string
try:
test.on_key = "not callable"
print("✗ Should have rejected string as key handler")
except TypeError as e:
print(f"✓ Correctly rejected string: {e}")
except Exception as e:
print(f"✗ Wrong exception type for string: {e}")
raise
# Test 4: Invalid - number
try:
test.on_key = 42
print("✗ Should have rejected number as key handler")
except TypeError as e:
print(f"✓ Correctly rejected number: {e}")
except Exception as e:
print(f"✗ Wrong exception type for number: {e}")
raise
# Test 5: Invalid - None
try:
test.on_key = None
print("✗ Should have rejected None as key handler")
except TypeError as e:
print(f"✓ Correctly rejected None: {e}")
except Exception as e:
print(f"✗ Wrong exception type for None: {e}")
raise
# Test 6: Invalid - dict
try:
test.on_key = {"not": "callable"}
print("✗ Should have rejected dict as key handler")
except TypeError as e:
print(f"✓ Correctly rejected dict: {e}")
except Exception as e:
print(f"✗ Wrong exception type for dict: {e}")
raise
# Test 7: Valid callable class instance
class KeyHandler:
def __call__(self, key, action):
print(f"Class handler: {key}, {action}")
try:
test.on_key = KeyHandler()
print("✓ Accepted valid callable class instance")
except Exception as e:
print(f"✗ Rejected valid callable class: {e}")
raise
print("\n✅ keypressScene() validation test PASSED")
sys.exit(0)
# Execute the test after a short delay
import mcrfpy
test_timer = mcrfpy.Timer("test", test_keypress_validation, 100, once=True)