306 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			306 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/usr/bin/env python3
 | 
						|
"""
 | 
						|
McRogueFace Exhaustive API Demo (Fixed)
 | 
						|
=======================================
 | 
						|
 | 
						|
Fixed version that properly exits after tests complete.
 | 
						|
"""
 | 
						|
 | 
						|
import mcrfpy
 | 
						|
import sys
 | 
						|
 | 
						|
# Test configuration
 | 
						|
VERBOSE = True  # Print detailed information about each test
 | 
						|
 | 
						|
def print_section(title):
 | 
						|
    """Print a section header"""
 | 
						|
    print("\n" + "="*60)
 | 
						|
    print(f"  {title}")
 | 
						|
    print("="*60)
 | 
						|
 | 
						|
def print_test(test_name, success=True):
 | 
						|
    """Print test result"""
 | 
						|
    status = "✓ PASS" if success else "✗ FAIL"
 | 
						|
    print(f"  {status} - {test_name}")
 | 
						|
 | 
						|
def test_color_api():
 | 
						|
    """Test all Color constructors and methods"""
 | 
						|
    print_section("COLOR API TESTS")
 | 
						|
    
 | 
						|
    # Constructor variants
 | 
						|
    print("\n  Constructors:")
 | 
						|
    
 | 
						|
    # Empty constructor (defaults to white)
 | 
						|
    c1 = mcrfpy.Color()
 | 
						|
    print_test(f"Color() = ({c1.r}, {c1.g}, {c1.b}, {c1.a})")
 | 
						|
    
 | 
						|
    # Single value (grayscale)
 | 
						|
    c2 = mcrfpy.Color(128)
 | 
						|
    print_test(f"Color(128) = ({c2.r}, {c2.g}, {c2.b}, {c2.a})")
 | 
						|
    
 | 
						|
    # RGB only (alpha defaults to 255)
 | 
						|
    c3 = mcrfpy.Color(255, 128, 0)
 | 
						|
    print_test(f"Color(255, 128, 0) = ({c3.r}, {c3.g}, {c3.b}, {c3.a})")
 | 
						|
    
 | 
						|
    # Full RGBA
 | 
						|
    c4 = mcrfpy.Color(100, 150, 200, 128)
 | 
						|
    print_test(f"Color(100, 150, 200, 128) = ({c4.r}, {c4.g}, {c4.b}, {c4.a})")
 | 
						|
    
 | 
						|
    # Property access
 | 
						|
    print("\n  Properties:")
 | 
						|
    c = mcrfpy.Color(10, 20, 30, 40)
 | 
						|
    print_test(f"Initial: r={c.r}, g={c.g}, b={c.b}, a={c.a}")
 | 
						|
    
 | 
						|
    c.r = 200
 | 
						|
    c.g = 150
 | 
						|
    c.b = 100
 | 
						|
    c.a = 255
 | 
						|
    print_test(f"After modification: r={c.r}, g={c.g}, b={c.b}, a={c.a}")
 | 
						|
    
 | 
						|
    return True
 | 
						|
 | 
						|
def test_frame_api():
 | 
						|
    """Test all Frame constructors and methods"""
 | 
						|
    print_section("FRAME API TESTS")
 | 
						|
    
 | 
						|
    # Create a test scene
 | 
						|
    mcrfpy.createScene("api_test")
 | 
						|
    mcrfpy.setScene("api_test")
 | 
						|
    ui = mcrfpy.sceneUI("api_test")
 | 
						|
    
 | 
						|
    # Constructor variants
 | 
						|
    print("\n  Constructors:")
 | 
						|
    
 | 
						|
    # Empty constructor
 | 
						|
    f1 = mcrfpy.Frame()
 | 
						|
    print_test(f"Frame() - pos=({f1.x}, {f1.y}), size=({f1.w}, {f1.h})")
 | 
						|
    ui.append(f1)
 | 
						|
    
 | 
						|
    # Position only
 | 
						|
    f2 = mcrfpy.Frame(100, 50)
 | 
						|
    print_test(f"Frame(100, 50) - pos=({f2.x}, {f2.y}), size=({f2.w}, {f2.h})")
 | 
						|
    ui.append(f2)
 | 
						|
    
 | 
						|
    # Position and size
 | 
						|
    f3 = mcrfpy.Frame(200, 100, 150, 75)
 | 
						|
    print_test(f"Frame(200, 100, 150, 75) - pos=({f3.x}, {f3.y}), size=({f3.w}, {f3.h})")
 | 
						|
    ui.append(f3)
 | 
						|
    
 | 
						|
    # Full constructor
 | 
						|
    f4 = mcrfpy.Frame(300, 200, 200, 100, 
 | 
						|
                      fill_color=mcrfpy.Color(100, 100, 200),
 | 
						|
                      outline_color=mcrfpy.Color(255, 255, 0),
 | 
						|
                      outline=3)
 | 
						|
    print_test("Frame with all parameters")
 | 
						|
    ui.append(f4)
 | 
						|
    
 | 
						|
    # Properties
 | 
						|
    print("\n  Properties:")
 | 
						|
    
 | 
						|
    # Position and size
 | 
						|
    f = mcrfpy.Frame(10, 20, 30, 40)
 | 
						|
    print_test(f"Initial: x={f.x}, y={f.y}, w={f.w}, h={f.h}")
 | 
						|
    
 | 
						|
    f.x = 50
 | 
						|
    f.y = 60
 | 
						|
    f.w = 70
 | 
						|
    f.h = 80
 | 
						|
    print_test(f"Modified: x={f.x}, y={f.y}, w={f.w}, h={f.h}")
 | 
						|
    
 | 
						|
    # Colors
 | 
						|
    f.fill_color = mcrfpy.Color(255, 0, 0, 128)
 | 
						|
    f.outline_color = mcrfpy.Color(0, 255, 0)
 | 
						|
    f.outline = 5.0
 | 
						|
    print_test(f"Colors set, outline={f.outline}")
 | 
						|
    
 | 
						|
    # Visibility and opacity
 | 
						|
    f.visible = False
 | 
						|
    f.opacity = 0.5
 | 
						|
    print_test(f"visible={f.visible}, opacity={f.opacity}")
 | 
						|
    f.visible = True  # Reset
 | 
						|
    
 | 
						|
    # Z-index
 | 
						|
    f.z_index = 10
 | 
						|
    print_test(f"z_index={f.z_index}")
 | 
						|
    
 | 
						|
    # Children collection
 | 
						|
    child1 = mcrfpy.Frame(5, 5, 20, 20)
 | 
						|
    child2 = mcrfpy.Frame(30, 5, 20, 20)
 | 
						|
    f.children.append(child1)
 | 
						|
    f.children.append(child2)
 | 
						|
    print_test(f"children.count = {len(f.children)}")
 | 
						|
    
 | 
						|
    return True
 | 
						|
 | 
						|
def test_caption_api():
 | 
						|
    """Test all Caption constructors and methods"""
 | 
						|
    print_section("CAPTION API TESTS")
 | 
						|
    
 | 
						|
    ui = mcrfpy.sceneUI("api_test")
 | 
						|
    
 | 
						|
    # Constructor variants
 | 
						|
    print("\n  Constructors:")
 | 
						|
    
 | 
						|
    # Empty constructor
 | 
						|
    c1 = mcrfpy.Caption()
 | 
						|
    print_test(f"Caption() - text='{c1.text}', pos=({c1.x}, {c1.y})")
 | 
						|
    ui.append(c1)
 | 
						|
    
 | 
						|
    # Text only
 | 
						|
    c2 = mcrfpy.Caption("Hello World")
 | 
						|
    print_test(f"Caption('Hello World') - pos=({c2.x}, {c2.y})")
 | 
						|
    ui.append(c2)
 | 
						|
    
 | 
						|
    # Text and position
 | 
						|
    c3 = mcrfpy.Caption("Positioned Text", 100, 50)
 | 
						|
    print_test(f"Caption('Positioned Text', 100, 50)")
 | 
						|
    ui.append(c3)
 | 
						|
    
 | 
						|
    # Full constructor
 | 
						|
    c5 = mcrfpy.Caption("Styled Text", 300, 150,
 | 
						|
                        fill_color=mcrfpy.Color(255, 255, 0),
 | 
						|
                        outline_color=mcrfpy.Color(255, 0, 0),
 | 
						|
                        outline=2)
 | 
						|
    print_test("Caption with all style parameters")
 | 
						|
    ui.append(c5)
 | 
						|
    
 | 
						|
    # Properties
 | 
						|
    print("\n  Properties:")
 | 
						|
    
 | 
						|
    c = mcrfpy.Caption("Test Caption", 10, 20)
 | 
						|
    
 | 
						|
    # Text
 | 
						|
    c.text = "Modified Text"
 | 
						|
    print_test(f"text = '{c.text}'")
 | 
						|
    
 | 
						|
    # Position
 | 
						|
    c.x = 50
 | 
						|
    c.y = 60
 | 
						|
    print_test(f"position = ({c.x}, {c.y})")
 | 
						|
    
 | 
						|
    # Colors and style
 | 
						|
    c.fill_color = mcrfpy.Color(0, 255, 255)
 | 
						|
    c.outline_color = mcrfpy.Color(255, 0, 255)
 | 
						|
    c.outline = 3.0
 | 
						|
    print_test("Colors and outline set")
 | 
						|
    
 | 
						|
    # Size (read-only, computed from text)
 | 
						|
    print_test(f"size (computed) = ({c.w}, {c.h})")
 | 
						|
    
 | 
						|
    return True
 | 
						|
 | 
						|
def test_animation_api():
 | 
						|
    """Test Animation class API"""
 | 
						|
    print_section("ANIMATION API TESTS")
 | 
						|
    
 | 
						|
    ui = mcrfpy.sceneUI("api_test")
 | 
						|
    
 | 
						|
    print("\n  Animation Constructors:")
 | 
						|
    
 | 
						|
    # Basic animation
 | 
						|
    anim1 = mcrfpy.Animation("x", 100.0, 2.0)
 | 
						|
    print_test("Animation('x', 100.0, 2.0)")
 | 
						|
    
 | 
						|
    # With easing
 | 
						|
    anim2 = mcrfpy.Animation("y", 200.0, 3.0, "easeInOut")
 | 
						|
    print_test("Animation with easing='easeInOut'")
 | 
						|
    
 | 
						|
    # Delta mode
 | 
						|
    anim3 = mcrfpy.Animation("w", 50.0, 1.5, "linear", delta=True)
 | 
						|
    print_test("Animation with delta=True")
 | 
						|
    
 | 
						|
    # Color animation (as tuple)
 | 
						|
    anim4 = mcrfpy.Animation("fill_color", (255, 0, 0, 255), 2.0)
 | 
						|
    print_test("Animation with Color tuple target")
 | 
						|
    
 | 
						|
    # Vector animation
 | 
						|
    anim5 = mcrfpy.Animation("position", (10.0, 20.0), 2.5, "easeOutBounce")
 | 
						|
    print_test("Animation with position tuple")
 | 
						|
    
 | 
						|
    # Sprite sequence
 | 
						|
    anim6 = mcrfpy.Animation("sprite_index", [0, 1, 2, 3, 2, 1], 2.0)
 | 
						|
    print_test("Animation with sprite sequence")
 | 
						|
    
 | 
						|
    # Properties
 | 
						|
    print("\n  Animation Properties:")
 | 
						|
    
 | 
						|
    # Check properties
 | 
						|
    print_test(f"property = '{anim1.property}'")
 | 
						|
    print_test(f"duration = {anim1.duration}")
 | 
						|
    print_test(f"elapsed = {anim1.elapsed}")
 | 
						|
    print_test(f"is_complete = {anim1.is_complete}")
 | 
						|
    print_test(f"is_delta = {anim3.is_delta}")
 | 
						|
    
 | 
						|
    # Methods
 | 
						|
    print("\n  Animation Methods:")
 | 
						|
    
 | 
						|
    # Create test frame
 | 
						|
    frame = mcrfpy.Frame(50, 50, 100, 100)
 | 
						|
    frame.fill_color = mcrfpy.Color(100, 100, 100)
 | 
						|
    ui.append(frame)
 | 
						|
    
 | 
						|
    # Start animation
 | 
						|
    anim1.start(frame)
 | 
						|
    print_test("start() called on frame")
 | 
						|
    
 | 
						|
    # Test some easing functions
 | 
						|
    print("\n  Sample Easing Functions:")
 | 
						|
    easings = ["linear", "easeIn", "easeOut", "easeInOut", "easeInBounce", "easeOutElastic"]
 | 
						|
    
 | 
						|
    for easing in easings:
 | 
						|
        try:
 | 
						|
            test_anim = mcrfpy.Animation("x", 100.0, 1.0, easing)
 | 
						|
            print_test(f"Easing '{easing}' ✓")
 | 
						|
        except:
 | 
						|
            print_test(f"Easing '{easing}' failed", False)
 | 
						|
    
 | 
						|
    return True
 | 
						|
 | 
						|
def run_all_tests():
 | 
						|
    """Run all API tests"""
 | 
						|
    print("\n" + "="*60)
 | 
						|
    print("  McRogueFace Exhaustive API Test Suite (Fixed)")
 | 
						|
    print("  Testing constructors and methods...")
 | 
						|
    print("="*60)
 | 
						|
    
 | 
						|
    # Run each test category
 | 
						|
    test_functions = [
 | 
						|
        test_color_api,
 | 
						|
        test_frame_api,
 | 
						|
        test_caption_api,
 | 
						|
        test_animation_api
 | 
						|
    ]
 | 
						|
    
 | 
						|
    passed = 0
 | 
						|
    failed = 0
 | 
						|
    
 | 
						|
    for test_func in test_functions:
 | 
						|
        try:
 | 
						|
            if test_func():
 | 
						|
                passed += 1
 | 
						|
            else:
 | 
						|
                failed += 1
 | 
						|
        except Exception as e:
 | 
						|
            print(f"\n  ERROR in {test_func.__name__}: {e}")
 | 
						|
            failed += 1
 | 
						|
    
 | 
						|
    # Summary
 | 
						|
    print("\n" + "="*60)
 | 
						|
    print(f"  TEST SUMMARY: {passed} passed, {failed} failed")
 | 
						|
    print("="*60)
 | 
						|
    
 | 
						|
    print("\n  Visual elements are displayed in the 'api_test' scene.")
 | 
						|
    print("  The test is complete.")
 | 
						|
    
 | 
						|
    # Exit after a short delay to allow output to be seen
 | 
						|
    def exit_test(runtime):
 | 
						|
        print("\nExiting API test suite...")
 | 
						|
        sys.exit(0)
 | 
						|
    
 | 
						|
    mcrfpy.setTimer("exit", exit_test, 2000)
 | 
						|
 | 
						|
# Run the tests immediately
 | 
						|
print("Starting McRogueFace Exhaustive API Demo (Fixed)...")
 | 
						|
print("This will test constructors and methods.")
 | 
						|
 | 
						|
run_all_tests() |