McRogueFace/tests/unit/test_layer_position_parsing.py

149 lines
4.7 KiB
Python

#!/usr/bin/env python3
"""Test ColorLayer and TileLayer position parsing with new PyPositionHelper pattern."""
import sys
import mcrfpy
def test_colorlayer_at():
"""Test ColorLayer.at() with various position formats."""
print("Testing ColorLayer.at() position parsing...")
# Create a grid and color layer
grid = mcrfpy.Grid(grid_size=(10, 10))
layer = mcrfpy.ColorLayer(z_index=-1, grid_size=(10, 10))
grid.layers.append(layer)
# Set a color at position
layer.set((5, 5), mcrfpy.Color(255, 0, 0))
# Test at() with tuple
c1 = layer.at((5, 5))
assert c1.r == 255 and c1.g == 0 and c1.b == 0, f"Failed: tuple position - got {c1.r},{c1.g},{c1.b}"
print(" - tuple position: PASS")
# Test at() with two args
c2 = layer.at(5, 5)
assert c2.r == 255 and c2.g == 0 and c2.b == 0, f"Failed: two args - got {c2.r},{c2.g},{c2.b}"
print(" - two args: PASS")
# Test at() with list (if supported)
c3 = layer.at([5, 5])
assert c3.r == 255 and c3.g == 0 and c3.b == 0, f"Failed: list position - got {c3.r},{c3.g},{c3.b}"
print(" - list position: PASS")
# Test at() with Vector
vec = mcrfpy.Vector(5, 5)
c4 = layer.at(vec)
assert c4.r == 255 and c4.g == 0 and c4.b == 0, f"Failed: Vector position - got {c4.r},{c4.g},{c4.b}"
print(" - Vector position: PASS")
print("ColorLayer.at(): ALL PASS")
def test_colorlayer_set():
"""Test ColorLayer.set() with grouped position."""
print("Testing ColorLayer.set() grouped position...")
grid = mcrfpy.Grid(grid_size=(10, 10))
layer = mcrfpy.ColorLayer(z_index=-1, grid_size=(10, 10))
grid.layers.append(layer)
# Test set() with tuple position
layer.set((3, 4), mcrfpy.Color(0, 255, 0))
c = layer.at((3, 4))
assert c.g == 255, f"Failed: tuple position - got g={c.g}"
print(" - tuple position: PASS")
# Test set() with list position
layer.set([7, 8], (0, 0, 255)) # Also test tuple color
c2 = layer.at((7, 8))
assert c2.b == 255, f"Failed: list position - got b={c2.b}"
print(" - list position: PASS")
# Test set() with Vector position
layer.set(mcrfpy.Vector(1, 1), mcrfpy.Color(128, 128, 128))
c3 = layer.at((1, 1))
assert c3.r == 128, f"Failed: Vector position - got r={c3.r}"
print(" - Vector position: PASS")
print("ColorLayer.set(): ALL PASS")
def test_tilelayer_at():
"""Test TileLayer.at() with various position formats."""
print("Testing TileLayer.at() position parsing...")
# Create a grid and tile layer
grid = mcrfpy.Grid(grid_size=(10, 10))
texture = mcrfpy.Texture("assets/kenney_tinydungeon.png", 16, 16)
layer = mcrfpy.TileLayer(z_index=-1, texture=texture, grid_size=(10, 10))
grid.layers.append(layer)
# Set a tile at position
layer.set((5, 5), 42)
# Test at() with tuple
t1 = layer.at((5, 5))
assert t1 == 42, f"Failed: tuple position - got {t1}"
print(" - tuple position: PASS")
# Test at() with two args
t2 = layer.at(5, 5)
assert t2 == 42, f"Failed: two args - got {t2}"
print(" - two args: PASS")
# Test at() with list
t3 = layer.at([5, 5])
assert t3 == 42, f"Failed: list position - got {t3}"
print(" - list position: PASS")
# Test at() with Vector
t4 = layer.at(mcrfpy.Vector(5, 5))
assert t4 == 42, f"Failed: Vector position - got {t4}"
print(" - Vector position: PASS")
print("TileLayer.at(): ALL PASS")
def test_tilelayer_set():
"""Test TileLayer.set() with grouped position."""
print("Testing TileLayer.set() grouped position...")
grid = mcrfpy.Grid(grid_size=(10, 10))
texture = mcrfpy.Texture("assets/kenney_tinydungeon.png", 16, 16)
layer = mcrfpy.TileLayer(z_index=-1, texture=texture, grid_size=(10, 10))
grid.layers.append(layer)
# Test set() with tuple position
layer.set((3, 4), 10)
assert layer.at((3, 4)) == 10, "Failed: tuple position"
print(" - tuple position: PASS")
# Test set() with list position
layer.set([7, 8], 20)
assert layer.at((7, 8)) == 20, "Failed: list position"
print(" - list position: PASS")
# Test set() with Vector position
layer.set(mcrfpy.Vector(1, 1), 30)
assert layer.at((1, 1)) == 30, "Failed: Vector position"
print(" - Vector position: PASS")
print("TileLayer.set(): ALL PASS")
# Run all tests
try:
test_colorlayer_at()
test_colorlayer_set()
test_tilelayer_at()
test_tilelayer_set()
print("\n=== ALL TESTS PASSED ===")
sys.exit(0)
except AssertionError as e:
print(f"\nTEST FAILED: {e}")
sys.exit(1)
except Exception as e:
print(f"\nTEST ERROR: {type(e).__name__}: {e}")
import traceback
traceback.print_exc()
sys.exit(1)