Implements a module-level zone registry for looking up zones by name. Includes register_zone() and get_zone() functions with comprehensive tests covering single/multiple zones, unknown lookups, and overwrites.
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
"""Tests for zone registry."""
|
|
|
|
import pytest
|
|
|
|
from mudlib.zone import Zone
|
|
from mudlib.zones import get_zone, register_zone, zone_registry
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def clear_registry():
|
|
"""Clear zone registry before each test."""
|
|
zone_registry.clear()
|
|
yield
|
|
zone_registry.clear()
|
|
|
|
|
|
def test_register_zone():
|
|
"""Register a zone by name."""
|
|
zone = Zone(name="test_zone", width=10, height=10, terrain=[], toroidal=False)
|
|
register_zone("test_zone", zone)
|
|
|
|
assert "test_zone" in zone_registry
|
|
assert zone_registry["test_zone"] is zone
|
|
|
|
|
|
def test_get_zone():
|
|
"""Look up a zone by name."""
|
|
zone = Zone(name="test_zone", width=10, height=10, terrain=[], toroidal=False)
|
|
register_zone("test_zone", zone)
|
|
|
|
retrieved = get_zone("test_zone")
|
|
assert retrieved is zone
|
|
|
|
|
|
def test_get_zone_unknown():
|
|
"""Get None for unknown zone name."""
|
|
result = get_zone("nonexistent")
|
|
assert result is None
|
|
|
|
|
|
def test_register_multiple_zones():
|
|
"""Register multiple zones."""
|
|
zone1 = Zone(name="zone1", width=10, height=10, terrain=[], toroidal=False)
|
|
zone2 = Zone(name="zone2", width=20, height=15, terrain=[], toroidal=True)
|
|
|
|
register_zone("zone1", zone1)
|
|
register_zone("zone2", zone2)
|
|
|
|
assert len(zone_registry) == 2
|
|
assert get_zone("zone1") is zone1
|
|
assert get_zone("zone2") is zone2
|
|
|
|
|
|
def test_overwrite_zone():
|
|
"""Registering same name twice overwrites."""
|
|
zone1 = Zone(name="zone", width=10, height=10, terrain=[], toroidal=False)
|
|
zone2 = Zone(name="zone", width=20, height=20, terrain=[], toroidal=False)
|
|
|
|
register_zone("zone", zone1)
|
|
register_zone("zone", zone2)
|
|
|
|
assert get_zone("zone") is zone2
|