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()