class TestMuck(unittest.TestCase): def setUp(self): self.game = PokerGameServer("poker.%s.xml", [path.join(TESTS_PATH, '../conf')]) self.game.setVariant("holdem") self.game.setBettingStructure("1-2_20-200_limit") predefined_decks = [ "8d 2h 2c 8c 4c Kc Ad 9d Ts Jd 5h Tc 4d 9h 8h 7h 9c 2s 3c Kd 5s Td 5d Th 3s Kh Js Qh 7d 2d 3d 9s Qd Ac Jh Jc Qc 6c 7s Ks 5c 4h 7c 4s Qs 6s 6d Ah 6d 3h 8s As", # distributed from the end ] self.game.shuffler = PokerPredefinedDecks(map(lambda deck: self.game.eval.string2card(split(deck)), predefined_decks)) def tearDown(self): del self.game def log(self, string): print string def make_new_bot(self, serial, seat): game = self.game self.failUnless(game.addPlayer(serial, seat)) self.failUnless(game.payBuyIn(serial, game.bestBuyIn())) self.failUnless(game.sit(serial)) game.botPlayer(serial) game.autoMuck(serial, pokergame.AUTO_MUCK_NEVER) def make_new_player(self, serial, seat): game = self.game self.failUnless(game.addPlayer(serial, seat)) self.failUnless(game.payBuyIn(serial, game.bestBuyIn())) self.failUnless(game.sit(serial)) self.game.autoBlindAnte(serial) def check_blinds(self, descriptions): players = self.game.playersAll() players.sort(key=lambda i: i.seat) fail = False for player in players: (blind, missed, wait) = descriptions.pop(0) if(blind != player.blind or missed != player.missed_blind or wait != player.wait_for): print "check_blinds FAILED actual %s != from expected %s" % ( (player.blind, player.missed_blind, player.wait_for), (blind, missed, wait) ) fail = True else: print "check_blinds %s == %s" % ( (player.blind, player.missed_blind, player.wait_for), (blind, missed, wait) ) if fail: self.fail() def test1(self): """ won fold, auto_muck always """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_player(serial, seat) self.game.beginTurn(1) self.game.fold(4) self.game.fold(1) self.game.fold(2) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 3) self.failUnless(self.game.isWinnerBecauseFold()) self.failUnless(self.game.getPlayer(3).hand.areHidden()) def test2(self): """ won fold, auto_muck lose, decided to muck """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_player(serial, seat) self.game.autoMuck(3, pokergame.AUTO_MUCK_LOSE) self.game.beginTurn(1) self.game.fold(4) self.game.fold(1) self.game.fold(2) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 3) self.failUnless(self.game.isWinnerBecauseFold()) self.assertEqual(self.game.muckable_serials, [3]) self.assertEqual(self.game.state, pokergame.GAME_STATE_MUCK) self.game.muck(serial = 3, want_to_muck = True) self.failUnless(self.game.getPlayer(3).hand.areHidden()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) def test3(self): """ won fold, auto_muck lose, decided not to muck (ie show) """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_player(serial, seat) self.game.autoMuck(3, pokergame.AUTO_MUCK_LOSE) self.game.beginTurn(1) self.game.fold(4) self.game.fold(1) self.game.fold(2) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 3) self.failUnless(self.game.isWinnerBecauseFold()) self.assertEqual(self.game.muckable_serials, [3]) self.assertEqual(self.game.state, pokergame.GAME_STATE_MUCK) self.game.muck(serial = 3, want_to_muck = False) self.failUnless(self.game.getPlayer(3).hand.areVisible()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) def test4(self): """ fake deck player p2 wins against p1, p1 is muckable, auto_muck_never, p1 mucks """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_bot(serial, seat) self.game.beginTurn(1) self.assertEqual(self.game.state, pokergame.GAME_STATE_MUCK) self.game.muck(serial = 1, want_to_muck = True) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 2) self.failUnless(self.game.getPlayer(1).hand.areHidden()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) def test5(self): """ fake deck player p2 wins against p1, p1 is muckable, auto_muck_never, p1 does not muck """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_bot(serial, seat) self.game.beginTurn(1) self.assertEqual(self.game.state, pokergame.GAME_STATE_MUCK) self.game.muck(serial = 1, want_to_muck = False) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 2) self.failUnless(self.game.getPlayer(1).hand.areVisible()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) def test6(self): """ game canceled because blind not payed, player p2 get her/his blind back """ for (serial, seat) in ((1, 0), (2, 1)): self.make_new_player(serial, seat) self.game.noAutoBlindAnte(serial) self.game.beginTurn(1) self.game.blind(2) self.game.sitOut(1) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) self.assertEqual(len(self.game.winners), 0) def test0(self): """ game canceled explicitly, player p2 get her/his blind back """ for (serial, seat) in ((1, 0), (2, 1)): self.make_new_player(serial, seat) self.game.noAutoBlindAnte(serial) self.game.beginTurn(1) self.game.blind(2) self.game.is_directing = False self.game.sitOut(1) self.game.canceled(2, self.game.smallBlind()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) self.assertEqual(len(self.game.winners), 0)
class TestMuck(unittest.TestCase): def setUp(self): self.game = PokerGameServer("poker.%s.xml", [path.join(TESTS_PATH, '../conf')]) self.game.setVariant("holdem") self.game.setBettingStructure("1-2_20-200_limit") predefined_decks = [ "8d 2h 2c 8c 4c Kc Ad 9d Ts Jd 5h Tc 4d 9h 8h 7h 9c 2s 3c Kd 5s Td 5d Th 3s Kh Js Qh 7d 2d 3d 9s Qd Ac Jh Jc Qc 6c 7s Ks 5c 4h 7c 4s Qs 6s 6d Ah 6d 3h 8s As", # distributed from the end ] self.game.shuffler = PokerPredefinedDecks( map(lambda deck: self.game.eval.string2card(split(deck)), predefined_decks)) def tearDown(self): del self.game def log(self, string): print string def make_new_bot(self, serial, seat): game = self.game self.failUnless(game.addPlayer(serial, seat)) self.failUnless(game.payBuyIn(serial, game.bestBuyIn())) self.failUnless(game.sit(serial)) game.botPlayer(serial) game.autoMuck(serial, pokergame.AUTO_MUCK_NEVER) def make_new_player(self, serial, seat): game = self.game self.failUnless(game.addPlayer(serial, seat)) self.failUnless(game.payBuyIn(serial, game.bestBuyIn())) self.failUnless(game.sit(serial)) self.game.autoBlindAnte(serial) def check_blinds(self, descriptions): players = self.game.playersAll() players.sort(key=lambda i: i.seat) fail = False for player in players: (blind, missed, wait) = descriptions.pop(0) if (blind != player.blind or missed != player.missed_blind or wait != player.wait_for): print "check_blinds FAILED actual %s != from expected %s" % ( (player.blind, player.missed_blind, player.wait_for), (blind, missed, wait)) fail = True else: print "check_blinds %s == %s" % ( (player.blind, player.missed_blind, player.wait_for), (blind, missed, wait)) if fail: self.fail() def test1(self): """ won fold, auto_muck always """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_player(serial, seat) self.game.beginTurn(1) self.game.fold(4) self.game.fold(1) self.game.fold(2) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 3) self.failUnless(self.game.isWinnerBecauseFold()) self.failUnless(self.game.getPlayer(3).hand.areHidden()) def test2(self): """ won fold, auto_muck lose, decided to muck """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_player(serial, seat) self.game.autoMuck(3, pokergame.AUTO_MUCK_LOSE) self.game.beginTurn(1) self.game.fold(4) self.game.fold(1) self.game.fold(2) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 3) self.failUnless(self.game.isWinnerBecauseFold()) self.assertEqual(self.game.muckable_serials, [3]) self.assertEqual(self.game.state, pokergame.GAME_STATE_MUCK) self.game.muck(serial=3, want_to_muck=True) self.failUnless(self.game.getPlayer(3).hand.areHidden()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) def test3(self): """ won fold, auto_muck lose, decided not to muck (ie show) """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_player(serial, seat) self.game.autoMuck(3, pokergame.AUTO_MUCK_LOSE) self.game.beginTurn(1) self.game.fold(4) self.game.fold(1) self.game.fold(2) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 3) self.failUnless(self.game.isWinnerBecauseFold()) self.assertEqual(self.game.muckable_serials, [3]) self.assertEqual(self.game.state, pokergame.GAME_STATE_MUCK) self.game.muck(serial=3, want_to_muck=False) self.failUnless(self.game.getPlayer(3).hand.areVisible()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) def test4(self): """ fake deck player p2 wins against p1, p1 is muckable, auto_muck_never, p1 mucks """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_bot(serial, seat) self.game.beginTurn(1) self.assertEqual(self.game.state, pokergame.GAME_STATE_MUCK) self.game.muck(serial=1, want_to_muck=True) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 2) self.failUnless(self.game.getPlayer(1).hand.areHidden()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) def test5(self): """ fake deck player p2 wins against p1, p1 is muckable, auto_muck_never, p1 does not muck """ for (serial, seat) in ((1, 0), (2, 1), (3, 2), (4, 3)): self.make_new_bot(serial, seat) self.game.beginTurn(1) self.assertEqual(self.game.state, pokergame.GAME_STATE_MUCK) self.game.muck(serial=1, want_to_muck=False) self.assertEqual(len(self.game.winners), 1) self.assertEqual(self.game.winners[0], 2) self.failUnless(self.game.getPlayer(1).hand.areVisible()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) def test6(self): """ game canceled because blind not payed, player p2 get her/his blind back """ for (serial, seat) in ((1, 0), (2, 1)): self.make_new_player(serial, seat) self.game.noAutoBlindAnte(serial) self.game.beginTurn(1) self.game.blind(2) self.game.sitOut(1) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) self.assertEqual(len(self.game.winners), 0) def test0(self): """ game canceled explicitly, player p2 get her/his blind back """ for (serial, seat) in ((1, 0), (2, 1)): self.make_new_player(serial, seat) self.game.noAutoBlindAnte(serial) self.game.beginTurn(1) self.game.blind(2) self.game.is_directing = False self.game.sitOut(1) self.game.canceled(2, self.game.smallBlind()) self.assertEqual(self.game.state, pokergame.GAME_STATE_END) self.assertEqual(len(self.game.winners), 0)