import test_helper import testBoard, unittest import filteredboard, board import sys, cStringIO import piece class PassThroughFilterBoardTest(testBoard.BoardTest): def setUp(self): testBoard.BoardTest.setUp(self) self.state = filteredboard.NullView(self.state) class PassThroughFilterBoardCaptureTest(testBoard.CapturedTest): def setUp(self): testBoard.CapturedTest.setUp(self) self.state = filteredboard.NullView(self.state) class PlayerViewFogTests(unittest.TestCase): def setUp(self): self.model = board.GameState() self.view = filteredboard.PlayerView(self.model, board.WHITE) def verifyFogTest(self, expected): mask = self.view.getMask().keys() mask.sort() expected.sort() self.assertEqual(expected, mask) def testPawn(self): pos = board.position self.model.putPieceAt(piece.Pawn(self.model, board.WHITE), pos("d4")) self.verifyFogTest([pos("d4"),pos("d5")]) def testPawnCapture(self): pos = board.position self.model.putPieceAt(piece.Pawn(self.model, board.WHITE), pos("d4")) self.model.putPieceAt(piece.Rook(self.model, board.BLACK), pos("e5")) self.verifyFogTest([pos("d4"),pos("d5"), pos("e5")]) def testRook(self): pos = board.position self.model.putPieceAt(piece.Rook(self.model, board.WHITE), pos("d4")) expected = [] for char in "abcdefgh": for col in xrange(1,9): if char == "d" or col == 4: expected.append(pos("%s%d" % (char, col))) self.verifyFogTest(expected) def testKing(self): pos = board.position self.model.putPieceAt(piece.King(self.model, board.WHITE), pos("d4")) expected = [] for char in "cde": for col in xrange(3,6): expected.append(pos("%s%d" % (char, col))) self.verifyFogTest(expected) def testSamplePosition(self): pos = board.position self.model.putPieceAt(piece.Bishop(self.model, board.WHITE), pos("d6")) self.model.putPieceAt(piece.Rook(self.model, board.WHITE), pos("f6")) self.model.putPieceAt(piece.Queen(self.model, board.BLACK), pos("f8")) self.model.putPieceAt(piece.Pawn(self.model, board.BLACK), pos("b6")) self.model.putPieceAt(piece.Pawn(self.model, board.BLACK), pos("g3")) legal_positions = "b8 c7 d6 e5 f4 g3 f8 e7 c5 b4 a3 f7 f6 f5 f3 f2 f1 e6 g6 h6".split() self.verifyFogTest(map(pos, legal_positions)) class PlayerViewCaptureTests(unittest.TestCase): def setUp(self): self.held, sys.stdout = sys.stdout, cStringIO.StringIO() self.model = board.GameState() def tearDown(self): sys.stdout = self.held def test_dump(self): black_view = filteredboard.PlayerView(self.model, board.BLACK) board.dumpBoard(black_view) self.assertEqual(sys.stdout.getvalue(),"""\ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? White to move """) def test_setupWhiteForWhite(self): self.model.setFen("//////PPPPPPPP/RNBQKBNR") white_view = filteredboard.PlayerView(self.model, board.WHITE) board.dumpBoard(white_view) self.assertEqual(sys.stdout.getvalue(),"""\ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # # # # # # # # P P P P P P P P R N B Q K B N R White to move """) def test_setupWhiteForBlack(self): self.model.setFen("//////PPPPPPPP/RNBQKBNR") black_view = filteredboard.PlayerView(self.model, board.BLACK) board.dumpBoard(black_view) self.assertEqual(sys.stdout.getvalue(),"""\ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? White to move """) def test_setupBlackForBlack(self): self.model.setFen("rnbqkbnr/pppppppp//////") black_view = filteredboard.PlayerView(self.model, board.BLACK) board.dumpBoard(black_view) self.assertEqual(sys.stdout.getvalue(),"""\ r n b q k b n r p p p p p p p p # # # # # # # # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? White to move """) def test_setupBlackForWhite(self): self.model.setFen("rnbqkbnr/pppppppp//////") white_view = filteredboard.PlayerView(self.model, board.WHITE) board.dumpBoard(white_view) self.assertEqual(sys.stdout.getvalue(),"""\ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? White to move """) if __name__ == "__main__": unittest.main()