def test_add_update(mocker, playerset): data = copy.deepcopy(DEFAULT_DICT) s = gameset.Gameset(playerset=playerset) newgame = mocker.Mock() s.newGame.connect(newgame) s[1] = game.Game(playerset=playerset, **data) assert 1 in s g = s[1] newgame.assert_called_with(g) newgame.reset_mock() data["title"] = "Something" s[1].update(**data) assert 1 in s assert g is s[1] assert not newgame.called newgame.reset_mock() data["uid"] = 2 s[2] = game.Game(playerset=playerset, **data) assert 2 in s g2 = s[2] assert g is not g2 newgame.assert_called_with(g2)
def test_new_states_one_object(playerset, mocker): s = gameset.Gameset(playerset=playerset) lobby = mocker.Mock() live = mocker.Mock() closed = mocker.Mock() s.newLobby.connect(lobby) s.newLiveGame.connect(live) s.newClosedGame.connect(closed) def reset(): lobby.reset_mock() live.reset_mock() closed.reset_mock() data = copy.deepcopy(DEFAULT_DICT) g = game.Game(playerset=playerset, **data) s[1] = g assert lobby.called assert not live.called assert not closed.called reset() data["state"] = game.GameState.PLAYING s[1].update(**data) assert not lobby.called assert live.called assert not closed.called reset() data["state"] = game.GameState.CLOSED s[1].update(**data) assert not lobby.called assert not live.called assert closed.called
def test_iter(playerset): s = gameset.Gameset(playerset=playerset) data = copy.deepcopy(DEFAULT_DICT) s[1] = game.Game(playerset=playerset, **data) num = 0 for g in s.values(): assert g is s[1] num += 1 assert num == 1
def test_clear(playerset): s = gameset.Gameset(playerset=playerset) data = copy.deepcopy(DEFAULT_DICT) s[1] = game.Game(playerset=playerset, **data) s.clear() num = 0 for g in s: num += 1 assert num == 0
def test_can_update_partially(playerset, mocker): data = copy.deepcopy(DEFAULT_DICT) g = game.Game(playerset=playerset, **data) d1 = g.to_dict() g.update(launched_at=20000) d2 = g.to_dict() assert d2["launched_at"] == 20000 del d1["launched_at"] del d2["launched_at"] assert d1 == d2
def test_new_states_new_objects(playerset, mocker): s = gameset.Gameset(playerset=playerset) lobby = mocker.Mock() live = mocker.Mock() closed = mocker.Mock() s.newLobby.connect(lobby) s.newLiveGame.connect(live) s.newClosedGame.connect(closed) def reset(): lobby.reset_mock() live.reset_mock() closed.reset_mock() data = copy.deepcopy(DEFAULT_DICT) data["uid"] = 1 s[1] = game.Game(playerset=playerset, **data) assert lobby.called assert not live.called assert not closed.called reset() data["uid"] = 2 data["state"] = game.GameState.PLAYING s[2] = game.Game(playerset=playerset, **data) assert not lobby.called assert live.called assert not closed.called reset() data["uid"] = 3 data["state"] = game.GameState.CLOSED with pytest.raises(ValueError): s[3] = game.Game(playerset=playerset, **data) assert not lobby.called assert not live.called # A new closed game does *not* get reported. assert not closed.called
def test_closed_determined_by_gamestate(playerset): data = copy.deepcopy(DEFAULT_DICT) g = game.Game(playerset=playerset, **data) assert not g.closed() g.update(**data) assert not g.closed() data["state"] = game.GameState.PLAYING g.update(**data) assert not g.closed() data["state"] = game.GameState.CLOSED g.update(**data) assert g.closed()
def test_update_signal(playerset, mocker): data = copy.deepcopy(DEFAULT_DICT) g = game.Game(playerset=playerset, **data) updated = mocker.Mock() def check_signal(new, old): assert old.host == "IllIIIlIlIIIlI" assert new.host == "OtherName" g.gameUpdated.connect(updated) g.gameUpdated.connect(check_signal) data["host"] = "OtherName" g.update(**data) assert updated.called
def test_no_state_changes(playerset, mocker): s = gameset.Gameset(playerset=playerset) lobby = mocker.Mock() live = mocker.Mock() closed = mocker.Mock() s.newLobby.connect(lobby) s.newLiveGame.connect(live) s.newClosedGame.connect(closed) def reset(): lobby.reset_mock() live.reset_mock() closed.reset_mock() data = copy.deepcopy(DEFAULT_DICT) s[1] = game.Game(playerset=playerset, **data) reset() data['title'] = "New" s[1].update(**data) assert not lobby.called assert not live.called assert not closed.called
def test_cant_add_mismatched_uid(mocker, playerset): s = gameset.Gameset(playerset=playerset) g = game.Game(playerset=playerset, **DEFAULT_DICT) with pytest.raises(ValueError): s[2] = g
def test_cant_add_twice(mocker, playerset): s = gameset.Gameset(playerset=playerset) g = game.Game(playerset=playerset, **DEFAULT_DICT) s[1] = g with pytest.raises(ValueError): s[1] = g
def test_simple_correct_init(playerset): game.Game(playerset=playerset, **DEFAULT_DICT)
def test_copy(playerset, mocker): data = copy.deepcopy(DEFAULT_DICT) g = game.Game(playerset=playerset, **data) gc = g.copy() assert g.to_dict() == gc.to_dict()
def test_abort_closes(playerset, mocker): data = copy.deepcopy(DEFAULT_DICT) g = game.Game(playerset=playerset, **data) assert not g.closed() g.abort_game() assert g.closed()
def test_uid_required_for_init(playerset): data = copy.deepcopy(DEFAULT_DICT) del data["uid"] with pytest.raises(TypeError): game.Game(playerset=playerset, **data)
def test_can_update_to_none(playerset, mocker): data = copy.deepcopy(DEFAULT_DICT) g = game.Game(playerset=playerset, **data) g.update(launched_at=None) assert g.launched_at is None
def configure_logging(): root = logging.getLogger() root.setLevel(logging.WARN) handler = logging.StreamHandler(sys.stdout) handler.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) root.addHandler(handler) GAMES_TO_PLAY = 1000 game = game.Game([MDPPlayer, RandomPlayer, MDPPlayer, RandomPlayer]) team0_wins, team1_wins = 0, 0 team0_points, team1_points = 0, 0 number_games_played = 0 progressbar.streams.wrap_stderr() configure_logging() for _ in progressbar.progressbar(range(GAMES_TO_PLAY), redirect_stdout=True): hands0, hands1 = 0, 0 points0, points1 = 0, 0 while points0 < 10 and points1 < 10: result = game.play_tricks() hands0 += result[0]