Save player mode.
authorJeremy Thurgood <firxen@gmail.com>
Fri, 16 May 2014 21:13:58 +0000 (23:13 +0200)
committerJeremy Thurgood <firxen@gmail.com>
Fri, 16 May 2014 21:13:58 +0000 (23:13 +0200)
naja/gameboard.py
naja/tests/test_actions.py
naja/tests/test_gameboard.py

index e02dd3d51b16fc0d0afebfbc5584856f1db64d2a..8a1daa7673b28d34dc1c264f5c5d0c3b3b3d5325 100644 (file)
@@ -22,7 +22,7 @@ class GameBoard(object):
         self.puzzle = state.get('puzzle', False)
         self.player = player
         self.board_locations = board_locations
-        self.player_mode = EXAMINE
+        self.player_mode = state.get('player_mode', EXAMINE)
 
     @classmethod
     def new_game(cls, deck,
@@ -63,6 +63,7 @@ class GameBoard(object):
             'puzzle': self.puzzle,
             'player': self.player.export(),
             'board_locations': self.export_board_locations(),
+            'player_mode': self.player_mode,
         }
 
     @classmethod
index 891936799d4ab0827bf9aeeb5c6a781e321a3a2b..d770f12397f04ffec487192ba299a8445f51a3a1 100644 (file)
@@ -2,11 +2,15 @@ from unittest import TestCase
 
 from naja.constants import BITS, MOVES
 from naja.gameboard import GameBoard, LocationCard
+from naja.options import parse_args
 from naja.player import Player
 from naja import actions
 
 
 class TestActions(TestCase):
+    def setUp(self):
+        parse_args([])
+
     def make_player(self, *bits):
         player_bits = 0
         for bit in bits:
@@ -16,7 +20,7 @@ class TestActions(TestCase):
     def make_board(self, player_bits=None, locations=None):
         if locations is None:
             locations = [{'actions': []}]
-        board = GameBoard.new_game(locations)
+        board = GameBoard.new_game({'cards': locations})
         if player_bits is not None:
             board.player.bits.bits = 0
             board.player.bits.set_bits(player_bits)
index e3aa32e03be48a27e0da319219fa880e25491c77..ca031a33bee7c9e9b1a305e5f1a92c2ab2f4d859 100644 (file)
@@ -1,11 +1,20 @@
 from unittest import TestCase
 
-from naja.constants import BITS, MOVES
+from naja.constants import BITS, MOVES, EXAMINE
 from naja.gameboard import GameBoard, LocationCard
+from naja.options import parse_args
 from naja import actions
 
 
 class TestGameBoard(TestCase):
+    def setUp(self):
+        parse_args([])
+
+    def make_deck(self, cards=None):
+        if cards is None:
+            cards = [{'actions': []}]
+        return {'cards': cards}
+
     def assert_state(self, state1, state2, exclude=(), player_exclude=()):
         def filter_dict(source, exclude_keys):
             return dict((k, v) for k, v in source.items()
@@ -21,7 +30,7 @@ class TestGameBoard(TestCase):
         self.assertEqual(state1, state2)
 
     def test_export_new_board(self):
-        board = GameBoard.new_game([{'actions': [
+        board = GameBoard.new_game({'cards': [{'actions': [
             {
                 'action_class': 'LoseHealthOrMSB',
                 'required_bits': [],
@@ -29,7 +38,7 @@ class TestGameBoard(TestCase):
                 'action_class': 'GainHealth',
                 'required_bits': [BITS.RED],
             },
-        ]}])
+        ]}]})
         exported_state = board.export()
         board_locations = exported_state.pop('board_locations')
         self.assertEqual(exported_state, {
@@ -47,6 +56,8 @@ class TestGameBoard(TestCase):
                 },
             ]}],
             'player': board.player.export(),
+            'puzzle': False,
+            'player_mode': EXAMINE,
         })
         positions = []
         for position, location_state in board_locations:
@@ -69,7 +80,7 @@ class TestGameBoard(TestCase):
             positions, sorted((x, y) for x in range(5) for y in range(5)))
 
     def test_lose_health(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         self.assertEqual(board.health, 4)
         state_1 = board.export()
 
@@ -80,7 +91,7 @@ class TestGameBoard(TestCase):
         self.assert_state(state_1, state_2, exclude=['health'])
 
     def test_gain_health(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.health = 2
         self.assertEqual(board.health, 2)
         state_1 = board.export()
@@ -92,7 +103,7 @@ class TestGameBoard(TestCase):
         self.assert_state(state_1, state_2, exclude=['health'])
 
     def test_gain_health_at_max(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         self.assertEqual(board.health, 4)
         state_1 = board.export()
 
@@ -110,7 +121,7 @@ class TestGameBoard(TestCase):
         return locations_dict
 
     def test_shift_locations_north(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.board_locations = self.generate_locations()
         board.shift_locations('NORTH')
         self.assertEqual(board.board_locations, self.generate_locations({
@@ -118,7 +129,7 @@ class TestGameBoard(TestCase):
         }))
 
     def test_shift_locations_south(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.board_locations = self.generate_locations()
         board.shift_locations('SOUTH')
         self.assertEqual(board.board_locations, self.generate_locations({
@@ -126,7 +137,7 @@ class TestGameBoard(TestCase):
         }))
 
     def test_shift_locations_east(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.board_locations = self.generate_locations()
         board.shift_locations('EAST')
         self.assertEqual(board.board_locations, self.generate_locations({
@@ -134,7 +145,7 @@ class TestGameBoard(TestCase):
         }))
 
     def test_shift_locations_west(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.board_locations = self.generate_locations()
         board.shift_locations('WEST')
         self.assertEqual(board.board_locations, self.generate_locations({
@@ -142,7 +153,7 @@ class TestGameBoard(TestCase):
         }))
 
     def test_rotate_locations_clockwise(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.board_locations = self.generate_locations()
         board.rotate_locations('CLOCKWISE')
         self.assertEqual(board.board_locations, self.generate_locations({
@@ -152,7 +163,7 @@ class TestGameBoard(TestCase):
         }))
 
     def test_rotate_locations_clockwise_top(self):
-        board = GameBoard.new_game([{'actions': []}], initial_pos=(2, 0))
+        board = GameBoard.new_game(self.make_deck(), initial_pos=(2, 0))
         board.board_locations = self.generate_locations()
         board.rotate_locations('CLOCKWISE')
         self.assertEqual(board.board_locations, self.generate_locations({
@@ -161,7 +172,7 @@ class TestGameBoard(TestCase):
         }))
 
     def test_rotate_locations_clockwise_right(self):
-        board = GameBoard.new_game([{'actions': []}], initial_pos=(0, 2))
+        board = GameBoard.new_game(self.make_deck(), initial_pos=(0, 2))
         board.board_locations = self.generate_locations()
         board.rotate_locations('CLOCKWISE')
         self.assertEqual(board.board_locations, self.generate_locations({
@@ -171,7 +182,7 @@ class TestGameBoard(TestCase):
         }))
 
     def test_rotate_locations_clockwise_corner(self):
-        board = GameBoard.new_game([{'actions': []}], initial_pos=(0, 4))
+        board = GameBoard.new_game(self.make_deck(), initial_pos=(0, 4))
         board.board_locations = self.generate_locations()
         board.rotate_locations('CLOCKWISE')
         self.assertEqual(board.board_locations, self.generate_locations({
@@ -180,7 +191,7 @@ class TestGameBoard(TestCase):
         }))
 
     def test_rotate_locations_anticlockwise(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.board_locations = self.generate_locations()
         board.rotate_locations('ANTICLOCKWISE')
         self.assertEqual(board.board_locations, self.generate_locations({
@@ -190,17 +201,17 @@ class TestGameBoard(TestCase):
         }))
 
     def test_allow_chess_move_knight(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.allow_chess_move(MOVES.KNIGHT)
         self.assertEqual(board.player.movement_mode, MOVES.KNIGHT)
 
     def test_allow_chess_move_bishop(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.allow_chess_move(MOVES.BISHOP)
         self.assertEqual(board.player.movement_mode, MOVES.BISHOP)
 
     def test_allow_chess_move_castle(self):
-        board = GameBoard.new_game([{'actions': []}])
+        board = GameBoard.new_game(self.make_deck())
         board.allow_chess_move(MOVES.CASTLE)
         self.assertEqual(board.player.movement_mode, MOVES.CASTLE)