added more tests for chess moves; they all pass
[naja.git] / naja / tests / test_actions.py
index 02c07964342df9f4d06ee6c7cca4427d49e62edd..f590caa9e576adf99e6cb1ab9dbebd3dda15e498 100644 (file)
@@ -1,6 +1,6 @@
 from unittest import TestCase
 
 from unittest import TestCase
 
-from naja.constants import BITS
+from naja.constants import BITS, MOVES
 from naja.gameboard import GameBoard, LocationCard
 from naja.player import Player
 from naja import actions
 from naja.gameboard import GameBoard, LocationCard
 from naja.player import Player
 from naja import actions
@@ -50,9 +50,32 @@ class TestActions(TestCase):
         check_available(set([BITS.MSB]), [], False)
         check_available(set([BITS.MSB]), [BITS.MSB], True)
 
         check_available(set([BITS.MSB]), [], False)
         check_available(set([BITS.MSB]), [BITS.MSB], True)
 
-    def test_bits_translation(self):
-        action = actions.LocationAction(set([BITS.NORTH, 'MSB']))
-        self.assertEqual(action.required_bits, set([BITS.NORTH, BITS.MSB]))
+    def test_get_text(self):
+        class LocationAction1(actions.LocationAction):
+            TEXT = "foo"
+        action1 = LocationAction1([])
+        self.assertEqual(action1.get_text(), "foo")
+
+        class LocationAction2(actions.LocationAction):
+            TEXT = "foo %(bar)s"
+        action2 = LocationAction2([], bar="baz")
+        self.assertEqual(action2.get_text(), "foo baz")
+
+    def test_get_text_row_column(self):
+        class DirectionAction(actions.LocationAction):
+            TEXT = "foo %(direction)s %(rowcol)s"
+
+        action_north = DirectionAction([], direction='NORTH')
+        self.assertEqual(action_north.get_text(), "foo NORTH column")
+
+        action_south = DirectionAction([], direction='SOUTH')
+        self.assertEqual(action_south.get_text(), "foo SOUTH column")
+
+        action_east = DirectionAction([], direction='EAST')
+        self.assertEqual(action_east.get_text(), "foo EAST row")
+
+        action_west = DirectionAction([], direction='WEST')
+        self.assertEqual(action_west.get_text(), "foo WEST row")
 
     def test_DoNothing(self):
         board = self.make_board()
 
     def test_DoNothing(self):
         board = self.make_board()
@@ -100,11 +123,11 @@ class TestActions(TestCase):
     def test_LoseHealthOrMSBAndSetBits_MSB_clear(self):
         board = self.make_board(player_bits=[])
         state_before = board.export()
     def test_LoseHealthOrMSBAndSetBits_MSB_clear(self):
         board = self.make_board(player_bits=[])
         state_before = board.export()
-        card = LocationCard(set([BITS.CYAN, BITS.NORTH]), [])
+        card = LocationCard(set([BITS.BLUE, BITS.NORTH]), [])
         actions.LoseHealthOrMSBAndSetBits(set()).perform_action(board, card)
         state_after = board.export()
         self.assertEqual(state_after['health'], state_before['health'] - 1)
         actions.LoseHealthOrMSBAndSetBits(set()).perform_action(board, card)
         state_after = board.export()
         self.assertEqual(state_after['health'], state_before['health'] - 1)
-        self.assert_player_bits(board, BITS.CYAN, BITS.NORTH)
+        self.assert_player_bits(board, BITS.BLUE, BITS.NORTH)
         self.assert_state(
             state_before, state_after, exclude=['health'],
             player_exclude=['bits'])
         self.assert_state(
             state_before, state_after, exclude=['health'],
             player_exclude=['bits'])
@@ -112,10 +135,10 @@ class TestActions(TestCase):
     def test_LoseHealthOrMSBAndSetBits_MSB_set(self):
         board = self.make_board(player_bits=[BITS.MSB])
         state_before = board.export()
     def test_LoseHealthOrMSBAndSetBits_MSB_set(self):
         board = self.make_board(player_bits=[BITS.MSB])
         state_before = board.export()
-        card = LocationCard(set([BITS.CYAN, BITS.NORTH]), [])
+        card = LocationCard(set([BITS.BLUE, BITS.NORTH]), [])
         actions.LoseHealthOrMSBAndSetBits(set()).perform_action(board, card)
         state_after = board.export()
         actions.LoseHealthOrMSBAndSetBits(set()).perform_action(board, card)
         state_after = board.export()
-        self.assert_player_bits(board, BITS.CYAN, BITS.NORTH)
+        self.assert_player_bits(board, BITS.BLUE, BITS.NORTH)
         self.assert_state(state_before, state_after, player_exclude=['bits'])
 
     def test_LoseHealthOrMSBAndSetBits_MSB_set_and_on_card(self):
         self.assert_state(state_before, state_after, player_exclude=['bits'])
 
     def test_LoseHealthOrMSBAndSetBits_MSB_set_and_on_card(self):
@@ -129,7 +152,7 @@ class TestActions(TestCase):
 
     def test_AcquireWinToken(self):
         board = self.make_board(
 
     def test_AcquireWinToken(self):
         board = self.make_board(
-            player_bits=[BITS.CYAN, BITS.MAGENTA, BITS.YELLOW])
+            player_bits=[BITS.RED, BITS.GREEN, BITS.BLUE])
         state_before = board.export()
         actions.AcquireWinToken(set()).perform_action(board, None)
         state_after = board.export()
         state_before = board.export()
         actions.AcquireWinToken(set()).perform_action(board, None)
         state_after = board.export()
@@ -143,7 +166,7 @@ class TestActions(TestCase):
         board = self.make_board(player_bits=[BITS.NORTH])
         board.lose_health()
         state_before = board.export()
         board = self.make_board(player_bits=[BITS.NORTH])
         board.lose_health()
         state_before = board.export()
-        card = LocationCard(set([BITS.CYAN, BITS.NORTH]), [])
+        card = LocationCard(set([BITS.BLUE, BITS.NORTH]), [])
         actions.GainHealthAndClearBitsOrMSB(set()).perform_action(board, card)
         state_after = board.export()
         self.assertEqual(state_after['health'], state_before['health'] + 1)
         actions.GainHealthAndClearBitsOrMSB(set()).perform_action(board, card)
         state_after = board.export()
         self.assertEqual(state_after['health'], state_before['health'] + 1)
@@ -156,7 +179,7 @@ class TestActions(TestCase):
         board = self.make_board(player_bits=[BITS.MSB, BITS.NORTH])
         board.lose_health()
         state_before = board.export()
         board = self.make_board(player_bits=[BITS.MSB, BITS.NORTH])
         board.lose_health()
         state_before = board.export()
-        card = LocationCard(set([BITS.CYAN, BITS.NORTH]), [])
+        card = LocationCard(set([BITS.BLUE, BITS.NORTH]), [])
         actions.GainHealthAndClearBitsOrMSB(set()).perform_action(board, card)
         state_after = board.export()
         self.assertEqual(state_after['health'], state_before['health'] + 1)
         actions.GainHealthAndClearBitsOrMSB(set()).perform_action(board, card)
         state_after = board.export()
         self.assertEqual(state_after['health'], state_before['health'] + 1)
@@ -164,3 +187,20 @@ class TestActions(TestCase):
         self.assert_state(
             state_before, state_after, exclude=['health'],
             player_exclude=['bits'])
         self.assert_state(
             state_before, state_after, exclude=['health'],
             player_exclude=['bits'])
+
+    def test_AllowKnightMove(self):
+        board = self.make_board(player_bits=[BITS.RED, BITS.BLUE])
+        actions.AllowChessMove(set([BITS.RED, BITS.BLUE]), chesspiece="KNIGHT").perform_action(board, None)
+        self.assertEqual(board.player.movement_mode, MOVES.KNIGHT)
+
+
+    def test_AllowBishopMove(self):
+        board = self.make_board(player_bits=[BITS.RED, BITS.BLUE])
+        actions.AllowChessMove(set([BITS.RED, BITS.BLUE]), chesspiece="BISHOP").perform_action(board, None)
+        self.assertEqual(board.player.movement_mode, MOVES.BISHOP)
+
+
+    def test_AllowCastleMove(self):
+        board = self.make_board(player_bits=[BITS.RED, BITS.BLUE])
+        actions.AllowChessMove(set([BITS.RED, BITS.BLUE]), chesspiece="CASTLE").perform_action(board, None)
+        self.assertEqual(board.player.movement_mode, MOVES.CASTLE)