Files
minecraft-bot/tests/test_health_packet.py
T

49 lines
1.5 KiB
Python

import io
import struct
import unittest
from munch import Munch
from mosfet.game import Game
from mosfet.protocol.packets import SetHealthPacket
class TestSetHealthPacket(unittest.TestCase):
def test_protocol_777_packet_decodes_all_status_values(self):
payload = struct.pack('>f', 13.5) + bytes([14]) + struct.pack('>f', 5.25)
packet = SetHealthPacket()
packet.read(io.BytesIO(payload))
self.assertEqual(packet.id, 0x6A)
self.assertEqual(packet.health, 13.5)
self.assertEqual(packet.food, 14)
self.assertEqual(packet.food_saturation, 5.25)
def test_game_state_tracks_health_hunger_and_saturation(self):
game = Game.__new__(Game)
game.g = Munch()
game.handle_set_health(SetHealthPacket(
health=7.5, food=9, food_saturation=2.25))
self.assertEqual(game.g.health, 7.5)
self.assertEqual(game.g.food, 9)
self.assertEqual(game.g.hunger, 9)
self.assertEqual(game.g.food_saturation, 2.25)
self.assertEqual(game.g.saturation, 2.25)
self.assertTrue(game.g.health_update_received)
self.assertFalse(game.g.dead)
def test_zero_health_marks_bot_dead_without_faking_values(self):
game = Game.__new__(Game)
game.g = Munch()
game.handle_set_health(SetHealthPacket(
health=0.0, food=0, food_saturation=0.0))
self.assertEqual(game.g.health, 0.0)
self.assertEqual(game.g.food, 0)
self.assertTrue(game.g.dead)
if __name__ == '__main__':
unittest.main()