- Issue #37: Fix Windows scripts subdirectory not checked - Updated executeScript() to use executable_path() from platform.h - Scripts now load correctly when working directory differs from executable - Issue #76: Fix UIEntityCollection returns wrong type - Updated UIEntityCollectionIter::next() to check for stored Python object - Derived Entity classes now preserve their type when retrieved from collections - Issue #9: Recreate RenderTexture when resized (already fixed) - Confirmed RenderTexture recreation already implemented in set_size() and set_float_member() - Uses 1.5x padding and 4096 max size limit - Issue #79: Fix Color r, g, b, a properties return None - Implemented get_member() and set_member() in PyColor.cpp - Color component properties now work correctly with proper validation - Additional fix: Grid.at() method signature - Changed from METH_O to METH_VARARGS to accept two arguments All fixes include comprehensive tests to verify functionality. closes #37, closes #76, closes #9, closes #79 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
87 lines
No EOL
2.8 KiB
Python
87 lines
No EOL
2.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Test that Issue #78 is fixed - Middle Mouse Click should NOT send 'C' keyboard event"""
|
|
import mcrfpy
|
|
from mcrfpy import automation
|
|
import sys
|
|
|
|
# Track events
|
|
keyboard_events = []
|
|
click_events = []
|
|
|
|
def keyboard_handler(key):
|
|
"""Track keyboard events"""
|
|
keyboard_events.append(key)
|
|
print(f"Keyboard event received: '{key}'")
|
|
|
|
def click_handler(x, y, button):
|
|
"""Track click events"""
|
|
click_events.append((x, y, button))
|
|
print(f"Click event received: ({x}, {y}, button={button})")
|
|
|
|
def test_middle_click_fix(runtime):
|
|
"""Test that middle click no longer sends 'C' key event"""
|
|
print(f"\n=== Testing Issue #78 Fix (runtime: {runtime}) ===")
|
|
|
|
# Simulate middle click
|
|
print("\nSimulating middle click at (200, 200)...")
|
|
automation.middleClick(200, 200)
|
|
|
|
# Also test other clicks for comparison
|
|
print("Simulating left click at (100, 100)...")
|
|
automation.click(100, 100)
|
|
|
|
print("Simulating right click at (300, 300)...")
|
|
automation.rightClick(300, 300)
|
|
|
|
# Wait a moment for events to process
|
|
mcrfpy.setTimer("check_results", check_results, 500)
|
|
|
|
def check_results(runtime):
|
|
"""Check if the bug is fixed"""
|
|
print(f"\n=== Results ===")
|
|
print(f"Keyboard events received: {len(keyboard_events)}")
|
|
print(f"Click events received: {len(click_events)}")
|
|
|
|
# Check if 'C' was incorrectly triggered
|
|
if 'C' in keyboard_events or 'c' in keyboard_events:
|
|
print("\n✗ FAIL - Issue #78 still exists: Middle click triggered 'C' keyboard event!")
|
|
print(f"Keyboard events: {keyboard_events}")
|
|
else:
|
|
print("\n✓ PASS - Issue #78 is FIXED: No spurious 'C' keyboard event from middle click!")
|
|
|
|
# Take screenshot
|
|
filename = f"issue78_fixed_{int(runtime)}.png"
|
|
automation.screenshot(filename)
|
|
print(f"\nScreenshot saved: {filename}")
|
|
|
|
# Cleanup and exit
|
|
mcrfpy.delTimer("check_results")
|
|
sys.exit(0)
|
|
|
|
# Set up test scene
|
|
print("Setting up test scene...")
|
|
mcrfpy.createScene("issue78_test")
|
|
mcrfpy.setScene("issue78_test")
|
|
ui = mcrfpy.sceneUI("issue78_test")
|
|
|
|
# Register keyboard handler
|
|
mcrfpy.keypressScene(keyboard_handler)
|
|
|
|
# Create a clickable frame
|
|
frame = mcrfpy.Frame(50, 50, 400, 400,
|
|
fill_color=mcrfpy.Color(100, 150, 200),
|
|
outline_color=mcrfpy.Color(255, 255, 255),
|
|
outline=3.0)
|
|
frame.click = click_handler
|
|
ui.append(frame)
|
|
|
|
# Add label
|
|
caption = mcrfpy.Caption(mcrfpy.Vector(100, 100),
|
|
text="Issue #78 Test - Middle Click",
|
|
fill_color=mcrfpy.Color(255, 255, 255))
|
|
caption.size = 24
|
|
ui.append(caption)
|
|
|
|
# Schedule test
|
|
print("Scheduling test to run after render loop starts...")
|
|
mcrfpy.setTimer("test", test_middle_click_fix, 1000) |