Example #1
0
    def test_initialization_multiple_factions(self) -> None:

        halfling = faction.Halflings()
        engineer = faction.Engineers()
        cultBoard = cult.CultBoard(factions=[halfling, engineer])

        for _, order in cultBoard.occupied_orders.items():
            self.assertFalse(order)
        # faction.Halflings should be on earth and air.
        # faction.Engineers will be zero everywhere.
        self.assertEqual(cultBoard.positions[common.CultTrack.EARTH], {
            common.Terrain.PLAIN: 1,
            common.Terrain.MOUNTAIN: 0
        })
        self.assertEqual(cultBoard.positions[common.CultTrack.AIR], {
            common.Terrain.PLAIN: 1,
            common.Terrain.MOUNTAIN: 0
        })
        self.assertEqual(cultBoard.positions[common.CultTrack.FIRE], {
            common.Terrain.PLAIN: 0,
            common.Terrain.MOUNTAIN: 0
        })
        self.assertEqual(cultBoard.positions[common.CultTrack.WATER], {
            common.Terrain.PLAIN: 0,
            common.Terrain.MOUNTAIN: 0
        })
Example #2
0
    def test_structure_cost(self) -> None:
        engineer = faction.Engineers()

        # Dwelling.
        self.assertEqual(
            engineer.structure_cost(common.Structure.DWELLING,
                                    adjacentEnemyStructure=False),
            common.Resources(workers=1, coins=1))
        self.assertEqual(
            engineer.structure_cost(common.Structure.DWELLING,
                                    adjacentEnemyStructure=True),
            common.Resources(workers=1, coins=1))

        # Trading post.
        self.assertEqual(
            engineer.structure_cost(common.Structure.TRADING_POST,
                                    adjacentEnemyStructure=False),
            common.Resources(workers=1, coins=4))
        self.assertEqual(
            engineer.structure_cost(common.Structure.TRADING_POST,
                                    adjacentEnemyStructure=True),
            common.Resources(workers=1, coins=2))

        # Stronghold
        self.assertEqual(
            engineer.structure_cost(common.Structure.STRONGHOLD,
                                    adjacentEnemyStructure=False),
            common.Resources(workers=3, coins=6))
        self.assertEqual(
            engineer.structure_cost(common.Structure.STRONGHOLD,
                                    adjacentEnemyStructure=True),
            common.Resources(workers=3, coins=6))

        # Temple.
        self.assertEqual(
            engineer.structure_cost(common.Structure.TEMPLE,
                                    adjacentEnemyStructure=False),
            common.Resources(workers=1, coins=4))
        self.assertEqual(
            engineer.structure_cost(common.Structure.TEMPLE,
                                    adjacentEnemyStructure=True),
            common.Resources(workers=1, coins=4))

        # Sanctuary.
        self.assertEqual(
            engineer.structure_cost(common.Structure.SANCTUARY,
                                    adjacentEnemyStructure=False),
            common.Resources(workers=3, coins=6))
        self.assertEqual(
            engineer.structure_cost(common.Structure.SANCTUARY,
                                    adjacentEnemyStructure=True),
            common.Resources(workers=3, coins=6))
Example #3
0
    def test_engineer_player(self) -> None:
        test_player = player.Player(name="test",
                                    player_faction=faction.Engineers())

        # Halfling configuration.
        self.assertEqual(test_player.power, {
            common.PowerBowl.I: 3,
            common.PowerBowl.II: 9,
            common.PowerBowl.III: 0
        })
        self.assertEqual(test_player.resources,
                         common.Resources(coins=10, workers=2))
        self.assertEqual(test_player.used_town_keys, {})
        self.assertEqual(test_player.victory_points, 20)
Example #4
0
    def test_income_for_structures(self) -> None:
        engineer = faction.Engineers()

        # tests SH + SA + DW income, with 1 DW incoming missing.
        self.assertEqual(
            engineer.income_for_structures({
                common.Structure.DWELLING: 4,
                common.Structure.STRONGHOLD: 1,
                common.Structure.SANCTUARY: 1
            }), common.Income(workers=3, priests=1, power=2))

        # Test TP + TE income, extra power.
        self.assertEqual(
            engineer.income_for_structures({
                common.Structure.TRADING_POST: 3,
                common.Structure.TEMPLE: 2
            }), common.Income(priests=1, coins=6, power=9))
Example #5
0
    def test_starting_resources(self) -> None:
        engineer = faction.Engineers()

        self.assertEqual(engineer.home_terrain(), common.Terrain.MOUNTAIN)
        self.assertEqual(engineer.starting_power(), {
            common.PowerBowl.I: 3,
            common.PowerBowl.II: 9,
            common.PowerBowl.III: 0
        })
        self.assertEqual(engineer.starting_resources(),
                         common.Resources(workers=2, coins=10))
        self.assertEqual(
            {
                common.CultTrack.AIR: 0,
                common.CultTrack.WATER: 0,
                common.CultTrack.FIRE: 0,
                common.CultTrack.EARTH: 0
            }, engineer.starting_cult_positions())
        self.assertEqual(engineer.staring_shipping(), 0)
Example #6
0
 def test_engineer_creation(self) -> None:
     engineer = faction.Engineers()  # noqa
Example #7
0
    def test_cant_occupy_already_taken_town(self) -> None:
        factions = [faction.Halflings(), faction.Engineers()]
        player1 = player.Player(name="test", player_faction=factions[0])
        player2 = player.Player(name="test", player_faction=factions[1])
        cultBoard = cult.CultBoard(factions=factions)

        # Both players have town keys.
        player1.gain_town(common.TownKey.PRIEST)
        player2.gain_town(common.TownKey.CULT)

        # Halfling takes the earth track by 1 -> 4 -> 6 -> 8 -> 10
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player1,
                                                common.CultTrack.EARTH),
            (3, 1))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player1,
                                                common.CultTrack.EARTH),
            (2, 2))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player1,
                                                common.CultTrack.EARTH),
            (2, 2))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player1,
                                                common.CultTrack.EARTH),
            (2, 3))

        # Now engineer tries by 0 -> 1 -> 2 -> ... -> 9 -> 9 ... -> 9.
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (1, 0))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (1, 0))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (1, 1))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (1, 0))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (1, 2))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (1, 0))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (1, 2))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (1, 0))
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (1, 0))

        # Try again, but even with the town-key, player will fail.
        self.assertEqual(
            cultBoard.sacrifice_priest_to_order(player2,
                                                common.CultTrack.EARTH),
            (0, 0))
        # Player still has town key.
        self.assertTrue(player2.use_town_key())

        # Positions of players.
        self.assertEqual(cultBoard.positions[common.CultTrack.EARTH], {
            common.Terrain.PLAIN: 10,
            common.Terrain.MOUNTAIN: 9
        })