Converted from Timer-based async to step()-based sync: - test_simple_callback.py - test_empty_animation_manager.py - test_frame_clipping.py - test_frame_clipping_advanced.py - test_grid_children.py - test_color_helpers.py - test_no_arg_constructors.py - test_properties_quick.py - test_simple_drawable.py - test_python_object_cache.py - WORKING_automation_test_example.py Only 4 tests remain with Timer-based patterns (2 are headless detection tests that may require special handling). 🤖 Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Frack <frack@goblincorps.dev> Co-Authored-By: Claude <noreply@anthropic.com>
118 lines
3.5 KiB
Python
118 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
|
"""Test UIFrame clipping functionality
|
|
Refactored to use mcrfpy.step() for synchronous execution.
|
|
"""
|
|
|
|
import mcrfpy
|
|
from mcrfpy import Color, Frame, Caption, automation
|
|
import sys
|
|
|
|
print("Creating test scene...")
|
|
test = mcrfpy.Scene("test")
|
|
test.activate()
|
|
mcrfpy.step(0.01) # Initialize
|
|
|
|
print("Testing UIFrame clipping functionality...")
|
|
|
|
scene = test.children
|
|
|
|
# Create parent frame with clipping disabled (default)
|
|
parent1 = Frame(pos=(50, 50), size=(200, 150),
|
|
fill_color=Color(100, 100, 200),
|
|
outline_color=Color(255, 255, 255),
|
|
outline=2)
|
|
parent1.name = "parent1"
|
|
scene.append(parent1)
|
|
|
|
# Create parent frame with clipping enabled
|
|
parent2 = Frame(pos=(300, 50), size=(200, 150),
|
|
fill_color=Color(200, 100, 100),
|
|
outline_color=Color(255, 255, 255),
|
|
outline=2)
|
|
parent2.name = "parent2"
|
|
parent2.clip_children = True
|
|
scene.append(parent2)
|
|
|
|
# Add captions to both frames
|
|
caption1 = Caption(text="This text should overflow the frame bounds", pos=(10, 10))
|
|
caption1.font_size = 16
|
|
caption1.fill_color = Color(255, 255, 255)
|
|
parent1.children.append(caption1)
|
|
|
|
caption2 = Caption(text="This text should be clipped to frame bounds", pos=(10, 10))
|
|
caption2.font_size = 16
|
|
caption2.fill_color = Color(255, 255, 255)
|
|
parent2.children.append(caption2)
|
|
|
|
# Add child frames that extend beyond parent bounds
|
|
child1 = Frame(pos=(150, 100), size=(100, 100),
|
|
fill_color=Color(50, 255, 50),
|
|
outline_color=Color(0, 0, 0),
|
|
outline=1)
|
|
parent1.children.append(child1)
|
|
|
|
child2 = Frame(pos=(150, 100), size=(100, 100),
|
|
fill_color=Color(50, 255, 50),
|
|
outline_color=Color(0, 0, 0),
|
|
outline=1)
|
|
parent2.children.append(child2)
|
|
|
|
# Add caption to show clip state
|
|
status = Caption(text=f"Left frame: clip_children={parent1.clip_children}\n"
|
|
f"Right frame: clip_children={parent2.clip_children}",
|
|
pos=(50, 250))
|
|
status.font_size = 14
|
|
status.fill_color = Color(255, 255, 255)
|
|
scene.append(status)
|
|
|
|
# Add instructions
|
|
instructions = Caption(text="Left: Children should overflow (no clipping)\n"
|
|
"Right: Children should be clipped to frame bounds",
|
|
pos=(50, 300))
|
|
instructions.font_size = 12
|
|
instructions.fill_color = Color(200, 200, 200)
|
|
scene.append(instructions)
|
|
|
|
# Step to render
|
|
mcrfpy.step(0.1)
|
|
|
|
# Take screenshot
|
|
automation.screenshot("frame_clipping_test.png")
|
|
|
|
print(f"Parent1 clip_children: {parent1.clip_children}")
|
|
print(f"Parent2 clip_children: {parent2.clip_children}")
|
|
|
|
# Test toggling clip_children
|
|
parent1.clip_children = True
|
|
print(f"After toggle - Parent1 clip_children: {parent1.clip_children}")
|
|
|
|
# Verify the property setter works
|
|
test_passed = True
|
|
try:
|
|
parent1.clip_children = "not a bool"
|
|
print("ERROR: clip_children accepted non-boolean value")
|
|
test_passed = False
|
|
except TypeError as e:
|
|
print(f"PASS: clip_children correctly rejected non-boolean: {e}")
|
|
|
|
# Animate frames (move children)
|
|
parent1.children[1].x = 50
|
|
parent2.children[1].x = 50
|
|
|
|
# Step to render animation
|
|
mcrfpy.step(0.1)
|
|
|
|
# Take second screenshot
|
|
automation.screenshot("frame_clipping_animated.png")
|
|
|
|
print("\nTest completed successfully!")
|
|
print("Screenshots saved:")
|
|
print(" - frame_clipping_test.png (initial state)")
|
|
print(" - frame_clipping_animated.png (with animation)")
|
|
|
|
if test_passed:
|
|
print("PASS")
|
|
sys.exit(0)
|
|
else:
|
|
print("FAIL")
|
|
sys.exit(1)
|