104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/usr/bin/env python3
 | 
						|
"""Test for UICollection - Related to issue #69 (Sequence Protocol)"""
 | 
						|
import mcrfpy
 | 
						|
from datetime import datetime
 | 
						|
 | 
						|
def test_UICollection():
 | 
						|
    """Test UICollection sequence protocol compliance"""
 | 
						|
    # Create test scene
 | 
						|
    mcrfpy.createScene("collection_test")
 | 
						|
    mcrfpy.setScene("collection_test")
 | 
						|
    ui = mcrfpy.sceneUI("collection_test")
 | 
						|
    
 | 
						|
    # Add various UI elements
 | 
						|
    frame = mcrfpy.Frame(10, 10, 100, 100)
 | 
						|
    caption = mcrfpy.Caption(mcrfpy.Vector(120, 10), text="Test")
 | 
						|
    # Skip sprite for now since it requires a texture
 | 
						|
    
 | 
						|
    ui.append(frame)
 | 
						|
    ui.append(caption)
 | 
						|
    
 | 
						|
    print("Testing UICollection sequence protocol (Issue #69)...")
 | 
						|
    
 | 
						|
    # Test len()
 | 
						|
    try:
 | 
						|
        length = len(ui)
 | 
						|
        print(f"✓ len() works: {length} items")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ len() failed: {e}")
 | 
						|
    
 | 
						|
    # Test indexing
 | 
						|
    try:
 | 
						|
        item0 = ui[0]
 | 
						|
        item1 = ui[1]
 | 
						|
        print(f"✓ Indexing works: [{type(item0).__name__}, {type(item1).__name__}]")
 | 
						|
        
 | 
						|
        # Test negative indexing
 | 
						|
        last_item = ui[-1]
 | 
						|
        print(f"✓ Negative indexing works: ui[-1] = {type(last_item).__name__}")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ Indexing failed: {e}")
 | 
						|
    
 | 
						|
    # Test slicing (if implemented)
 | 
						|
    try:
 | 
						|
        slice_items = ui[0:2]
 | 
						|
        print(f"✓ Slicing works: got {len(slice_items)} items")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ Slicing not implemented (Issue #69): {e}")
 | 
						|
    
 | 
						|
    # Test iteration
 | 
						|
    try:
 | 
						|
        types = []
 | 
						|
        for item in ui:
 | 
						|
            types.append(type(item).__name__)
 | 
						|
        print(f"✓ Iteration works: {types}")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ Iteration failed: {e}")
 | 
						|
    
 | 
						|
    # Test contains
 | 
						|
    try:
 | 
						|
        if frame in ui:
 | 
						|
            print("✓ 'in' operator works")
 | 
						|
        else:
 | 
						|
            print("✗ 'in' operator returned False for existing item")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ 'in' operator not implemented (Issue #69): {e}")
 | 
						|
    
 | 
						|
    # Test remove
 | 
						|
    try:
 | 
						|
        ui.remove(1)  # Remove caption
 | 
						|
        print(f"✓ remove() works, now {len(ui)} items")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ remove() failed: {e}")
 | 
						|
    
 | 
						|
    # Test type preservation (Issue #76)
 | 
						|
    try:
 | 
						|
        # Add a frame with children to test nested collections
 | 
						|
        parent_frame = mcrfpy.Frame(250, 10, 200, 200,
 | 
						|
                                   fill_color=mcrfpy.Color(200, 200, 200))
 | 
						|
        child_caption = mcrfpy.Caption(mcrfpy.Vector(10, 10), text="Child")
 | 
						|
        parent_frame.children.append(child_caption)
 | 
						|
        ui.append(parent_frame)
 | 
						|
        
 | 
						|
        # Check if type is preserved when retrieving
 | 
						|
        retrieved = ui[-1]
 | 
						|
        if type(retrieved).__name__ == "Frame":
 | 
						|
            print("✓ Type preservation works")
 | 
						|
        else:
 | 
						|
            print(f"✗ Type not preserved (Issue #76): got {type(retrieved).__name__}")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ Type preservation test failed: {e}")
 | 
						|
    
 | 
						|
    # Test find by name (Issue #41 - not yet implemented)
 | 
						|
    try:
 | 
						|
        found = ui.find("Test")
 | 
						|
        print(f"✓ find() method works: {type(found).__name__}")
 | 
						|
    except AttributeError:
 | 
						|
        print("✗ find() method not implemented (Issue #41)")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ find() method error: {e}")
 | 
						|
    
 | 
						|
    print("PASS")
 | 
						|
 | 
						|
# Run test immediately
 | 
						|
test_UICollection() |