def test_1_repeated_win():
    def round_runner(g):
        game_round = start_round_from_player_cards(
            [cards.Guard(), cards.Baron()],
            [cards.King(), cards.Princess()],
            first_player=0,
        )
        object.__setattr__(g.state, "round", game_round)  # work around frozen dataclass
        player0, player1 = game_round.players

        play_with_choices(player0, CardType.GUARD, player1, cards.Princess)
        play_random_move(player1)

        end = game_round.state
        assert end.type == RoundState.Type.ROUND_END
        assert end.winner is player0

    game = Game(["Alice", "Bob"])
    alice, bob = game.players
    game.start()
    for i in range(1, 8):
        assert game.state.round_no == i
        round_runner(game)
        game.advance()
        assert +game.points == {alice: i}

    assert game.ended
    assert game.state.winner is alice
Esempio n. 2
0
def test_newGame_validPlayerList_works(players: List[str]):
    game = Game(players)
    assert len(game.players) == len(players)
    assert len(set(map(id, game.players))) == len(players)
    assert all(game.players[i].id == i for i in range(len(players)))
    assert not game.started
    assert game.current_round is None
    assert game.state.type == GameState.Type.INIT
    assert set(game.points).issubset(game.players)
    assert all(game.points[p] == 0 for p in game.players)
Esempio n. 3
0
def new_game(players) -> Game:
    return Game(players)
Esempio n. 4
0
def test_newRound_invalidNumPlayers_raises(players):
    with pytest.raises(valid8.ValidationError):
        Game(players)