Clear stale sign data when signs break
This commit is contained in:
@@ -3,6 +3,7 @@ from unittest.mock import patch
|
||||
from munch import Munch
|
||||
|
||||
from mosfet.commands import Commands
|
||||
from mosfet.info import blocks
|
||||
from mosfet.protocol.managers import EntityManager, WorldState
|
||||
from mosfet.world import World
|
||||
|
||||
@@ -45,6 +46,47 @@ class SignReadingTests(unittest.TestCase):
|
||||
signs = World(Munch(chunks=chunks)).find_signs((4, 65, -2), 1)
|
||||
self.assertEqual(signs[0]['lines'], ('Farm', '', '', ''))
|
||||
|
||||
def test_broken_sign_block_update_removes_cached_sign_entity(self):
|
||||
position = (4, 65, -2)
|
||||
sign_state = blocks.MCD_BLOCKS['oak_wall_sign']['minStateId']
|
||||
|
||||
class FakeColumn:
|
||||
def __init__(self):
|
||||
self.states = {}
|
||||
|
||||
def get_block_at(self, x, y, z):
|
||||
return self.states.get((x, y, z), blocks.AIR)
|
||||
|
||||
def set_block_at(self, x, y, z, state_id):
|
||||
previous = self.get_block_at(x, y, z)
|
||||
self.states[(x, y, z)] = state_id
|
||||
return previous
|
||||
|
||||
chunks = WorldState()
|
||||
chunks.chunks[(0, -1)] = FakeColumn()
|
||||
chunks.set_block_at(*position, sign_state)
|
||||
chunks.set_block_entity(position, 7, {
|
||||
'front_text': {'messages': ['mosfet1 stay', 'within 8 square', '', '']},
|
||||
})
|
||||
world = World(Munch(chunks=chunks))
|
||||
|
||||
self.assertEqual(len(world.find_signs(position, 1)), 1)
|
||||
chunks.set_block_at(*position, blocks.AIR)
|
||||
|
||||
self.assertNotIn(position, chunks.block_entities)
|
||||
self.assertEqual(world.find_signs(position, 1), [])
|
||||
|
||||
def test_sign_search_ignores_stale_block_entity_for_non_sign_block(self):
|
||||
position = (4, 65, -2)
|
||||
chunks = Munch(
|
||||
block_entities={position: {'data': {'front_text': {
|
||||
'messages': ['mosfet1 stay', 'within 8 square', '', ''],
|
||||
}}}},
|
||||
get_block_at=lambda *_position: blocks.AIR,
|
||||
)
|
||||
|
||||
self.assertEqual(World(Munch(chunks=chunks)).find_signs(position, 1), [])
|
||||
|
||||
def test_group_and_individual_sign_addresses(self):
|
||||
group_world = World(Munch(chunks=Munch(block_entities={
|
||||
(0, 64, 0): {'data': {'front_text': {'messages': [
|
||||
|
||||
Reference in New Issue
Block a user