142 lines
4.8 KiB
Python
142 lines
4.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""Test for mcrfpy.Grid class - Related to issues #77, #74, #50, #52, #20"""
|
|
import mcrfpy
|
|
from datetime import datetime
|
|
try:
|
|
from mcrfpy import automation
|
|
has_automation = True
|
|
except ImportError:
|
|
has_automation = False
|
|
print("Warning: automation module not available")
|
|
|
|
def test_Grid():
|
|
"""Test Grid creation and properties"""
|
|
# Create test scene
|
|
mcrfpy.createScene("grid_test")
|
|
mcrfpy.setScene("grid_test")
|
|
ui = mcrfpy.sceneUI("grid_test")
|
|
|
|
# Test grid creation
|
|
try:
|
|
# Note: Grid requires texture, creating one for testing
|
|
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
|
|
grid = mcrfpy.Grid(20, 15, # grid dimensions
|
|
texture, # texture
|
|
mcrfpy.Vector(10, 10), # position
|
|
mcrfpy.Vector(400, 300)) # size
|
|
ui.append(grid)
|
|
print("[PASS] Grid created successfully")
|
|
except Exception as e:
|
|
print(f"[FAIL] Failed to create Grid: {e}")
|
|
print("FAIL")
|
|
return
|
|
|
|
# Test grid properties
|
|
try:
|
|
# Test grid_size (Issue #20)
|
|
grid_size = grid.grid_size
|
|
print(f"[PASS] Grid size: {grid_size}")
|
|
|
|
# Test position and size
|
|
print(f"Position: {grid.position}")
|
|
print(f"Size: {grid.size}")
|
|
|
|
# Test individual coordinate properties
|
|
print(f"Coordinates: x={grid.x}, y={grid.y}, w={grid.w}, h={grid.h}")
|
|
|
|
# Test grid_y property (Issue #74)
|
|
try:
|
|
# This might fail if grid_y is not implemented
|
|
print(f"Grid dimensions via properties: grid_x=?, grid_y=?")
|
|
print("[FAIL] Issue #74: Grid.grid_y property may be missing")
|
|
except:
|
|
pass
|
|
|
|
except Exception as e:
|
|
print(f"[FAIL] Property access failed: {e}")
|
|
|
|
# Test center/pan functionality
|
|
try:
|
|
grid.center = mcrfpy.Vector(10, 7)
|
|
print(f"[PASS] Center set to: {grid.center}")
|
|
grid.center_x = 5
|
|
grid.center_y = 5
|
|
print(f"[PASS] Center modified to: ({grid.center_x}, {grid.center_y})")
|
|
except Exception as e:
|
|
print(f"[FAIL] Center/pan failed: {e}")
|
|
|
|
# Test zoom
|
|
try:
|
|
grid.zoom = 1.5
|
|
print(f"[PASS] Zoom set to: {grid.zoom}")
|
|
except Exception as e:
|
|
print(f"[FAIL] Zoom failed: {e}")
|
|
|
|
# Test at() method for GridPoint access (Issue #77)
|
|
try:
|
|
# This tests the error message issue
|
|
point = grid.at(0, 0)
|
|
print("[PASS] GridPoint access works")
|
|
|
|
# Try out of bounds access to test error message
|
|
try:
|
|
invalid_point = grid.at(100, 100)
|
|
print("[FAIL] Out of bounds access should fail")
|
|
except Exception as e:
|
|
error_msg = str(e)
|
|
if "Grid.grid_y" in error_msg:
|
|
print(f"[FAIL] Issue #77: Error message has copy/paste bug: {error_msg}")
|
|
else:
|
|
print(f"[PASS] Out of bounds error: {error_msg}")
|
|
except Exception as e:
|
|
print(f"[FAIL] GridPoint access failed: {e}")
|
|
|
|
# Test entities collection
|
|
try:
|
|
entities = grid.entities
|
|
print(f"[PASS] Entities collection has {len(entities)} items")
|
|
|
|
# Add an entity
|
|
entity = mcrfpy.Entity(mcrfpy.Vector(5, 5),
|
|
texture,
|
|
0, # sprite index
|
|
grid)
|
|
entities.append(entity)
|
|
print(f"[PASS] Entity added, collection now has {len(entities)} items")
|
|
|
|
# Test out-of-bounds entity (Issue #52)
|
|
out_entity = mcrfpy.Entity(mcrfpy.Vector(50, 50), # Outside 20x15 grid
|
|
texture,
|
|
1,
|
|
grid)
|
|
entities.append(out_entity)
|
|
print("[PASS] Out-of-bounds entity added (Issue #52: should be skipped in rendering)")
|
|
|
|
except Exception as e:
|
|
print(f"[FAIL] Entity management failed: {e}")
|
|
|
|
# Note about missing features
|
|
print("\nMissing features:")
|
|
print("- Issue #50: UIGrid background color field")
|
|
print("- Issue #6, #8, #9: RenderTexture support")
|
|
|
|
# Take screenshot if automation is available
|
|
if has_automation:
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
filename = f"test_Grid_{timestamp}.png"
|
|
automation.screenshot(filename)
|
|
print(f"Screenshot saved: {filename}")
|
|
else:
|
|
print("Screenshot skipped - automation not available")
|
|
print("PASS")
|
|
|
|
# Set up timer to run test
|
|
mcrfpy.setTimer("test", test_Grid, 1000)
|
|
|
|
# Cancel timer after running once
|
|
def cleanup():
|
|
mcrfpy.delTimer("test")
|
|
mcrfpy.delTimer("cleanup")
|
|
|
|
mcrfpy.setTimer("cleanup", cleanup, 1100) |