152 lines
4.7 KiB
Python
152 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Test for automation click methods - Related to issue #78 (Middle click sends 'C')"""
|
|
import mcrfpy
|
|
from datetime import datetime
|
|
|
|
# Try to import automation, but handle if it doesn't exist
|
|
try:
|
|
from mcrfpy import automation
|
|
HAS_AUTOMATION = True
|
|
print("SUCCESS: mcrfpy.automation module imported successfully")
|
|
except (ImportError, AttributeError) as e:
|
|
HAS_AUTOMATION = False
|
|
print(f"WARNING: mcrfpy.automation module not available - {e}")
|
|
print("The automation module may not be implemented yet")
|
|
|
|
# Track events
|
|
click_events = []
|
|
key_events = []
|
|
|
|
def click_handler(x, y, button):
|
|
"""Track click events"""
|
|
click_events.append((x, y, button))
|
|
print(f"Click received: ({x}, {y}, button={button})")
|
|
|
|
def key_handler(key, scancode=None):
|
|
"""Track keyboard events"""
|
|
key_events.append(key)
|
|
print(f"Key received: {key} (scancode: {scancode})")
|
|
|
|
def test_clicks():
|
|
"""Test various click types, especially middle click (Issue #78)"""
|
|
if not HAS_AUTOMATION:
|
|
print("SKIP - automation module not available")
|
|
print("The automation module may not be implemented yet")
|
|
return
|
|
|
|
# Create test scene
|
|
mcrfpy.createScene("click_test")
|
|
mcrfpy.setScene("click_test")
|
|
ui = mcrfpy.sceneUI("click_test")
|
|
|
|
# Set up keyboard handler to detect Issue #78
|
|
mcrfpy.keypressScene(key_handler)
|
|
|
|
# Create clickable frame
|
|
frame = mcrfpy.Frame(50, 50, 300, 200,
|
|
fill_color=mcrfpy.Color(100, 100, 200),
|
|
outline_color=mcrfpy.Color(255, 255, 255),
|
|
outline=2.0)
|
|
frame.click = click_handler
|
|
ui.append(frame)
|
|
|
|
caption = mcrfpy.Caption(mcrfpy.Vector(60, 60),
|
|
text="Click Test Area",
|
|
fill_color=mcrfpy.Color(255, 255, 255))
|
|
frame.children.append(caption)
|
|
|
|
# Test different click types
|
|
print("Testing click types...")
|
|
|
|
# Left click
|
|
try:
|
|
automation.click(200, 150)
|
|
print("✓ Left click sent")
|
|
except Exception as e:
|
|
print(f"✗ Left click failed: {e}")
|
|
|
|
# Right click
|
|
try:
|
|
automation.rightClick(200, 150)
|
|
print("✓ Right click sent")
|
|
except Exception as e:
|
|
print(f"✗ Right click failed: {e}")
|
|
|
|
# Middle click - This is Issue #78
|
|
try:
|
|
automation.middleClick(200, 150)
|
|
print("✓ Middle click sent")
|
|
except Exception as e:
|
|
print(f"✗ Middle click failed: {e}")
|
|
|
|
# Double click
|
|
try:
|
|
automation.doubleClick(200, 150)
|
|
print("✓ Double click sent")
|
|
except Exception as e:
|
|
print(f"✗ Double click failed: {e}")
|
|
|
|
# Triple click
|
|
try:
|
|
automation.tripleClick(200, 150)
|
|
print("✓ Triple click sent")
|
|
except Exception as e:
|
|
print(f"✗ Triple click failed: {e}")
|
|
|
|
# Click with specific button parameter
|
|
try:
|
|
automation.click(200, 150, button='middle')
|
|
print("✓ Click with button='middle' sent")
|
|
except Exception as e:
|
|
print(f"✗ Click with button parameter failed: {e}")
|
|
|
|
# Check results after a delay
|
|
def check_results(runtime):
|
|
print(f"\nClick events received: {len(click_events)}")
|
|
print(f"Keyboard events received: {len(key_events)}")
|
|
|
|
# Check for Issue #78
|
|
if any('C' in str(event) or ord('C') == event for event in key_events):
|
|
print("✗ ISSUE #78 CONFIRMED: Middle click sent 'C' keyboard event!")
|
|
else:
|
|
print("✓ No spurious 'C' keyboard events detected")
|
|
|
|
# Analyze click events
|
|
for event in click_events:
|
|
print(f" Click: {event}")
|
|
|
|
# Take screenshot
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
filename = f"test_clicks_issue78_{timestamp}.png"
|
|
automation.screenshot(filename)
|
|
print(f"Screenshot saved: {filename}")
|
|
|
|
if len(click_events) > 0:
|
|
print("PASS - Clicks detected")
|
|
else:
|
|
print("FAIL - No clicks detected (may be headless limitation)")
|
|
|
|
mcrfpy.delTimer("check_results")
|
|
|
|
mcrfpy.setTimer("check_results", check_results, 2000)
|
|
|
|
# Set up timer to run test
|
|
print("Setting up test timer...")
|
|
mcrfpy.setTimer("test", test_clicks, 1000)
|
|
|
|
# Cancel timer after running once
|
|
def cleanup():
|
|
mcrfpy.delTimer("test")
|
|
mcrfpy.delTimer("cleanup")
|
|
|
|
mcrfpy.setTimer("cleanup", cleanup, 1100)
|
|
|
|
# Exit after test completes
|
|
def exit_test():
|
|
print("\nTest completed - exiting")
|
|
import sys
|
|
sys.exit(0)
|
|
|
|
mcrfpy.setTimer("exit", exit_test, 5000)
|
|
|
|
print("Test script initialized, waiting for timers...") |