169 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/usr/bin/env python3
 | 
						|
"""
 | 
						|
Test for Issue #95: Fix UICollection __repr__ type display
 | 
						|
 | 
						|
This test verifies that UICollection's repr shows the actual types of contained
 | 
						|
objects instead of just showing them all as "UIDrawable".
 | 
						|
"""
 | 
						|
 | 
						|
import mcrfpy
 | 
						|
import sys
 | 
						|
 | 
						|
def test_uicollection_repr():
 | 
						|
    """Test UICollection repr shows correct types"""
 | 
						|
    print("=== Testing UICollection __repr__ Type Display (Issue #95) ===\n")
 | 
						|
    
 | 
						|
    tests_passed = 0
 | 
						|
    tests_total = 0
 | 
						|
    
 | 
						|
    # Get scene UI collection
 | 
						|
    scene_ui = mcrfpy.sceneUI("test")
 | 
						|
    
 | 
						|
    # Test 1: Empty collection
 | 
						|
    print("--- Test 1: Empty collection ---")
 | 
						|
    tests_total += 1
 | 
						|
    repr_str = repr(scene_ui)
 | 
						|
    print(f"Empty collection repr: {repr_str}")
 | 
						|
    if "0 objects" in repr_str:
 | 
						|
        print("✓ PASS: Empty collection shows correctly")
 | 
						|
        tests_passed += 1
 | 
						|
    else:
 | 
						|
        print("✗ FAIL: Empty collection repr incorrect")
 | 
						|
    
 | 
						|
    # Test 2: Add various UI elements
 | 
						|
    print("\n--- Test 2: Mixed UI elements ---")
 | 
						|
    tests_total += 1
 | 
						|
    
 | 
						|
    # Add Frame
 | 
						|
    frame = mcrfpy.Frame(10, 10, 100, 100)
 | 
						|
    scene_ui.append(frame)
 | 
						|
    
 | 
						|
    # Add Caption
 | 
						|
    caption = mcrfpy.Caption((150, 50), "Test", mcrfpy.Font("assets/JetbrainsMono.ttf"))
 | 
						|
    scene_ui.append(caption)
 | 
						|
    
 | 
						|
    # Add Sprite
 | 
						|
    sprite = mcrfpy.Sprite(200, 100)
 | 
						|
    scene_ui.append(sprite)
 | 
						|
    
 | 
						|
    # Add Grid
 | 
						|
    grid = mcrfpy.Grid(10, 10)
 | 
						|
    grid.x = 300
 | 
						|
    grid.y = 100
 | 
						|
    scene_ui.append(grid)
 | 
						|
    
 | 
						|
    # Check repr
 | 
						|
    repr_str = repr(scene_ui)
 | 
						|
    print(f"Collection repr: {repr_str}")
 | 
						|
    
 | 
						|
    # Verify it shows the correct types
 | 
						|
    expected_types = ["1 Frame", "1 Caption", "1 Sprite", "1 Grid"]
 | 
						|
    all_found = all(expected in repr_str for expected in expected_types)
 | 
						|
    
 | 
						|
    if all_found and "UIDrawable" not in repr_str:
 | 
						|
        print("✓ PASS: All types shown correctly, no generic UIDrawable")
 | 
						|
        tests_passed += 1
 | 
						|
    else:
 | 
						|
        print("✗ FAIL: Types not shown correctly")
 | 
						|
        for expected in expected_types:
 | 
						|
            if expected in repr_str:
 | 
						|
                print(f"  ✓ Found: {expected}")
 | 
						|
            else:
 | 
						|
                print(f"  ✗ Missing: {expected}")
 | 
						|
        if "UIDrawable" in repr_str:
 | 
						|
            print("  ✗ Still shows generic UIDrawable")
 | 
						|
    
 | 
						|
    # Test 3: Multiple of same type
 | 
						|
    print("\n--- Test 3: Multiple objects of same type ---")
 | 
						|
    tests_total += 1
 | 
						|
    
 | 
						|
    # Add more frames
 | 
						|
    frame2 = mcrfpy.Frame(10, 120, 100, 100)
 | 
						|
    frame3 = mcrfpy.Frame(10, 230, 100, 100)
 | 
						|
    scene_ui.append(frame2)
 | 
						|
    scene_ui.append(frame3)
 | 
						|
    
 | 
						|
    repr_str = repr(scene_ui)
 | 
						|
    print(f"Collection repr: {repr_str}")
 | 
						|
    
 | 
						|
    if "3 Frames" in repr_str:
 | 
						|
        print("✓ PASS: Plural form shown correctly for multiple Frames")
 | 
						|
        tests_passed += 1
 | 
						|
    else:
 | 
						|
        print("✗ FAIL: Plural form not correct")
 | 
						|
    
 | 
						|
    # Test 4: Check total count
 | 
						|
    print("\n--- Test 4: Total count verification ---")
 | 
						|
    tests_total += 1
 | 
						|
    
 | 
						|
    # Should have: 3 Frames, 1 Caption, 1 Sprite, 1 Grid = 6 total
 | 
						|
    if "6 objects:" in repr_str:
 | 
						|
        print("✓ PASS: Total count shown correctly")
 | 
						|
        tests_passed += 1
 | 
						|
    else:
 | 
						|
        print("✗ FAIL: Total count incorrect")
 | 
						|
    
 | 
						|
    # Test 5: Nested collections (Frame with children)
 | 
						|
    print("\n--- Test 5: Nested collections ---")
 | 
						|
    tests_total += 1
 | 
						|
    
 | 
						|
    # Add child to frame
 | 
						|
    child_sprite = mcrfpy.Sprite(10, 10)
 | 
						|
    frame.children.append(child_sprite)
 | 
						|
    
 | 
						|
    # Check frame's children collection
 | 
						|
    children_repr = repr(frame.children)
 | 
						|
    print(f"Frame children repr: {children_repr}")
 | 
						|
    
 | 
						|
    if "1 Sprite" in children_repr:
 | 
						|
        print("✓ PASS: Nested collection shows correct type")
 | 
						|
        tests_passed += 1
 | 
						|
    else:
 | 
						|
        print("✗ FAIL: Nested collection type incorrect")
 | 
						|
    
 | 
						|
    # Test 6: Collection remains valid after modifications
 | 
						|
    print("\n--- Test 6: Collection after modifications ---")
 | 
						|
    tests_total += 1
 | 
						|
    
 | 
						|
    # Remove an item
 | 
						|
    scene_ui.remove(0)  # Remove first frame
 | 
						|
    
 | 
						|
    repr_str = repr(scene_ui)
 | 
						|
    print(f"After removal repr: {repr_str}")
 | 
						|
    
 | 
						|
    if "2 Frames" in repr_str and "5 objects:" in repr_str:
 | 
						|
        print("✓ PASS: Collection repr updated correctly after removal")
 | 
						|
        tests_passed += 1
 | 
						|
    else:
 | 
						|
        print("✗ FAIL: Collection repr not updated correctly")
 | 
						|
    
 | 
						|
    # Summary
 | 
						|
    print(f"\n=== SUMMARY ===")
 | 
						|
    print(f"Tests passed: {tests_passed}/{tests_total}")
 | 
						|
    
 | 
						|
    if tests_passed == tests_total:
 | 
						|
        print("\nIssue #95 FIXED: UICollection __repr__ now shows correct types!")
 | 
						|
    else:
 | 
						|
        print("\nIssue #95: Some tests failed")
 | 
						|
    
 | 
						|
    return tests_passed == tests_total
 | 
						|
 | 
						|
def run_test(runtime):
 | 
						|
    """Timer callback to run the test"""
 | 
						|
    try:
 | 
						|
        success = test_uicollection_repr()
 | 
						|
        print("\nOverall result: " + ("PASS" if success else "FAIL"))
 | 
						|
    except Exception as e:
 | 
						|
        print(f"\nTest error: {e}")
 | 
						|
        import traceback
 | 
						|
        traceback.print_exc()
 | 
						|
        print("\nOverall result: FAIL")
 | 
						|
    
 | 
						|
    sys.exit(0)
 | 
						|
 | 
						|
# Set up the test scene
 | 
						|
mcrfpy.createScene("test")
 | 
						|
mcrfpy.setScene("test")
 | 
						|
 | 
						|
# Schedule test to run after game loop starts
 | 
						|
mcrfpy.setTimer("test", run_test, 100) |