72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
import unittest
|
|
from munch import Munch
|
|
|
|
from mosfet.commands import Commands
|
|
from mosfet.protocol.managers import EntityManager, WorldState
|
|
from mosfet.world import World
|
|
|
|
|
|
class SignReadingTests(unittest.TestCase):
|
|
def test_world_decodes_front_and_back_sign_components(self):
|
|
chunks = Munch(block_entities={
|
|
(2, 64, 3): {
|
|
'type': 7,
|
|
'data': {
|
|
'front_text': {'messages': [
|
|
'{"text":"Hello","extra":[{"text":" world"}]}',
|
|
'{"text":"line two"}', '', ''],
|
|
},
|
|
'back_text': {'messages': [
|
|
'{"text":"back"}', '', '', ''],
|
|
},
|
|
},
|
|
},
|
|
})
|
|
signs = World(Munch(chunks=chunks)).find_signs((0, 64, 0), 10)
|
|
|
|
self.assertEqual(signs, [
|
|
{'position': (2, 64, 3), 'side': 'front',
|
|
'lines': ('Hello world', 'line two', '', '')},
|
|
{'position': (2, 64, 3), 'side': 'back',
|
|
'lines': ('back', '', '', '')},
|
|
])
|
|
|
|
def test_block_entity_update_is_cached_for_sign_search(self):
|
|
chunks = WorldState()
|
|
manager = object.__new__(EntityManager)
|
|
manager.g = Munch(chunks=chunks)
|
|
manager.handle_block_entity_data(Munch(
|
|
location=Munch(x=4, y=65, z=-2),
|
|
block_entity_type=7,
|
|
data={'front_text': {'messages': ['{"text":"Farm"}', '', '', '']}},
|
|
))
|
|
|
|
signs = World(Munch(chunks=chunks)).find_signs((4, 65, -2), 1)
|
|
self.assertEqual(signs[0]['lines'], ('Farm', '', '', ''))
|
|
|
|
def test_signs_command_replies_with_nearby_text(self):
|
|
class FakeChat:
|
|
def __init__(self):
|
|
self.sent = []
|
|
|
|
def set_handler(self, handler):
|
|
self.handler = handler
|
|
|
|
def send(self, message):
|
|
self.sent.append(message)
|
|
|
|
chat = FakeChat()
|
|
world = Munch(find_signs=lambda _position, _distance: [{
|
|
'position': (1, 64, 2), 'side': 'front',
|
|
'lines': ('Hello', 'world', '', ''),
|
|
}])
|
|
commands = Commands(Munch(
|
|
name='mosfet1', chat=chat, world=world, pos=(0.5, 64.0, 0.5)))
|
|
commands.handle_chat(('CHAT', 'tester', 'tester: !signs'))
|
|
|
|
self.assertEqual(chat.sent, ['front (1, 64, 2): Hello | world'])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|