49 lines
1.5 KiB
Python
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()
|