Merge branch 'master' into map_generation
# Conflicts: # squirrelbattle/interfaces.py
This commit is contained in:
		@@ -7,7 +7,8 @@ import unittest
 | 
			
		||||
from ..bootstrap import Bootstrap
 | 
			
		||||
from ..display.display import Display
 | 
			
		||||
from ..display.display_manager import DisplayManager
 | 
			
		||||
from ..entities.items import Bomb
 | 
			
		||||
from ..entities.friendly import Merchant, Sunflower
 | 
			
		||||
from ..entities.items import Bomb, Heart, Sword
 | 
			
		||||
from ..entities.player import Player
 | 
			
		||||
from ..enums import DisplayActions
 | 
			
		||||
from ..game import Game, KeyValues, GameMode
 | 
			
		||||
@@ -34,7 +35,17 @@ class TestGame(unittest.TestCase):
 | 
			
		||||
        """
 | 
			
		||||
        bomb = Bomb()
 | 
			
		||||
        self.game.map.add_entity(bomb)
 | 
			
		||||
        sword = Sword()
 | 
			
		||||
        self.game.map.add_entity(sword)
 | 
			
		||||
        # Add items in the inventory to check that it is well loaded
 | 
			
		||||
        bomb.hold(self.game.player)
 | 
			
		||||
        sword.hold(self.game.player)
 | 
			
		||||
 | 
			
		||||
        # Ensure that merchants can be saved
 | 
			
		||||
        merchant = Merchant()
 | 
			
		||||
        merchant.move(3, 6)
 | 
			
		||||
        self.game.map.add_entity(merchant)
 | 
			
		||||
 | 
			
		||||
        old_state = self.game.save_state()
 | 
			
		||||
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.DOWN)
 | 
			
		||||
@@ -117,6 +128,9 @@ class TestGame(unittest.TestCase):
 | 
			
		||||
        self.assertEqual(KeyValues.translate_key(
 | 
			
		||||
            self.game.settings.KEY_INVENTORY, self.game.settings),
 | 
			
		||||
            KeyValues.INVENTORY)
 | 
			
		||||
        self.assertEqual(KeyValues.translate_key(
 | 
			
		||||
            self.game.settings.KEY_CHAT, self.game.settings),
 | 
			
		||||
            KeyValues.CHAT)
 | 
			
		||||
        self.assertEqual(KeyValues.translate_key(
 | 
			
		||||
            self.game.settings.KEY_USE, self.game.settings),
 | 
			
		||||
            KeyValues.USE)
 | 
			
		||||
@@ -216,6 +230,33 @@ class TestGame(unittest.TestCase):
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.SPACE)
 | 
			
		||||
        self.assertEqual(self.game.state, GameMode.MAINMENU)
 | 
			
		||||
 | 
			
		||||
    def test_mouse_click(self) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        Simulate mouse clicks.
 | 
			
		||||
        """
 | 
			
		||||
        self.game.state = GameMode.MAINMENU
 | 
			
		||||
 | 
			
		||||
        # Settings menu
 | 
			
		||||
        self.game.display_actions(DisplayActions.MOUSE, 25, 21)
 | 
			
		||||
        self.assertEqual(self.game.main_menu.position, 4)
 | 
			
		||||
        self.assertEqual(self.game.state, GameMode.SETTINGS)
 | 
			
		||||
 | 
			
		||||
        bomb = Bomb()
 | 
			
		||||
        bomb.hold(self.game.player)
 | 
			
		||||
        bomb2 = Bomb()
 | 
			
		||||
        bomb2.hold(self.game.player)
 | 
			
		||||
 | 
			
		||||
        self.game.state = GameMode.INVENTORY
 | 
			
		||||
 | 
			
		||||
        # Click nowhere
 | 
			
		||||
        self.game.display_actions(DisplayActions.MOUSE, 0, 0)
 | 
			
		||||
        self.assertEqual(self.game.state, GameMode.INVENTORY)
 | 
			
		||||
 | 
			
		||||
        # Click on the second item
 | 
			
		||||
        self.game.display_actions(DisplayActions.MOUSE, 8, 25)
 | 
			
		||||
        self.assertEqual(self.game.state, GameMode.INVENTORY)
 | 
			
		||||
        self.assertEqual(self.game.inventory_menu.position, 1)
 | 
			
		||||
 | 
			
		||||
    def test_new_game(self) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        Ensure that the start button starts a new game.
 | 
			
		||||
@@ -280,7 +321,7 @@ class TestGame(unittest.TestCase):
 | 
			
		||||
        self.assertEqual(self.game.settings.KEY_LEFT_PRIMARY, 'a')
 | 
			
		||||
 | 
			
		||||
        # Navigate to "texture pack"
 | 
			
		||||
        for ignored in range(9):
 | 
			
		||||
        for ignored in range(10):
 | 
			
		||||
            self.game.handle_key_pressed(KeyValues.DOWN)
 | 
			
		||||
 | 
			
		||||
        # Change texture pack
 | 
			
		||||
@@ -417,3 +458,116 @@ class TestGame(unittest.TestCase):
 | 
			
		||||
        self.assertTrue(bomb.exploding)
 | 
			
		||||
        self.assertEqual(bomb.y, self.game.player.y)
 | 
			
		||||
        self.assertEqual(bomb.x, self.game.player.x)
 | 
			
		||||
 | 
			
		||||
    def test_talk_to_sunflowers(self) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        Interact with sunflowers
 | 
			
		||||
        """
 | 
			
		||||
        self.game.state = GameMode.PLAY
 | 
			
		||||
 | 
			
		||||
        sunflower = Sunflower()
 | 
			
		||||
        sunflower.move(2, 6)
 | 
			
		||||
        self.game.map.add_entity(sunflower)
 | 
			
		||||
 | 
			
		||||
        # Does nothing
 | 
			
		||||
        self.assertIsNone(self.game.handle_friendly_entity_chat(KeyValues.UP))
 | 
			
		||||
 | 
			
		||||
        # Talk to sunflower... or not
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.CHAT)
 | 
			
		||||
        self.assertTrue(self.game.waiting_for_friendly_key)
 | 
			
		||||
        # Wrong key
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.EQUIP)
 | 
			
		||||
        self.assertFalse(self.game.waiting_for_friendly_key)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.CHAT)
 | 
			
		||||
        self.assertTrue(self.game.waiting_for_friendly_key)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.UP)
 | 
			
		||||
        self.assertFalse(self.game.waiting_for_friendly_key)
 | 
			
		||||
        self.assertEqual(self.game.state, GameMode.PLAY)
 | 
			
		||||
        self.assertFalse(len(self.game.logs.messages) > 1)
 | 
			
		||||
 | 
			
		||||
        # Talk to sunflower
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.CHAT)
 | 
			
		||||
        self.assertTrue(self.game.waiting_for_friendly_key)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.DOWN)
 | 
			
		||||
        self.assertFalse(self.game.waiting_for_friendly_key)
 | 
			
		||||
        self.assertEqual(self.game.state, GameMode.PLAY)
 | 
			
		||||
        self.assertTrue(self.game.logs.messages)
 | 
			
		||||
        # Ensure that the message is a good message
 | 
			
		||||
        self.assertIn(self.game.logs.messages[1][21:],
 | 
			
		||||
                      Sunflower.dialogue_option)
 | 
			
		||||
 | 
			
		||||
        # Test all directions to detect the friendly entity
 | 
			
		||||
        self.game.player.move(3, 6)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.CHAT)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.UP)
 | 
			
		||||
        self.assertEqual(len(self.game.logs.messages), 3)
 | 
			
		||||
        self.game.player.move(2, 7)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.CHAT)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.LEFT)
 | 
			
		||||
        self.assertEqual(len(self.game.logs.messages), 4)
 | 
			
		||||
        self.game.player.move(2, 5)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.CHAT)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.RIGHT)
 | 
			
		||||
        self.assertEqual(len(self.game.logs.messages), 5)
 | 
			
		||||
 | 
			
		||||
    def test_talk_to_merchant(self) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        Interact with merchants
 | 
			
		||||
        """
 | 
			
		||||
        self.game.state = GameMode.PLAY
 | 
			
		||||
 | 
			
		||||
        merchant = Merchant()
 | 
			
		||||
        merchant.move(2, 6)
 | 
			
		||||
        self.game.map.add_entity(merchant)
 | 
			
		||||
 | 
			
		||||
        # Does nothing
 | 
			
		||||
        self.assertIsNone(self.game.handle_friendly_entity_chat(KeyValues.UP))
 | 
			
		||||
 | 
			
		||||
        # Talk to merchant
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.CHAT)
 | 
			
		||||
        self.assertTrue(self.game.waiting_for_friendly_key)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.DOWN)
 | 
			
		||||
        self.assertFalse(self.game.waiting_for_friendly_key)
 | 
			
		||||
        self.assertEqual(self.game.state, GameMode.STORE)
 | 
			
		||||
        self.assertTrue(self.game.logs.messages)
 | 
			
		||||
 | 
			
		||||
        # Navigate in the menu
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.DOWN)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.DOWN)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.UP)
 | 
			
		||||
        self.assertEqual(self.game.store_menu.position, 1)
 | 
			
		||||
 | 
			
		||||
        # The second item is not a heart
 | 
			
		||||
        merchant.inventory[1] = Sword()
 | 
			
		||||
        # Buy the second item by clicking on it
 | 
			
		||||
        item = self.game.store_menu.validate()
 | 
			
		||||
        self.assertIn(item, merchant.inventory)
 | 
			
		||||
        self.game.display_actions(DisplayActions.MOUSE, 8, 25)
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.ENTER)
 | 
			
		||||
        self.assertIn(item, self.game.player.inventory)
 | 
			
		||||
        self.assertNotIn(item, merchant.inventory)
 | 
			
		||||
 | 
			
		||||
        # Buy a heart
 | 
			
		||||
        merchant.inventory[1] = Heart()
 | 
			
		||||
        item = self.game.store_menu.validate()
 | 
			
		||||
        self.assertIn(item, merchant.inventory)
 | 
			
		||||
        self.assertEqual(item, merchant.inventory[1])
 | 
			
		||||
        self.game.player.health = self.game.player.maxhealth - 1 - item.healing
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.ENTER)
 | 
			
		||||
        self.assertNotIn(item, self.game.player.inventory)
 | 
			
		||||
        self.assertNotIn(item, merchant.inventory)
 | 
			
		||||
        self.assertEqual(self.game.player.health,
 | 
			
		||||
                         self.game.player.maxhealth - 1)
 | 
			
		||||
 | 
			
		||||
        # We don't have enough of money
 | 
			
		||||
        self.game.player.hazel = 0
 | 
			
		||||
        item = self.game.store_menu.validate()
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.ENTER)
 | 
			
		||||
        self.assertNotIn(item, self.game.player.inventory)
 | 
			
		||||
        self.assertIn(item, merchant.inventory)
 | 
			
		||||
        self.assertEqual(self.game.message, _("You do not have enough money"))
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.ENTER)
 | 
			
		||||
 | 
			
		||||
        # Exit the menu
 | 
			
		||||
        self.game.handle_key_pressed(KeyValues.SPACE)
 | 
			
		||||
        self.assertEqual(self.game.state, GameMode.PLAY)
 | 
			
		||||
 
 | 
			
		||||
@@ -50,6 +50,8 @@ class TestTranslations(unittest.TestCase):
 | 
			
		||||
                         "Touche pour équiper un objet de l'inventaire")
 | 
			
		||||
        self.assertEqual(_("Key used to drop an item in the inventory"),
 | 
			
		||||
                         "Touche pour jeter un objet de l'inventaire")
 | 
			
		||||
        self.assertEqual(_("Key used to talk to a friendly entity"),
 | 
			
		||||
                         "Touche pour parler à une entité pacifique")
 | 
			
		||||
        self.assertEqual(_("Texture pack"), "Pack de textures")
 | 
			
		||||
        self.assertEqual(_("Language"), "Langue")
 | 
			
		||||
 | 
			
		||||
@@ -64,3 +66,4 @@ class TestTranslations(unittest.TestCase):
 | 
			
		||||
        self.assertEqual(_("body snatch potion"), "potion d'arrachage de corps")
 | 
			
		||||
        self.assertEqual(_("bomb"), "bombe")
 | 
			
		||||
        self.assertEqual(_("heart"), "cœur")
 | 
			
		||||
        self.assertEqual(_("sword"), "épée")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user