class KingTest(unittest.TestCase):

    def setUp(self):
        self.tboard = TestBoard()

    def test_piece_becomes_king_when_reaching_other_side(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ _ _ _ _ _ _ _#
        #4 _ _ _ _ _ _ _ _#
        #5 _ _ _ T _ _ _ _#
        #6 _ _ B _ x _ _ _#
        #7 _ x _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(5, 3, origin.TOP)
        self.tboard.place_piece(6, 2, origin.BOTTOM)

        self.tboard.game.move_piece((5, 3), (7, 1))
        self.assertIsNone(self.tboard.game.get_piece(5, 3))
        self.assertIsNone(self.tboard.game.get_piece(6, 2))
        self.assertIsNotNone(self.tboard.game.get_piece(7, 1))
        
        self.assertTrue(self.tboard.game.get_piece(7, 1).is_king())
class BestMovementWithDepthTest(unittest.TestCase):

    def setUp(self):
        self.tboard = TestBoard()

    def test_calculate_moves_up_to_depth_one_does_not_touch_original_board_and_selects_best_move_considering_others_result_in_more_lost_pieces(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ T _ _ _ _ _#
        #3 _ x _ x _ _ _ _#
        #4 B _ _ _ _ _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(2, 2, origin.TOP)
        self.tboard.place_piece(4, 0, origin.BOTTOM)
        best_move = BestMoveWithDepth(1, origin.TOP).calculate_for(self.tboard.game)
        self.assertEquals(as_move_list([(2, 2), (3, 3)]), best_move)
        self.assertIsNone(self.tboard.game.get_piece(3, 3))
        self.assertIsNotNone(self.tboard.game.get_piece(2, 2))
        
    def test_error_raised_if_depth_of_0_given(self):
        self.assertRaises(NameError, BestMoveWithDepth(0, origin.BOTTOM).calculate_for, self.tboard.game)
Exemple #3
0
 def test_if_it_is_bottoms_turn_then_ai_auto_moves_piece_on_board(self):
     self.gamepanel = main.view.checkers.Checkers(ai=easyai.EasyAI())
     self.tboard = TestBoard(self.gamepanel.game)
     # # # # # # # # # #
     #  0 1 2 3 4 5 6 7#
     #0 _ _ _ _ _ _ _ _#
     #1 _ _ _ _ _ _ _ _#
     #2 _ _ _ _ _ _ _ _#
     #3 _ _ T _ _ _ _ _#
     #4 B _ _ B _ _ _ _#
     #5 _ _ _ _ x _ _ _#
     #6 _ _ _ _ _ B _ _#
     #7 _ _ _ _ _ _ x _#
     # # # # # # # # # #
     self.tboard.place_piece(3, 2, origin.TOP)
     self.tboard.place_piece(4, 0, origin.BOTTOM)
     self.tboard.place_piece(4, 3, origin.BOTTOM)
     self.tboard.place_piece(6, 5, origin.BOTTOM)
     
     self.move_piece(3, 2, 5, 4)
     self.move_piece(5, 4, 7, 6)
     
     self.assertTrue(self.tboard.game.get_piece(7, 6).is_king())
     self.assertTrue(self.tboard.game.get_piece(7, 6).is_king())
     self.assertIsNone(self.tboard.game.get_piece(4, 3))
     self.assertIsNone(self.tboard.game.get_piece(6, 5))
     
     self.gamepanel.make_ai_move()
     # AI moved piece
     self.assertIsNone(self.tboard.game.get_piece(4, 0))
     self.assertIsNotNone(self.tboard.game.get_piece(3, 1))
class OriginMovesTest(unittest.TestCase):

    def setUp(self):
        self.tboard = TestBoard()
    
    def test_get_all_moves_for_given_origin(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ x x _ x _ _ _#
        #4 B _ _ B _ _ _ _#
        #5 _ _ _ _ x _ x _#
        #6 _ _ _ _ _ B _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(4, 0, origin.BOTTOM)
        self.tboard.place_piece(4, 3, origin.BOTTOM)
        self.tboard.place_piece(6, 5, origin.BOTTOM)
        allmoves = OriginMoves(self.tboard.game.board, origin.BOTTOM).get_moves()
        
        self.assertEqual(5, len(allmoves))
        self.assertEqual(as_move_list([(4, 0), (3, 1)]), allmoves[0])
        self.assertEqual(as_move_list([(4, 3), (3, 2)]), allmoves[1])
        self.assertEqual(as_move_list([(4, 3), (3, 4)]), allmoves[2])
        self.assertEqual(as_move_list([(6, 5), (5, 4)]), allmoves[3])
        self.assertEqual(as_move_list([(6, 5), (5, 6)]), allmoves[4])
        
    def test_origin_moves_list_contains_only_non_empty_move_lists(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ _ _ _ _ _ _ _#
        #4 _ _ _ _ _ _ _ _#
        #5 _ _ x _ x _ x _#
        #6 _ _ _ B _ B _ _#
        #7 _ _ _ _ B _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(6, 3, origin.BOTTOM)
        self.tboard.place_piece(6, 5, origin.BOTTOM)
        self.tboard.place_piece(7, 4, origin.BOTTOM)
        
        allmoves = OriginMoves(self.tboard.game.board,origin.BOTTOM).get_moves()
        self.assertEqual(4, len(allmoves))
        self.assertEqual(as_move_list([(6, 3), (5, 2)]), allmoves[0])
        self.assertEqual(as_move_list([(6, 3), (5, 4)]), allmoves[1])
        self.assertEqual(as_move_list([(6, 5), (5, 4)]), allmoves[2])
        self.assertEqual(as_move_list([(6, 5), (5, 6)]), allmoves[3])
Exemple #5
0
class AITest(unittest.TestCase):

    def test_if_it_is_bottoms_turn_then_ai_auto_moves_piece_on_board(self):
        self.gamepanel = main.view.checkers.Checkers(ai=easyai.EasyAI())
        self.tboard = TestBoard(self.gamepanel.game)
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ _ T _ _ _ _ _#
        #4 B _ _ B _ _ _ _#
        #5 _ _ _ _ x _ _ _#
        #6 _ _ _ _ _ B _ _#
        #7 _ _ _ _ _ _ x _#
        # # # # # # # # # #
        self.tboard.place_piece(3, 2, origin.TOP)
        self.tboard.place_piece(4, 0, origin.BOTTOM)
        self.tboard.place_piece(4, 3, origin.BOTTOM)
        self.tboard.place_piece(6, 5, origin.BOTTOM)
        
        self.move_piece(3, 2, 5, 4)
        self.move_piece(5, 4, 7, 6)
        
        self.assertTrue(self.tboard.game.get_piece(7, 6).is_king())
        self.assertTrue(self.tboard.game.get_piece(7, 6).is_king())
        self.assertIsNone(self.tboard.game.get_piece(4, 3))
        self.assertIsNone(self.tboard.game.get_piece(6, 5))
        
        self.gamepanel.make_ai_move()
        # AI moved piece
        self.assertIsNone(self.tboard.game.get_piece(4, 0))
        self.assertIsNotNone(self.tboard.game.get_piece(3, 1))

    def move_piece(self, from_row, from_col, to_row, to_col):
        self.gamepanel.slotting.select_piece(MockEvent(from_col * (DEFAULT_WIDTH/DEFAULT_COLS),
                                                  from_row * (DEFAULT_HEIGHT/DEFAULT_ROWS)))
        self.gamepanel.slotting.release_piece(MockEvent(to_col * (DEFAULT_WIDTH/DEFAULT_COLS),
                                                   to_row * (DEFAULT_HEIGHT/DEFAULT_ROWS)))
 def setUp(self):
     self.tboard = TestBoard()
class KingMovementTest(unittest.TestCase):

    def setUp(self):
        self.tboard = TestBoard()

    def test_king_can_move_in_either_direction(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ x _ x _ _ _ _#
        #3 _ _ b _ _ _ _ _#
        #4 _ x _ T _ _ _ _#
        #5 _ _ _ _ x _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_king(3, 2, origin.BOTTOM)
        self.tboard.place_piece(4, 3, origin.TOP)
        calc = Movement(self.tboard.game.board, 3, 2)
        moves = calc.get_available_moves()
        self.assertEqual(4, len(moves))
        self.assertEqual(as_move_list([(3, 2), (4, 1)]), moves[0])
        self.assertEqual(as_move_list([(3, 2), (5, 4)]), moves[1])
        self.assertEqual(as_move_list([(3, 2), (2, 1)]), moves[2])
        self.assertEqual(as_move_list([(3, 2), (2, 3)]), moves[3])
        
    def test_king_moves_case_1(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ x _ _ _#
        #2 _ x _ t _ t _ _#
        #3 _ _ b _ _ _ x _#
        #4 _ x _ x _ T _ _#
        #5 _ _ _ _ x _ _ _#
        #6 _ _ _ _ _ t _ _#
        #7 _ _ _ _ _ _ x _#
        # # # # # # # # # #
        self.tboard.place_king(2, 3, origin.TOP)
        self.tboard.place_king(2, 5, origin.TOP)
        self.tboard.place_king(3, 2, origin.BOTTOM)
        self.tboard.place_piece(4, 5, origin.TOP)
        self.tboard.place_king(6, 5, origin.TOP)
        calc = Movement(self.tboard.game.board, 3, 2)
        moves = calc.get_available_moves()
        self.assertEqual(4, len(moves))
        self.assertEqual(as_move_list([(3, 2), (4, 1)]), moves[0])
        self.assertEqual(as_move_list([(3, 2), (4, 3)]), moves[1])
        self.assertEqual(as_move_list([(3, 2), (2, 1)]), moves[2])
        self.assertEqual(as_move_list([(3, 2), (1, 4), (3, 6), (5, 4), (7, 6)]), moves[3])
        
    def test_king_moves_doesnt_jump_over_own_dudes(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ x _ _ _#
        #2 _ x _ b _ t _ _#
        #3 _ _ t _ _ _ _ _#
        #4 _ T _ t _ _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_king(2, 3, origin.BOTTOM)
        self.tboard.place_king(2, 5, origin.TOP)
        self.tboard.place_king(3, 2, origin.TOP)
        self.tboard.place_piece(4, 1, origin.TOP)
        self.tboard.place_king(4, 3, origin.TOP)
        calc = Movement(self.tboard.game.board, 3, 2)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(3, 2), (2, 1)]), moves[0])
        self.assertEqual(as_move_list([(3, 2), (1, 4)]), moves[1])
        
    def test_king_moves_case_2(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ _ _ _ _ _ _ _#
        #4 _ _ _ _ _ _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ x _ x _ _ _#
        #7 _ _ _ t _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_king(7, 3, origin.TOP)
        calc = Movement(self.tboard.game.board, 7, 3)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(7, 3), (6, 2)]), moves[0])
        self.assertEqual(as_move_list([(7, 3), (6, 4)]), moves[1])
        
    def test_king_can_move_around_and_stuff_stays_consistent(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 x _ x _ _ _ _ _#
        #2 _ t _ _ _ x _ _#
        #3 x _ B _ B _ _ _#
        #4 _ _ _ x _ _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_king(2, 1, origin.TOP)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        self.tboard.place_piece(3, 4, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 2, 1)
        moves = calc.get_available_moves()
        self.assertEqual(4, len(moves))
        self.assertEqual(as_move_list([(2, 1), (1, 0)]), moves[0])
        self.assertEqual(as_move_list([(2, 1), (1, 2)]), moves[1])
        self.assertEqual(as_move_list([(2, 1), (3, 0)]), moves[2])
        self.assertEqual(as_move_list([(2, 1), (4, 3), (2, 5)]), moves[3])
        
        self.tboard.game.move_piece((2, 1), (4, 3))
        self.assertIsNone(self.tboard.game.get_piece(2, 1))
        self.assertIsNotNone(self.tboard.game.get_piece(3, 2))
        self.assertIsNotNone(self.tboard.game.get_piece(4, 3))
        
        self.assertTrue(self.tboard.game.get_piece(4, 3).is_king())
        
        self.tboard.game.move_piece((4, 3), (2, 5))
        self.assertIsNone(self.tboard.game.get_piece(3, 2))
        self.assertIsNone(self.tboard.game.get_piece(3, 4))
        self.assertIsNotNone(self.tboard.game.get_piece(2, 5))
 def setUp(self):
     self.game = GamePlay()
     self.tboard = TestBoard()
class BoardTest(unittest.TestCase):
    
    def setUp(self):
        self.game = GamePlay()
        self.tboard = TestBoard()

    def test_board_initial_configuration_correct(self):
        for col in range (0, Board.DEFAULT_WIDTH):
            [self.check_piece(row, col) for row in range(0, Board.DEFAULT_HEIGHT)]
                
    def check_piece(self, row, col):
        piece = self.game.board.get_piece(row, col)
        if row < 3 and (row + col) % 2 == 0:
            self.assertIsNotNone(piece)
            self.assertTrue(piece.is_from_top())
        elif row > 4 and (row + col) % 2 == 0:
            self.assertIsNotNone(piece)
            self.assertTrue(piece.is_from_bottom())
        else:
            self.assertIsNone(piece)
            
    def test_move_piece_to_invalid_location_does_nothing(self):
        original_board = Board()
        self.game.move_piece((2, 2), (5, 6))
        for row in range (0, Board.DEFAULT_HEIGHT):
            [self.check_pieces_equal(self.game.board.get_piece(row, col), original_board.get_piece(row, col)) for col in range(0, Board.DEFAULT_WIDTH)]
            
    def check_pieces_equal(self, piece1, piece2):
        if piece1 is None or piece2 is None:
            self.assertIsNone(piece1)
            self.assertIsNone(piece2)
            return
        
        self.assertEqual(piece1.get_origin(), piece2.get_origin())
        
    def test_move_piece_to_valid_location_only_works_if_location_is_in_move_list(self):
        self.assertIsNone(self.game.board.get_piece(3, 1))
        self.game.move_piece((2, 0), (3, 1))
        self.assertIsNone(self.game.board.get_piece(2, 0))
        self.assertIsNotNone(self.game.board.get_piece(3, 1))
        self.assertTrue(self.game.board.get_piece(3, 1).is_from_top())
        self.assertFalse(self.game.is_game_over())
        
    def test_game_over_when_one_type_of_piece_runs_out_simple_board(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 x _ x _ _ _ _ _#
        #2 _ t _ _ _ _ _ _#
        #3 x _ B _ _ _ _ _#
        #4 _ _ _ x _ _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_king(2, 1, origin.TOP)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        
        self.assertFalse(self.tboard.game.is_game_over())
        self.tboard.game.move_piece((2, 1), (4, 3))
        self.assertTrue(self.tboard.game.is_game_over())
        
        self._check_board_empty_except([(4, 3)])
        self.assertTrue(self.tboard.game.is_game_over())
        self.assertEqual(1, self.tboard.game.state.num_top_pieces)
        self.assertEqual(0, self.tboard.game.state.num_bottom_pieces)
        
    def _check_board_empty_except(self, list_of_exceptions):
        for row in range(0, Board.DEFAULT_HEIGHT):
            for col in range (0, Board.DEFAULT_WIDTH):
                if (row, col) in list_of_exceptions: continue
                self.assertIsNone(self.tboard.game.get_piece(row, col), "There is a piece at " + str(row) + ", " + str(col))
                
        for loc in list_of_exceptions:
            self.assertIsNotNone(self.tboard.game.get_piece(loc[0], loc[1]), "There is NO piece at " + str(row) + ", " + str(col))
        
    def test_game_over_when_one_type_of_piece_runs_out_less_simple_board(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 x _ x _ _ _ _ _#
        #2 _ t _ _ _ _ _ _#
        #3 x _ B _ _ _ _ _#
        #4 _ _ _ x _ B _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_king(2, 1, origin.TOP)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        self.tboard.place_piece(4, 5, origin.BOTTOM)
        
        self.assertFalse(self.tboard.game.is_game_over())
        
        ## The counts work because when you move a piece, you're removing it from the board.--
        ## And when you put it back somewhere else, you're incrementing once more.++
        
        self.tboard.game.move_piece((2, 1), (4, 3))
        self._check_board_configuration(num_top=1, num_bottom=1, non_empty_cells=[(4, 3), (4, 5)])
        
        self.tboard.game.move_piece((4, 5), (3, 4))
        self._check_board_configuration(num_top=1, num_bottom=1, non_empty_cells=[(4, 3), (3, 4)])
        
        self.tboard.game.move_piece((4, 3), (2, 5))
        self._check_board_configuration(num_top=1, num_bottom=0, non_empty_cells=[(2, 5)])
        
        
    def test_board_has_current_origin_pass_if_no_moves_for_that_origin(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ T _ T _ T _ _#
        #1 T _ T _ _ _ _ _#
        #2 _ B _ _ _ _ _ _#
        #3 _ _ _ _ _ _ _ _#
        #4 _ _ _ _ _ _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(0, 1, origin.TOP)
        self.tboard.place_piece(0, 3, origin.TOP)
        self.tboard.place_piece(0, 5, origin.TOP)
        self.tboard.place_piece(1, 0, origin.TOP)
        self.tboard.place_piece(1, 2, origin.TOP)
        self.tboard.place_piece(2, 1, origin.BOTTOM)
        
        self.tboard.game.move_piece((0, 5), (1, 4))
        self.assertEqual(origin.TOP, self.tboard.game.current_turn.origin)
        
    def test_game_over_if_two_passes_occur_in_a_row(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ T _ _ _ _ _#
        #3 _ _ _ _ _ _ _ _#
        #4 T _ T _ T _ T _#
        #5 _ T _ T _ T _ T#
        #6 B _ B _ B _ B _#
        #7 _ B _ B _ B _ B#
        # # # # # # # # # #
        self.tboard.place_piece(2, 2, origin.TOP)
        self.tboard.place_piece(4, 0, origin.TOP)
        self.tboard.place_piece(4, 2, origin.TOP)
        self.tboard.place_piece(4, 4, origin.TOP)
        self.tboard.place_piece(4, 6, origin.TOP)
        self.tboard.place_piece(5, 1, origin.TOP)
        self.tboard.place_piece(5, 3, origin.TOP)
        self.tboard.place_piece(5, 5, origin.TOP)
        self.tboard.place_piece(5, 7, origin.TOP)
        self.tboard.place_piece(6, 0, origin.BOTTOM)
        self.tboard.place_piece(6, 2, origin.BOTTOM)
        self.tboard.place_piece(6, 4, origin.BOTTOM)
        self.tboard.place_piece(6, 6, origin.BOTTOM)
        self.tboard.place_piece(7, 1, origin.BOTTOM)
        self.tboard.place_piece(7, 3, origin.BOTTOM)
        self.tboard.place_piece(7, 5, origin.BOTTOM)
        self.tboard.place_piece(7, 7, origin.BOTTOM)
        
        self.tboard.game.move_piece((2, 2), (3, 1))
        self.assertTrue(self.tboard.game.is_game_over())
        
        
    def _check_board_configuration(self, num_top, num_bottom, non_empty_cells):
        self._check_board_empty_except(non_empty_cells)
        self.assertEqual(num_top, self.tboard.game.state.num_top_pieces)
        self.assertEqual(num_bottom, self.tboard.game.state.num_bottom_pieces)
        self.assertEqual(num_top == 0 or num_bottom == 0, self.tboard.game.is_game_over())
Exemple #10
0
class TurnTest(unittest.TestCase):
    
    def setUp(self):
        self.tboard = TestBoard()

    def test_cannot_move_opponent_piece_while_player_move_not_complete(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ T _ _ _ _#
        #3 _ _ B _ B _ _ _#
        #4 _ x _ _ _ x _ _#
        #5 _ _ B _ _ _ _ _#
        #6 _ _ _ x _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(2, 3, origin.TOP)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        self.tboard.place_piece(3, 4, origin.BOTTOM)
        self.tboard.place_piece(5, 2, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 2, 3)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(2, 3), (4, 1), (6, 3)]), moves[0])
        self.assertEqual(as_move_list([(2, 3), (4, 5)]), moves[1])
        
        self.tboard.game.move_piece((2, 3), (4, 1))
        self.assertIsNone(self.tboard.game.get_piece(2, 3))
        self.assertIsNotNone(self.tboard.game.get_piece(4, 1))
        
        self.tboard.game.move_piece((3, 2), (2, 1))
        self.assertIsNotNone(self.tboard.game.get_piece(3, 2))
        self.assertIsNone(self.tboard.game.get_piece(2, 1))
        
    def test_cannot_move_a_new_piece_while_move_in_progress_even_if_on_same_side(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ x _#
        #1 _ _ _ _ _ T _ _#
        #2 _ _ _ _ x _ _ _#
        #3 _ x _ T _ _ _ _#
        #4 _ _ B _ _ _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ B _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(1, 5, origin.TOP)
        self.tboard.place_piece(3, 3, origin.TOP)
        self.tboard.place_piece(4, 2, origin.BOTTOM)
        self.tboard.place_piece(6, 4, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 4, 2)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(4, 2), (3, 1)]), moves[0])
        self.assertEqual(as_move_list([(4, 2), (2, 4), (0, 6)]), moves[1])
        self.tboard.game.current_turn = Turn(self.tboard.game, origin.TOP)
        # start move
        self.tboard.game.move_piece((4, 2), (2, 4))
        self.assertIsNone(self.tboard.game.get_piece(4, 2))
        self.assertIsNotNone(self.tboard.game.get_piece(2, 4))
        
        # make sure can't move another piece of same type
        calc = Movement(self.tboard.game.board, 6, 4)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves)) 
        self.assertEqual(as_move_list([(6, 4), (5, 3)]), moves[0])
        self.assertEqual(as_move_list([(6, 4), (5, 5)]), moves[1])
        self.tboard.game.move_piece((6, 4), (5, 5))
        self.assertIsNone(self.tboard.game.get_piece(5, 5))
        self.assertIsNotNone(self.tboard.game.get_piece(6, 4))
        
    def test_once_move_completed_jumped_pieces_eaten(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ x _#
        #1 _ _ _ _ _ T _ _#
        #2 x _ _ _ x _ _ _#
        #3 _ T _ T _ _ _ _#
        #4 _ _ B _ _ _ _ _#
        #5 _ _ _ x _ _ _ _#
        #6 _ _ _ _ B _ _ _#
        #7 _ _ _ _ _ x _ _#
        # # # # # # # # # #
        self.tboard.place_piece(1, 5, origin.TOP)
        self.tboard.place_piece(3, 1, origin.TOP)
        self.tboard.place_piece(3, 3, origin.TOP)
        self.tboard.place_piece(4, 2, origin.BOTTOM)
        self.tboard.place_piece(6, 4, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 4, 2)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(4, 2), (2, 0)]), moves[0])
        self.assertEqual(as_move_list([(4, 2), (2, 4), (0, 6)]), moves[1])
        self.tboard.game.current_turn = Turn(self.tboard.game, origin.TOP)
        self.tboard.game.move_piece((4, 2), (2, 4))
        self.tboard.game.move_piece((2, 4), (0, 6))
        
        self.assertIsNone(self.tboard.game.get_piece(4, 2))
        self.assertIsNone(self.tboard.game.get_piece(3, 3))
        self.assertIsNone(self.tboard.game.get_piece(2, 4))
        self.assertIsNone(self.tboard.game.get_piece(1, 5))
        self.assertIsNotNone(self.tboard.game.get_piece(0, 6))
        
    def test_can_move_opponent_piece_only_once_move_complete(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ x _#
        #1 _ _ _ _ _ T _ _#
        #2 _ _ x _ x _ _ _#
        #3 _ T _ T _ x _ _#
        #4 _ _ B _ B _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(1, 5, origin.TOP)
        self.tboard.place_piece(3, 1, origin.TOP)
        self.tboard.place_piece(3, 3, origin.TOP)
        self.tboard.place_piece(4, 2, origin.BOTTOM)
        self.tboard.place_piece(4, 4, origin.BOTTOM)
        self.tboard.game.current_turn = Turn(self.tboard.game, origin.TOP)
        self.tboard.game.move_piece((4, 2), (2, 4))
        self.assertIsNone(self.tboard.game.get_piece(4, 2))
        self.tboard.game.move_piece((2, 4), (0, 6))
        
        self.tboard.game.move_piece((4, 4), (3, 5))
        self.assertIsNotNone(self.tboard.game.get_piece(4, 4))
        self.assertIsNone(self.tboard.game.get_piece(3, 5))
        
        self.tboard.game.move_piece((3, 1), (4, 2))
        self.assertIsNone(self.tboard.game.get_piece(3, 1))
        self.assertIsNotNone(self.tboard.game.get_piece(4, 2))
        
    def test_move_list_mid_jump_contains_only_further_jumps_or_backwards_movement(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ T _ T _ _ _ _#
        #4 _ _ B _ _ _ _ _#
        #5 _ x _ _ _ _ _ _#
        #6 _ _ B _ _ _ _ _#
        #7 _ _ _ x _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(3, 1, origin.TOP)
        self.tboard.place_piece(3, 3, origin.TOP)
        self.tboard.place_piece(4, 2, origin.BOTTOM)
        self.tboard.place_piece(6, 2, origin.BOTTOM)
        
        
        #Problem : since refactoring, Backwards movement isn't in Available moves anymore.
        #Also, Moving only ONE SPOT when previously you did a jump is VALID when you just
        #Check Get Available Moves -> the Further Filtering happens within the TURN.
        #This should really be checking that you CAN'T MOVE to 6,0, not that it's not in
        #The list of moves.
        
        #Similarly with backward movement. It won't show up, but you CAN do it because
        #The filtering will occur IN THE TURN.
        
        self.tboard.game.move_piece((3, 3), (5, 1))
        moves = Movement(self.tboard.game.board, 5, 1).get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(5, 1), (6, 0)]), moves[0])
        self.assertEqual(as_move_list([(5, 1), (7, 3)]), moves[1])
        
        #Now try moving to 6, 0 - it won't work.
        self.tboard.game.move_piece((5, 1), (6, 0))
        self.assertIsNone(self.tboard.game.get_piece(6, 0))
        self.assertIsNotNone(self.tboard.game.get_piece(5, 1))
        
    def test_move_backwards_within_turn_and_then_keep_going(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ T _ T _ _ _ _#
        #4 _ _ B _ _ _ _ _#
        #5 _ x _ _ _ _ _ _#
        #6 _ _ B _ _ _ _ _#
        #7 _ _ _ x _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(3, 1, origin.TOP)
        self.tboard.place_piece(3, 3, origin.TOP)
        self.tboard.place_piece(4, 2, origin.BOTTOM)
        self.tboard.place_piece(6, 2, origin.BOTTOM)
        
        self.tboard.game.move_piece((3, 3), (5, 1))
        moves = Movement(self.tboard.game.board, 5, 1).get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(5, 1), (6, 0)]), moves[0])
        self.assertEqual(as_move_list([(5, 1), (7, 3)]), moves[1])
        
        self.tboard.game.move_piece((5, 1), (3, 3))
        self.assertIsNone(self.tboard.game.get_piece(5, 1))
        self.assertIsNotNone(self.tboard.game.get_piece(3, 3))
        
        self.tboard.game.move_piece((3, 3), (5, 1))
        self.assertIsNone(self.tboard.game.get_piece(3, 3))
        self.assertIsNotNone(self.tboard.game.get_piece(5, 1))
 def setUp(self):
     self.tboard = TestBoard()
     self.game = GamePlay()
     self.slotting = slotting.Slotting(self.game)
class SlottingTest(unittest.TestCase):

    def setUp(self):
        self.tboard = TestBoard()
        self.game = GamePlay()
        self.slotting = slotting.Slotting(self.game)

    def test_piece_gets_selected_and_slotted_when_slot_is_valid_move_and_when_move_is_complete_turn_is_ended(self):
        self.assertIsNone(self.game.current_turn.piece)
        self.slotting.select_piece(MockEvent(120, 120))
        self.assertEqual(2, self.slotting.start_row)
        self.assertEqual(2, self.slotting.start_col)
        self.slotting.release_piece(MockEvent(100, 200))
        self.assertIsNone(self.game.get_piece(2, 2))
        self.assertIsNotNone(self.game.get_piece(3, 1))
        self.assertIsNone(self.game.current_turn.piece)
        
    def test_piece_does_not_get_placed_in_new_slot_when_invalid_move_and_start_row_and_col_reset(self):
        self.slotting.select_piece(MockEvent(100, 100))
        self.assertEqual(1, self.slotting.start_row)
        self.assertEqual(1, self.slotting.start_col)
        self.slotting.release_piece(MockEvent(300, 300))
        self.assertIsNotNone(self.game.get_piece(1, 1))
        self.assertIsNotNone(self.game.get_piece(2, 2))
        self.assertIsNone(self.game.get_piece(3, 1))
        self.assertIsNone(self.game.get_piece(4, 4))
        self.assertIsNone(self.slotting.start_row)
        self.assertIsNone(self.slotting.start_col)
        
    def test_when_doing_consecutive_moves_starting_row_and_col_changes(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ T _ _ _ _ _ _#
        #3 x _ B _ _ _ _ _#
        #4 _ _ _ x _ _ _ _#
        #5 _ _ _ _ B _ _ _#
        #6 _ _ _ _ _ x _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(2, 1, origin.TOP)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        self.tboard.place_piece(5, 4, origin.BOTTOM)
        self.slotting = slotting.Slotting(self.tboard.game)
        self.board = self.tboard.game
        
        self.slotting.select_piece(MockEvent(100, 140))
        self.assertEqual(2, self.slotting.start_row)
        self.assertEqual(1, self.slotting.start_col)
        self.slotting.release_piece(MockEvent(200, 250))
        
        self.assertIsNone(self.board.get_piece(2, 1))
        self.assertIsNotNone(self.board.get_piece(3, 2))
        self.assertIsNotNone(self.board.get_piece(4, 3))
        self.assertIsNotNone(self.board.current_turn.piece)
        
        self.slotting.select_piece(MockEvent(200, 250))
        self.assertEqual(4, self.slotting.start_row)
        self.assertEqual(3, self.slotting.start_col)
        self.slotting.release_piece(MockEvent(330,400))
        
        self.assertIsNone(self.board.current_turn.piece)
        self.assertIsNone(self.board.get_piece(3, 2))
        self.assertIsNone(self.board.get_piece(5, 4))
        self.assertIsNotNone(self.board.get_piece(6, 5))
        
    def test_slotting_releases_piece_fully_and_does_not_grab_new_piece_in_same_loc(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ _ _ T _ _ _ _#
        #4 _ _ B _ _ _ _ _#
        #5 _ x _ _ _ _ _ _#
        #6 _ _ T _ _ _ _ _#
        #7 _ _ _ B _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(3, 3, origin.TOP)
        self.tboard.place_piece(4, 2, origin.BOTTOM)
        self.tboard.place_piece(6, 2, origin.TOP)
        self.tboard.place_piece(7, 3, origin.BOTTOM)
        
        self.slotting = slotting.Slotting(self.tboard.game)
        self.board = self.tboard.game
        
        self.slotting.select_piece(MockEvent(200, 200))
        self.assertEqual(3, self.slotting.start_row)
        self.assertEqual(3, self.slotting.start_col)
        self.slotting.release_piece(MockEvent(80, 330))
        self.assertIsNone(self.board.get_piece(3, 3))
        self.assertIsNone(self.board.get_piece(4, 2))
        self.assertIsNotNone(self.board.get_piece(5, 1))
        
        self.assertFalse(self.slotting.is_holding_piece())
        

        
    def test_slotting_is_holding_piece(self):
        self.assertFalse(self.slotting.is_holding_piece())
        self.slotting.start_row = 5
        self.slotting.start_col = 5
        self.assertTrue(self.slotting.is_holding_piece())
class MovementCasesTest(unittest.TestCase):

    def setUp(self):
        self.tboard = TestBoard()

    def test_get_avail_moves_with_opponent_piece_returns_jumped_position(self):
        self.tboard.place_piece(1, 5, origin.TOP)
        self.tboard.place_piece(2, 4, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 1, 5)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(1, 5), (3, 3)]), moves[0])
        self.assertEqual(as_move_list([(1, 5), (2, 6)]), moves[1])
        
    def test_moves_case_1(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ T _ _ _ _#
        #3 _ _ B _ B _ _ _#
        #4 _ x _ _ _ x _ _#
        #5 _ _ B _ _ _ _ _#
        #6 _ _ _ x _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        
        self.tboard.place_piece(2, 3, origin.TOP)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        self.tboard.place_piece(3, 4, origin.BOTTOM)
        self.tboard.place_piece(5, 2, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 2, 3)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(2, 3), (4, 1), (6, 3)]), moves[0])
        self.assertEqual(as_move_list([(2, 3), (4, 5)]), moves[1])
        
    def test_moves_case_2(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ T _ _ _ _#
        #3 _ _ B _ B _ _ _#
        #4 _ x _ _ _ B _ _#
        #5 _ _ B _ _ _ _ _#
        #6 _ _ _ x _ _ _ _#
        #7 _ _ _ _ B _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(2, 3, origin.TOP)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        self.tboard.place_piece(3, 4, origin.BOTTOM)
        self.tboard.place_piece(4, 5, origin.BOTTOM)
        self.tboard.place_piece(5, 2, origin.BOTTOM)
        self.tboard.place_piece(7, 4, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 2, 3)
        moves = calc.get_available_moves()
        self.assertEqual(1, len(moves))
        self.assertEqual(as_move_list([(2, 3), (4, 1), (6, 3)]), moves[0])
        
    def test_moves_case_3(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ T _ _ _ _#
        #3 _ _ B _ B _ _ _#
        #4 _ x _ _ _ _ _ _#
        #5 _ _ B _ _ _ B _#
        #6 _ _ _ B _ _ _ T#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(2, 3, origin.TOP)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        self.tboard.place_piece(3, 4, origin.BOTTOM)
        self.tboard.place_piece(5, 2, origin.BOTTOM)
        self.tboard.place_piece(5, 6, origin.BOTTOM)
        self.tboard.place_piece(6, 3, origin.BOTTOM)
        self.tboard.place_piece(6, 7, origin.TOP)
        calc = Movement(self.tboard.game.board, 2, 3)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(2, 3), (4, 1)]), moves[0])
        self.assertEqual(as_move_list([(2, 3), (4, 5)]), moves[1])
        
    def test_moves_case_4(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ T _ _ _ _#
        #1 _ _ B _ x _ _ _#
        #2 _ x _ _ _ _ _ _#
        #3 _ _ B _ _ _ _ _#
        #4 _ _ _ x _ _ _ _#
        #5 _ _ B _ _ _ _ _#
        #6 _ x _ _ _ _ _ T#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(0, 3, origin.TOP)
        self.tboard.place_piece(1, 2, origin.BOTTOM)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        self.tboard.place_piece(5, 2, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 0, 3)
        moves = calc.get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(0, 3), (2, 1), (4, 3), (6, 1)]), moves[0])
        self.assertEqual(as_move_list([(0, 3), (1, 4)]), moves[1])
        
    def test_moves_case_5(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ T _ _ _ _#
        #1 _ _ B _ x _ _ _#
        #2 _ x _ _ _ _ _ _#
        #3 _ _ B _ _ _ _ _#
        #4 _ _ _ x _ _ _ _#
        #5 _ _ B _ B _ _ _#
        #6 _ x _ _ _ x _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(0, 3, origin.TOP)
        self.tboard.place_piece(1, 2, origin.BOTTOM)
        self.tboard.place_piece(3, 2, origin.BOTTOM)
        self.tboard.place_piece(5, 2, origin.BOTTOM)
        self.tboard.place_piece(5, 4, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 0, 3)
        moves = calc.get_available_moves()
        self.assertEqual(3, len(moves))
        self.assertEqual(as_move_list([(0, 3), (2, 1), (4, 3), (6, 1)]), moves[0])
        self.assertEqual(as_move_list([(0, 3), (2, 1), (4, 3), (6, 5)]), moves[1])
        self.assertEqual(as_move_list([(0, 3), (1, 4)]), moves[2])
        
    def test_cannot_jump_over_own_kind(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ _ T _ _ _ _ _#
        #4 _ T _ T _ _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(3, 2, origin.TOP)
        self.tboard.place_piece(4, 1, origin.TOP)
        self.tboard.place_piece(4, 3, origin.TOP)
        calc = Movement(self.tboard.game.board, 3, 2)
        moves = calc.get_available_moves()
        self.assertEqual(0, len(moves))
        
    def test_cannot_jump_over_own_kind_case_2(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ _ _ _ _ _ _ _#
        #3 _ _ T _ _ _ _ _#
        #4 _ T _ B _ _ _ _#
        #5 _ _ _ _ x _ _ _#
        #6 _ _ _ _ _ T _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(3, 2, origin.TOP)
        self.tboard.place_piece(4, 1, origin.TOP)
        self.tboard.place_piece(4, 3, origin.BOTTOM)
        self.tboard.place_piece(6, 5, origin.TOP)
        calc = Movement(self.tboard.game.board, 3, 2)
        moves = calc.get_available_moves()
        self.assertEqual(1, len(moves))
        self.assertEqual(as_move_list([(3, 2), (5, 4)]), moves[0])

        
    def test_move_top_piece_along_and_do_some_backward_movement_to_trip_stuff_up(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ T _ _ _ _#
        #2 _ _ B _ x _ _ _#
        #3 _ x _ _ _ _ _ _#
        #4 _ _ B _ _ _ _ _#
        #5 _ _ _ x _ _ _ _#
        #6 _ _ _ _ B _ _ _#
        #7 _ _ _ _ _ x _ _#
        # # # # # # # # # #
        self.tboard.place_piece(1, 3, origin.TOP)
        self.tboard.place_piece(2, 2, origin.BOTTOM)
        self.tboard.place_piece(4, 2, origin.BOTTOM)
        self.tboard.place_piece(6, 4, origin.BOTTOM)
        moves = Movement(self.tboard.game.board, 1, 3).get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(1, 3), (3, 1), (5, 3), (7, 5)]), moves[0])
        self.assertEqual(as_move_list([(1, 3), (2, 4)]), moves[1])
        
        self.tboard.game.move_piece((1, 3), (3, 1))
        self.assertIsNone(self.tboard.game.get_piece(1, 3))
        self.assertIsNotNone(self.tboard.game.get_piece(2, 2))
        self.assertIsNotNone(self.tboard.game.get_piece(3, 1))
        
        moves = Movement(self.tboard.game.board, 3, 1).get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(3, 1), (4, 0)]), moves[0])
        self.assertEqual(as_move_list([(3, 1), (5, 3), (7, 5)]), moves[1])
        
        # move backward just to trip things up
        self.tboard.game.move_piece((3, 1), (1, 3))
        self.assertIsNone(self.tboard.game.get_piece(3, 1))
        self.assertIsNotNone(self.tboard.game.get_piece(2, 2))
        self.assertIsNotNone(self.tboard.game.get_piece(1, 3))
        
        moves = Movement(self.tboard.game.board, 1, 3).get_available_moves()
        self.assertEqual(2, len(moves))
        self.assertEqual(as_move_list([(1, 3), (3, 1), (5, 3), (7, 5)]), moves[0])
        ### bug-- it's 1,3 instead of 2,4 because 2,4 is gone- it's gone because
        ### you've jumped a piece so valid jumps are no longer there. 1,3 shouldn't be there either
        ### the problem is : if you're going backwards, pieces shouldn't be jumped over. Moves are different
        ### they're not just locations. there has to be a Move Object -> and this object will say whether
        ### it's a backwards movement, or a jumped movement, or just a regular movement
        ### time for some massive refactoring because we've been using tuples as moves...
        
        ### well, we don't want to take out all instances of tuples. maybe the inner functioning will change.
        ### ie the implementation details. 
        ### each time you make a move, the list of moves will have a new MOVE object.
        
        ### post-refactoring: The move is now off the list because there are moves in the moves object for the turn.
        ### this a bug that has been fixed using this test.-->actually, was the bug even there?
        self.assertEqual(as_move_list([(1, 3), (2, 4)]), moves[1])
        
    def test_once_you_move_if_piece_is_adjacent_for_jumping_over_do_not_allow_jump(self):
        # # # # # # # # # #
        #  0 1 2 3 4 5 6 7#
        #0 _ _ _ _ _ _ _ _#
        #1 _ _ _ _ _ _ _ _#
        #2 _ T _ _ _ _ _ _#
        #3 x _ x _ _ _ _ _#
        #4 _ _ _ B _ _ _ _#
        #5 _ _ _ _ _ _ _ _#
        #6 _ _ _ _ _ _ _ _#
        #7 _ _ _ _ _ _ _ _#
        # # # # # # # # # #
        self.tboard.place_piece(2, 1, origin.TOP)
        self.tboard.place_piece(4, 3, origin.BOTTOM)
        calc = Movement(self.tboard.game.board, 2, 1)
        moves = calc.get_available_moves()
        self.assertEqual(as_move_list([(2, 1), (3, 0)]), moves[0])
        self.assertEqual(as_move_list([(2, 1), (3, 2)]), moves[1])
        
        self.tboard.game.move_piece((2, 1), (3, 2))
        self.assertIsNone(self.tboard.game.current_turn.piece)
        self.tboard.game.move_piece((3, 2), (5, 4))
        self.assertIsNone(self.tboard.game.get_piece(5, 4))
        self.assertIsNotNone(self.tboard.game.get_piece(4, 3))
        self.assertIsNotNone(self.tboard.game.get_piece(3, 2))