def test_move_dead(self): """ You can't move when dead """ pawn = Pawn() pawn.kill() self.assertRaises(YoureDead, pawn.move, 'u')
def test_dropBomb_havenone(self): """ You can't drop bombs if you don't have any """ pawn = Pawn() pawn.bombs = 0 self.assertRaises(IllegalMove, pawn.dropBomb)
def test_kill(self): """ You can kill pawns """ pawn = Pawn() pawn.kill() self.assertEqual(pawn.alive, False)
def test_move(self): """ You can move it up,down,left or right, and pawnMoved will be called after each move. """ board, clock = bnc() board.generate(5,5) board.fg_tiles[(1,1)] = EMPTY pawn = Pawn() board.insertPawn((0,0), pawn) # fake out pawnMoved called = [] real_pawnMoved = board.pawnMoved def fake_pawnMoved(*args): called.append(args) return real_pawnMoved(*args) board.pawnMoved = fake_pawnMoved pawn.move('r') self.assertEqual(called[0], (pawn, (1,0)), "Should have " "called pawnMoved") called.pop() pawn.move('d') self.assertEqual(called[0], (pawn, (1,1))) called.pop() pawn.move('l') self.assertEqual(called[0], (pawn, (0,1))) called.pop() pawn.move('u') self.assertEqual(called[0], (pawn, (0,0)))
def test_dropBomb_dead(self): """ You can't drop bombs if you're dead """ board, clock = bnc() board.generate(5,5) pawn = Pawn() board.insertPawn((0,0), pawn) pawn.kill() self.assertRaises(YoureDead, pawn.dropBomb) self.assertTrue((0,0) not in board.bombs)
def test_dropBomb_bomb(self): """ You can't drop a bomb on a tile that already has a bomb. """ board, clock = bnc() board.generate(5,5) pawn = Pawn() pawn.bombs = 2 board.insertPawn((0,0), pawn) pawn.dropBomb() self.assertRaises(IllegalMove, pawn.dropBomb) self.assertEqual(pawn.bombs, 1, "Should still have one")
class TelnetProtocol(Telnet): num = 0 move_mapping = { 'w': 'u', 'a': 'l', 'd': 'r', 's': 'd', } def connectionMade(self): self.factory.protocols.append(self) self.will(ECHO).addErrback(log.msg) self.will(SGA).addErrback(log.msg) self.wont(LINEMODE).addErrback(log.msg) name = string.uppercase[self.num % len(string.uppercase)] TelnetProtocol.num += 1 self.pawn = Pawn(name) self.factory.board.insertPawn((0,0), self.pawn) def enableLocal(self, option): return option in (ECHO, SGA) def connectionLost(self, reason): self.factory.protocols.remove(self) self.factory.board.pawns.remove(self.pawn) def applicationDataReceived(self, data): for k in data: if k in self.move_mapping: try: self.pawn.move(self.move_mapping[k]) except YoureDead, e: pass except IllegalMove, e: pass elif k == 'e': try: self.pawn.dropBomb() except YoureDead, e: pass
def test_illegal_moves(self): """ Pawns can only move into EMPTY tiles. Can't move into bombs, HARD, SOFT or off the board. """ board, clock = bnc() board.generate(3,3) pawn = Pawn() board.insertPawn((0,0), pawn) # off the board self.assertRaises(IllegalMove, pawn.move, 'l') self.assertRaises(IllegalMove, pawn.move, 'u') pawn.move('d') self.assertEqual(pawn.loc, (0,1)) # HARD self.assertRaises(IllegalMove, pawn.move, 'r') # SOFT self.assertRaises(IllegalMove, pawn.move, 'd') pawn.dropBomb() pawn.move('u') # on bomb self.assertRaises(IllegalMove, pawn.move, 'd')
def test_dropBomb(self): """ You can drop bombs on the board, which uses up one of the bombs until it explodes. """ board, clock = bnc() board.generate(5,5) pawn = Pawn() pawn.fuse = 3 board.insertPawn((0,0), pawn) pawn.dropBomb() self.assertEqual(pawn.bombs, 0, "Should use up a bomb") self.assertTrue((0,0) in board.bombs, "Bomb should be on" " the board") clock.advance(3) self.assertEqual(pawn.bombs, 1, "Should get the bomb back") self.assertFalse((0,0) in board.bombs)
def connectionMade(self): self.factory.protocols.append(self) self.will(ECHO).addErrback(log.msg) self.will(SGA).addErrback(log.msg) self.wont(LINEMODE).addErrback(log.msg) name = string.uppercase[self.num % len(string.uppercase)] TelnetProtocol.num += 1 self.pawn = Pawn(name) self.factory.board.insertPawn((0,0), self.pawn)