105 lines
3.7 KiB
Python
105 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test for Issue #27: EntityCollection.extend() method
|
|
|
|
Verifies that EntityCollection can extend with multiple entities at once.
|
|
"""
|
|
|
|
def test_entity_extend(timer_name):
|
|
"""Test that EntityCollection.extend() method works correctly"""
|
|
import mcrfpy
|
|
import sys
|
|
|
|
print("Issue #27 test: EntityCollection.extend() method")
|
|
|
|
# Create test scene and grid
|
|
mcrfpy.createScene("test")
|
|
ui = mcrfpy.sceneUI("test")
|
|
|
|
# Create grid with texture
|
|
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
|
|
grid = mcrfpy.Grid(10, 10, texture, (10, 10), (400, 400))
|
|
ui.append(grid)
|
|
|
|
# Add some initial entities
|
|
entity1 = mcrfpy.Entity((1, 1), texture, 1, grid)
|
|
entity2 = mcrfpy.Entity((2, 2), texture, 2, grid)
|
|
grid.entities.append(entity1)
|
|
grid.entities.append(entity2)
|
|
|
|
print(f"✓ Initial entities: {len(grid.entities)}")
|
|
|
|
# Test 1: Extend with a list of entities
|
|
new_entities = [
|
|
mcrfpy.Entity((3, 3), texture, 3, grid),
|
|
mcrfpy.Entity((4, 4), texture, 4, grid),
|
|
mcrfpy.Entity((5, 5), texture, 5, grid)
|
|
]
|
|
|
|
try:
|
|
grid.entities.extend(new_entities)
|
|
assert len(grid.entities) == 5, f"Expected 5 entities, got {len(grid.entities)}"
|
|
print(f"✓ Extended with list: now {len(grid.entities)} entities")
|
|
except Exception as e:
|
|
print(f"✗ Failed to extend with list: {e}")
|
|
raise
|
|
|
|
# Test 2: Extend with a tuple
|
|
more_entities = (
|
|
mcrfpy.Entity((6, 6), texture, 6, grid),
|
|
mcrfpy.Entity((7, 7), texture, 7, grid)
|
|
)
|
|
|
|
try:
|
|
grid.entities.extend(more_entities)
|
|
assert len(grid.entities) == 7, f"Expected 7 entities, got {len(grid.entities)}"
|
|
print(f"✓ Extended with tuple: now {len(grid.entities)} entities")
|
|
except Exception as e:
|
|
print(f"✗ Failed to extend with tuple: {e}")
|
|
raise
|
|
|
|
# Test 3: Extend with generator expression
|
|
try:
|
|
grid.entities.extend(mcrfpy.Entity((8, i), texture, 8+i, grid) for i in range(3))
|
|
assert len(grid.entities) == 10, f"Expected 10 entities, got {len(grid.entities)}"
|
|
print(f"✓ Extended with generator: now {len(grid.entities)} entities")
|
|
except Exception as e:
|
|
print(f"✗ Failed to extend with generator: {e}")
|
|
raise
|
|
|
|
# Test 4: Verify all entities have correct grid association
|
|
for i, entity in enumerate(grid.entities):
|
|
# Just checking that we can iterate and access them
|
|
assert entity.sprite_number >= 1, f"Entity {i} has invalid sprite number"
|
|
print("✓ All entities accessible and valid")
|
|
|
|
# Test 5: Invalid input - non-iterable
|
|
try:
|
|
grid.entities.extend(42)
|
|
print("✗ Should have raised TypeError for non-iterable")
|
|
except TypeError as e:
|
|
print(f"✓ Correctly rejected non-iterable: {e}")
|
|
|
|
# Test 6: Invalid input - iterable with non-Entity
|
|
try:
|
|
grid.entities.extend([entity1, "not an entity", entity2])
|
|
print("✗ Should have raised TypeError for non-Entity in iterable")
|
|
except TypeError as e:
|
|
print(f"✓ Correctly rejected non-Entity in iterable: {e}")
|
|
|
|
# Test 7: Empty iterable (should work)
|
|
initial_count = len(grid.entities)
|
|
try:
|
|
grid.entities.extend([])
|
|
assert len(grid.entities) == initial_count, "Empty extend changed count"
|
|
print("✓ Empty extend works correctly")
|
|
except Exception as e:
|
|
print(f"✗ Empty extend failed: {e}")
|
|
raise
|
|
|
|
print(f"\n✅ Issue #27 test PASSED - EntityCollection.extend() works correctly")
|
|
sys.exit(0)
|
|
|
|
# Execute the test after a short delay
|
|
import mcrfpy
|
|
mcrfpy.setTimer("test", test_entity_extend, 100) |