Fix broken tests

This commit is contained in:
Yohann D'ANELLO 2020-11-19 01:11:11 +01:00
parent a80a604212
commit 0d5812bfaa
6 changed files with 78 additions and 47 deletions

View File

@ -63,6 +63,14 @@ class Heart(Item):
player.health = min(player.maxhealth, player.health + self.healing) player.health = min(player.maxhealth, player.health + self.healing)
self.map.remove_entity(self) self.map.remove_entity(self)
def save_state(self) -> dict:
"""
Saves the state of the header into a dictionary
"""
d = super().save_state()
d["healing"] = self.healing
return d
class Bomb(Item): class Bomb(Item):
""" """
@ -90,3 +98,12 @@ class Bomb(Item):
if abs(e.x - self.x) + abs(e.y - self.y) <= 1 and \ if abs(e.x - self.x) + abs(e.y - self.y) <= 1 and \
isinstance(e, FightingEntity): isinstance(e, FightingEntity):
e.take_damage(self, self.damage) e.take_damage(self, self.damage)
def save_state(self) -> dict:
"""
Saves the state of the bomb into a dictionary
"""
d = super().save_state()
d["exploding"] = self.exploding
d["damage"] = self.damage
return d

View File

@ -135,8 +135,6 @@ class Map:
d["currenty"] = self.currenty d["currenty"] = self.currenty
d["entities"] = [] d["entities"] = []
for enti in self.entities: for enti in self.entities:
if enti.save_state() is None:
raise Exception(enti)
d["entities"].append(enti.save_state()) d["entities"].append(enti.save_state())
d["map"] = self.draw_string(TexturePack.ASCII_PACK) d["map"] = self.draw_string(TexturePack.ASCII_PACK)
return d return d

View File

@ -120,9 +120,3 @@ class SettingsMenu(Menu):
game.settings.write_settings() game.settings.write_settings()
self.waiting_for_key = False self.waiting_for_key = False
self.update_values(game.settings) self.update_values(game.settings)
class ArbitraryMenu(Menu):
def __init__(self, values: list):
super().__init__()
self.values = values

View File

@ -1,7 +1,7 @@
import unittest import unittest
from dungeonbattle.entities.items import Bomb, Heart, Item from dungeonbattle.entities.items import Bomb, Heart, Item
from dungeonbattle.entities.monsters import Hedgehog from dungeonbattle.entities.monsters import Beaver, Hedgehog, Rabbit, TeddyBear
from dungeonbattle.entities.player import Player from dungeonbattle.entities.player import Player
from dungeonbattle.interfaces import Entity, Map from dungeonbattle.interfaces import Entity, Map
@ -35,21 +35,18 @@ class TestEntities(unittest.TestCase):
""" """
Test some random stuff with fighting entities. Test some random stuff with fighting entities.
""" """
entity = Hedgehog() entity = Beaver()
self.map.add_entity(entity) self.map.add_entity(entity)
self.assertEqual(entity.maxhealth, 10) self.assertEqual(entity.maxhealth, 20)
self.assertEqual(entity.maxhealth, entity.health) self.assertEqual(entity.maxhealth, entity.health)
self.assertEqual(entity.strength, 3) self.assertEqual(entity.strength, 2)
self.assertIsNone(entity.hit(entity)) for _ in range(9):
self.assertFalse(entity.dead) self.assertIsNone(entity.hit(entity))
self.assertIsNone(entity.hit(entity)) self.assertFalse(entity.dead)
self.assertFalse(entity.dead)
self.assertIsNone(entity.hit(entity))
self.assertFalse(entity.dead)
self.assertIsNone(entity.hit(entity)) self.assertIsNone(entity.hit(entity))
self.assertTrue(entity.dead) self.assertTrue(entity.dead)
entity = Hedgehog() entity = Rabbit()
self.map.add_entity(entity) self.map.add_entity(entity)
entity.move(15, 44) entity.move(15, 44)
# Move randomly # Move randomly
@ -61,13 +58,17 @@ class TestEntities(unittest.TestCase):
self.map.tick() self.map.tick()
self.assertTrue(entity.y == 2 and entity.x == 6) self.assertTrue(entity.y == 2 and entity.x == 6)
# Hedgehog should fight # Rabbit should fight
old_health = self.player.health old_health = self.player.health
self.map.tick() self.map.tick()
self.assertTrue(entity.y == 2 and entity.x == 6) self.assertTrue(entity.y == 2 and entity.x == 6)
self.assertEqual(old_health - entity.strength, self.player.health) self.assertEqual(old_health - entity.strength, self.player.health)
# Fight the hedgehog # Fight the rabbit
old_health = entity.health
self.player.move_down()
self.assertEqual(entity.health, old_health - self.player.strength)
self.assertFalse(entity.dead)
old_health = entity.health old_health = entity.health
self.player.move_down() self.player.move_down()
self.assertEqual(entity.health, old_health - self.player.strength) self.assertEqual(entity.health, old_health - self.player.strength)
@ -104,17 +105,25 @@ class TestEntities(unittest.TestCase):
""" """
item = Bomb() item = Bomb()
hedgehog = Hedgehog() hedgehog = Hedgehog()
teddy_bear = TeddyBear()
self.map.add_entity(item) self.map.add_entity(item)
self.map.add_entity(hedgehog) self.map.add_entity(hedgehog)
self.map.add_entity(teddy_bear)
hedgehog.health = 2 hedgehog.health = 2
teddy_bear.health = 2
hedgehog.move(41, 42) hedgehog.move(41, 42)
teddy_bear.move(42, 41)
item.act(self.map) item.act(self.map)
self.assertFalse(hedgehog.dead) self.assertFalse(hedgehog.dead)
self.assertFalse(teddy_bear.dead)
item.drop(42, 42) item.drop(42, 42)
self.assertEqual(item.y, 42) self.assertEqual(item.y, 42)
self.assertEqual(item.x, 42) self.assertEqual(item.x, 42)
item.act(self.map) item.act(self.map)
self.assertTrue(hedgehog.dead) self.assertTrue(hedgehog.dead)
self.assertTrue(teddy_bear.dead)
bomb_state = item.save_state()
self.assertEqual(bomb_state["damage"], item.damage)
def test_hearts(self) -> None: def test_hearts(self) -> None:
""" """
@ -128,6 +137,8 @@ class TestEntities(unittest.TestCase):
self.assertNotIn(item, self.map.entities) self.assertNotIn(item, self.map.entities)
self.assertEqual(self.player.health, self.assertEqual(self.player.health,
self.player.maxhealth - item.healing) self.player.maxhealth - item.healing)
heart_state = item.save_state()
self.assertEqual(heart_state["healing"], item.healing)
def test_players(self) -> None: def test_players(self) -> None:
""" """
@ -158,3 +169,6 @@ class TestEntities(unittest.TestCase):
self.assertEqual(player.current_xp, 10) self.assertEqual(player.current_xp, 10)
self.assertEqual(player.max_xp, 40) self.assertEqual(player.max_xp, 40)
self.assertEqual(player.level, 4) self.assertEqual(player.level, 4)
player_state = player.save_state()
self.assertEqual(player_state["current_xp"], 10)

View File

@ -21,8 +21,20 @@ class TestGame(unittest.TestCase):
self.game.display_actions = display.handle_display_action self.game.display_actions = display.handle_display_action
def test_load_game(self) -> None: def test_load_game(self) -> None:
self.assertRaises(NotImplementedError, Game.load_game, "game.save") """
self.assertRaises(NotImplementedError, Display(None).display) Save a game and reload it.
"""
old_state = self.game.save_state()
self.game.handle_key_pressed(KeyValues.DOWN)
self.assertEqual(self.game.main_menu.validate(), MainMenuValues.SAVE)
self.game.handle_key_pressed(KeyValues.ENTER) # Save game
self.game.handle_key_pressed(KeyValues.DOWN)
self.assertEqual(self.game.main_menu.validate(), MainMenuValues.LOAD)
self.game.handle_key_pressed(KeyValues.ENTER) # Load game
new_state = self.game.save_state()
self.assertEqual(old_state, new_state)
def test_bootstrap_fail(self) -> None: def test_bootstrap_fail(self) -> None:
""" """
@ -82,6 +94,12 @@ class TestGame(unittest.TestCase):
self.assertEqual(self.game.main_menu.validate(), self.assertEqual(self.game.main_menu.validate(),
MainMenuValues.START) MainMenuValues.START)
self.game.handle_key_pressed(KeyValues.DOWN) self.game.handle_key_pressed(KeyValues.DOWN)
self.assertEqual(self.game.main_menu.validate(),
MainMenuValues.SAVE)
self.game.handle_key_pressed(KeyValues.DOWN)
self.assertEqual(self.game.main_menu.validate(),
MainMenuValues.LOAD)
self.game.handle_key_pressed(KeyValues.DOWN)
self.assertEqual(self.game.main_menu.validate(), self.assertEqual(self.game.main_menu.validate(),
MainMenuValues.SETTINGS) MainMenuValues.SETTINGS)
self.game.handle_key_pressed(KeyValues.ENTER) self.game.handle_key_pressed(KeyValues.ENTER)
@ -100,6 +118,12 @@ class TestGame(unittest.TestCase):
self.assertEqual(self.game.main_menu.validate(), self.assertEqual(self.game.main_menu.validate(),
MainMenuValues.SETTINGS) MainMenuValues.SETTINGS)
self.game.handle_key_pressed(KeyValues.UP) self.game.handle_key_pressed(KeyValues.UP)
self.assertEqual(self.game.main_menu.validate(),
MainMenuValues.LOAD)
self.game.handle_key_pressed(KeyValues.UP)
self.assertEqual(self.game.main_menu.validate(),
MainMenuValues.SAVE)
self.game.handle_key_pressed(KeyValues.UP)
self.assertEqual(self.game.main_menu.validate(), self.assertEqual(self.game.main_menu.validate(),
MainMenuValues.START) MainMenuValues.START)
@ -146,6 +170,8 @@ class TestGame(unittest.TestCase):
# Open settings menu # Open settings menu
self.game.handle_key_pressed(KeyValues.DOWN) self.game.handle_key_pressed(KeyValues.DOWN)
self.game.handle_key_pressed(KeyValues.DOWN)
self.game.handle_key_pressed(KeyValues.DOWN)
self.game.handle_key_pressed(KeyValues.ENTER) self.game.handle_key_pressed(KeyValues.ENTER)
self.assertEqual(self.game.state, GameMode.SETTINGS) self.assertEqual(self.game.state, GameMode.SETTINGS)
@ -214,3 +240,9 @@ class TestGame(unittest.TestCase):
new_y, new_x = self.game.player.y, self.game.player.x new_y, new_x = self.game.player.y, self.game.player.x
self.assertEqual(new_y, y) self.assertEqual(new_y, y)
self.assertEqual(new_x, x) self.assertEqual(new_x, x)
def test_not_implemented(self) -> None:
"""
Check that some functions are not implemented, only for coverage.
"""
self.assertRaises(NotImplementedError, Display.display, None)

View File

@ -1,24 +0,0 @@
import unittest
from dungeonbattle.menus import ArbitraryMenu, MainMenu, MainMenuValues
class TestMenus(unittest.TestCase):
def test_scroll_menu(self) -> None:
"""
Test to scroll the menu.
"""
arbitrary_menu = ArbitraryMenu([])
self.assertEqual(arbitrary_menu.position, 0)
main_menu = MainMenu()
self.assertEqual(main_menu.position, 0)
self.assertEqual(main_menu.validate(), MainMenuValues.START)
main_menu.go_up()
self.assertEqual(main_menu.validate(), MainMenuValues.START)
main_menu.go_down()
self.assertEqual(main_menu.validate(), MainMenuValues.SETTINGS)
main_menu.go_down()
self.assertEqual(main_menu.validate(), MainMenuValues.EXIT)
main_menu.go_down()
self.assertEqual(main_menu.validate(), MainMenuValues.EXIT)