207 lines
5.5 KiB
Python
207 lines
5.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
McRogueFace API Demo - Final Version
|
|
====================================
|
|
|
|
Complete API demonstration with proper error handling.
|
|
Tests all constructors and methods systematically.
|
|
"""
|
|
|
|
import mcrfpy
|
|
import sys
|
|
|
|
def print_section(title):
|
|
"""Print a section header"""
|
|
print("\n" + "="*60)
|
|
print(f" {title}")
|
|
print("="*60)
|
|
|
|
def print_test(name, success=True):
|
|
"""Print test result"""
|
|
status = "✓" if success else "✗"
|
|
print(f" {status} {name}")
|
|
|
|
def test_colors():
|
|
"""Test Color API"""
|
|
print_section("COLOR TESTS")
|
|
|
|
try:
|
|
# Basic constructors
|
|
c1 = mcrfpy.Color(255, 0, 0) # RGB
|
|
print_test(f"Color(255,0,0) = ({c1.r},{c1.g},{c1.b},{c1.a})")
|
|
|
|
c2 = mcrfpy.Color(100, 150, 200, 128) # RGBA
|
|
print_test(f"Color(100,150,200,128) = ({c2.r},{c2.g},{c2.b},{c2.a})")
|
|
|
|
# Property modification
|
|
c1.r = 128
|
|
c1.g = 128
|
|
c1.b = 128
|
|
c1.a = 200
|
|
print_test(f"Modified color = ({c1.r},{c1.g},{c1.b},{c1.a})")
|
|
|
|
except Exception as e:
|
|
print_test(f"Color test failed: {e}", False)
|
|
|
|
def test_frames():
|
|
"""Test Frame API"""
|
|
print_section("FRAME TESTS")
|
|
|
|
# Create scene
|
|
mcrfpy.createScene("test")
|
|
mcrfpy.setScene("test")
|
|
ui = mcrfpy.sceneUI("test")
|
|
|
|
try:
|
|
# Constructors
|
|
f1 = mcrfpy.Frame()
|
|
print_test(f"Frame() at ({f1.x},{f1.y}) size ({f1.w},{f1.h})")
|
|
|
|
f2 = mcrfpy.Frame(100, 50)
|
|
print_test(f"Frame(100,50) at ({f2.x},{f2.y})")
|
|
|
|
f3 = mcrfpy.Frame(200, 100, 150, 75)
|
|
print_test(f"Frame(200,100,150,75) size ({f3.w},{f3.h})")
|
|
|
|
# Properties
|
|
f3.fill_color = mcrfpy.Color(100, 100, 200)
|
|
f3.outline = 3
|
|
f3.outline_color = mcrfpy.Color(255, 255, 0)
|
|
f3.opacity = 0.8
|
|
f3.visible = True
|
|
f3.z_index = 5
|
|
print_test(f"Frame properties set")
|
|
|
|
# Add to scene
|
|
ui.append(f3)
|
|
print_test(f"Frame added to scene")
|
|
|
|
# Children
|
|
child = mcrfpy.Frame(10, 10, 50, 50)
|
|
f3.children.append(child)
|
|
print_test(f"Child added, count = {len(f3.children)}")
|
|
|
|
except Exception as e:
|
|
print_test(f"Frame test failed: {e}", False)
|
|
|
|
def test_captions():
|
|
"""Test Caption API"""
|
|
print_section("CAPTION TESTS")
|
|
|
|
ui = mcrfpy.sceneUI("test")
|
|
|
|
try:
|
|
# Constructors
|
|
c1 = mcrfpy.Caption()
|
|
print_test(f"Caption() text='{c1.text}'")
|
|
|
|
c2 = mcrfpy.Caption("Hello World")
|
|
print_test(f"Caption('Hello World') at ({c2.x},{c2.y})")
|
|
|
|
c3 = mcrfpy.Caption("Test", 300, 200)
|
|
print_test(f"Caption with position at ({c3.x},{c3.y})")
|
|
|
|
# Properties
|
|
c3.text = "Modified"
|
|
c3.fill_color = mcrfpy.Color(255, 255, 0)
|
|
c3.outline = 2
|
|
c3.outline_color = mcrfpy.Color(0, 0, 0)
|
|
print_test(f"Caption text='{c3.text}'")
|
|
|
|
ui.append(c3)
|
|
print_test("Caption added to scene")
|
|
|
|
except Exception as e:
|
|
print_test(f"Caption test failed: {e}", False)
|
|
|
|
def test_animations():
|
|
"""Test Animation API"""
|
|
print_section("ANIMATION TESTS")
|
|
|
|
ui = mcrfpy.sceneUI("test")
|
|
|
|
try:
|
|
# Create target
|
|
frame = mcrfpy.Frame(50, 50, 100, 100)
|
|
frame.fill_color = mcrfpy.Color(100, 100, 100)
|
|
ui.append(frame)
|
|
|
|
# Basic animations
|
|
a1 = mcrfpy.Animation("x", 300.0, 2.0)
|
|
print_test("Animation created (position)")
|
|
|
|
a2 = mcrfpy.Animation("opacity", 0.5, 1.5, "easeInOut")
|
|
print_test("Animation with easing")
|
|
|
|
a3 = mcrfpy.Animation("fill_color", (255, 0, 0, 255), 2.0)
|
|
print_test("Color animation (tuple)")
|
|
|
|
# Start animations
|
|
a1.start(frame)
|
|
a2.start(frame)
|
|
a3.start(frame)
|
|
print_test("Animations started")
|
|
|
|
# Check properties
|
|
print_test(f"Duration = {a1.duration}")
|
|
print_test(f"Elapsed = {a1.elapsed}")
|
|
print_test(f"Complete = {a1.is_complete}")
|
|
|
|
except Exception as e:
|
|
print_test(f"Animation test failed: {e}", False)
|
|
|
|
def test_collections():
|
|
"""Test collection operations"""
|
|
print_section("COLLECTION TESTS")
|
|
|
|
ui = mcrfpy.sceneUI("test")
|
|
|
|
try:
|
|
# Clear scene
|
|
while len(ui) > 0:
|
|
ui.remove(ui[len(ui)-1])
|
|
print_test(f"Scene cleared, length = {len(ui)}")
|
|
|
|
# Add items
|
|
for i in range(5):
|
|
f = mcrfpy.Frame(i*100, 50, 80, 80)
|
|
ui.append(f)
|
|
print_test(f"Added 5 frames, length = {len(ui)}")
|
|
|
|
# Access
|
|
first = ui[0]
|
|
print_test(f"Accessed ui[0] at ({first.x},{first.y})")
|
|
|
|
# Iteration
|
|
count = sum(1 for _ in ui)
|
|
print_test(f"Iteration count = {count}")
|
|
|
|
except Exception as e:
|
|
print_test(f"Collection test failed: {e}", False)
|
|
|
|
def run_tests():
|
|
"""Run all tests"""
|
|
print("\n" + "="*60)
|
|
print(" McRogueFace API Test Suite")
|
|
print("="*60)
|
|
|
|
test_colors()
|
|
test_frames()
|
|
test_captions()
|
|
test_animations()
|
|
test_collections()
|
|
|
|
print("\n" + "="*60)
|
|
print(" Tests Complete")
|
|
print("="*60)
|
|
|
|
# Exit after delay
|
|
def exit_program(runtime):
|
|
print("\nExiting...")
|
|
sys.exit(0)
|
|
|
|
mcrfpy.setTimer("exit", exit_program, 3000)
|
|
|
|
# Run tests
|
|
print("Starting API tests...")
|
|
run_tests() |