Positions are always mcrfpy.Vector, Vector/tuple/iterables expected as inputs, and for position-only inputs we permit x,y args to prevent requiring double-parens
This commit is contained in:
parent
016ca693b5
commit
d2e4791f5a
25 changed files with 2109 additions and 636 deletions
149
tests/unit/test_layer_position_parsing.py
Normal file
149
tests/unit/test_layer_position_parsing.py
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
#!/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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue