110 lines
3.5 KiB
Python
110 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test for UIEntityCollection.remove() accepting Entity instances
|
|
Tests the new behavior where remove() takes an Entity object instead of an index
|
|
"""
|
|
|
|
import mcrfpy
|
|
import sys
|
|
|
|
def test_remove_by_entity():
|
|
"""Test removing entities by passing the entity object"""
|
|
|
|
# Create a test scene and grid
|
|
scene_name = "test_entity_remove"
|
|
mcrfpy.createScene(scene_name)
|
|
|
|
# Create a grid (entities need a grid)
|
|
grid = mcrfpy.Grid() # Default 2x2 grid is fine for testing
|
|
mcrfpy.sceneUI(scene_name).append(grid)
|
|
|
|
# Get the entity collection
|
|
entities = grid.entities
|
|
|
|
# Create some test entities
|
|
# Entity() creates entities with default position (0,0)
|
|
entity1 = mcrfpy.Entity()
|
|
entity1.x = 5
|
|
entity1.y = 5
|
|
|
|
entity2 = mcrfpy.Entity()
|
|
entity2.x = 10
|
|
entity2.y = 10
|
|
|
|
entity3 = mcrfpy.Entity()
|
|
entity3.x = 15
|
|
entity3.y = 15
|
|
|
|
# Add entities to the collection
|
|
entities.append(entity1)
|
|
entities.append(entity2)
|
|
entities.append(entity3)
|
|
|
|
print(f"Initial entity count: {len(entities)}")
|
|
assert len(entities) == 3, "Should have 3 entities"
|
|
|
|
# Test 1: Remove an entity that exists
|
|
print("\nTest 1: Remove existing entity")
|
|
entities.remove(entity2)
|
|
assert len(entities) == 2, "Should have 2 entities after removal"
|
|
assert entity1 in entities, "Entity1 should still be in collection"
|
|
assert entity2 not in entities, "Entity2 should not be in collection"
|
|
assert entity3 in entities, "Entity3 should still be in collection"
|
|
print("✓ Successfully removed entity2")
|
|
|
|
# Test 2: Try to remove an entity that's not in the collection
|
|
print("\nTest 2: Remove non-existent entity")
|
|
try:
|
|
entities.remove(entity2) # Already removed
|
|
assert False, "Should have raised ValueError"
|
|
except ValueError as e:
|
|
print(f"✓ Got expected ValueError: {e}")
|
|
|
|
# Test 3: Try to remove with wrong type
|
|
print("\nTest 3: Remove with wrong type")
|
|
try:
|
|
entities.remove(42) # Not an Entity
|
|
assert False, "Should have raised TypeError"
|
|
except TypeError as e:
|
|
print(f"✓ Got expected TypeError: {e}")
|
|
|
|
# Test 4: Try to remove with None
|
|
print("\nTest 4: Remove with None")
|
|
try:
|
|
entities.remove(None)
|
|
assert False, "Should have raised TypeError"
|
|
except TypeError as e:
|
|
print(f"✓ Got expected TypeError: {e}")
|
|
|
|
# Test 5: Verify grid property is cleared (C++ internal)
|
|
print("\nTest 5: Grid property handling")
|
|
# Create a new entity and add it
|
|
entity4 = mcrfpy.Entity()
|
|
entity4.x = 20
|
|
entity4.y = 20
|
|
entities.append(entity4)
|
|
# Note: grid property is managed internally in C++ and not exposed to Python
|
|
|
|
# Remove it - this clears the C++ grid reference internally
|
|
entities.remove(entity4)
|
|
print("✓ Grid property handling (managed internally in C++)")
|
|
|
|
# Test 6: Remove all entities one by one
|
|
print("\nTest 6: Remove all entities")
|
|
entities.remove(entity1)
|
|
entities.remove(entity3)
|
|
assert len(entities) == 0, "Collection should be empty"
|
|
print("✓ Successfully removed all entities")
|
|
|
|
print("\n✅ All tests passed!")
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
success = test_remove_by_entity()
|
|
sys.exit(0 if success else 1)
|
|
except Exception as e:
|
|
print(f"\n❌ Test failed with exception: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1) |