def test_a_11__simple_bounce():
    """
    AUSTRIA: A Vienna -> Tyrolia
    ITALY:   A Venice -> Tyrolia
    """
    game_map = generate_map()
    austria_starting_configuration = [
        {
            'territory_name': 'Vienna',
            'unit_type': UnitTypes.TROOP
        },
    ]
    austria = Player("Austria", game_map, austria_starting_configuration)

    italy_starting_configuration = [
        {
            'territory_name': 'Venice',
            'unit_type': UnitTypes.TROOP
        },
    ]
    italy = Player("Italy", game_map, italy_starting_configuration)

    commands = [
        MoveCommand(austria, austria.units[0], 'Tyrolia'),
        MoveCommand(italy, italy.units[0], 'Tyrolia'),
    ]
    result = resolve_turn(game_map, commands)
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Vienna'): None
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Venice'): None
        },
    }
def test_h_4__no_other_moves_during_retreat():
    retreat_map = {
        'England': {
            Unit(UnitTypes.TROOP, 'Holland'): {
                'Belgium',
            },
            Unit(UnitTypes.FLEET, 'North Sea'): None,
        },
        'Germany': {
            Unit(UnitTypes.TROOP, 'Holland'): None,
            Unit(UnitTypes.FLEET, 'Kiel Coast'): None,
        }
    }
    with pytest.raises(AssertionError):
        RetreatHelper(retreat_map, [
            PlayerHelper('England', [
                RetreatCommandHelper(RetreatCommandType.MOVE, retreat_map,
                                     UnitTypes.TROOP, 'Holland', 'Belgium'),
                RetreatCommandHelper(
                    RetreatCommandType.MOVE,
                    retreat_map,
                    UnitTypes.FLEET,
                    'North Sea',
                    'Norwegian Sea',
                ),
            ]),
        ])
def test_h_15__no_coastal_crawl_in_retreat():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.HOLD, UnitTypes.FLEET, 'Portugal Coast'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET,
                          'Spain South Coast', 'Portugal Coast'),
            CommandHelper(
                CommandType.SUPPORT,
                UnitTypes.FLEET,
                'Mid-Atlantic Ocean',
                'Spain South Coast',
                'Portugal Coast',
            ),
        ]),
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.FLEET, 'Portugal Coast'): set(),
        },
        'France': {
            Unit(UnitTypes.FLEET, 'Portugal Coast'): None,
            Unit(UnitTypes.FLEET, 'Mid-Atlantic Ocean'): None,
        },
    }
Example #4
0
def test_e_1__dislodged_unit_has_no_effect_on_attackers_area():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Berlin', 'Prussia'),
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Kiel Coast', 'Berlin Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Silesia', 'Berlin', 'Prussia'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Prussia', 'Berlin'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.TROOP, 'Prussia'): None,
            Unit(UnitTypes.FLEET, 'Berlin Coast'): None,
            Unit(UnitTypes.TROOP, 'Silesia'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Prussia'): {
                'Warsaw',
                'Livonia',
            },
        },
    }
def test_three_country_rotation_with_external_disruption_overcome_by_support():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Galicia', 'Bohemia'),
        ]),
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Bohemia', 'Vienna'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Vienna', 'Galicia'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Budapest', 'Vienna', 'Galicia'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Ukraine', 'Galicia'),
        ]),
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.TROOP, 'Bohemia'): None,
        },
        'Austria': {
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Turkey': {
            Unit(UnitTypes.TROOP, 'Galicia'): None,
            Unit(UnitTypes.TROOP, 'Budapest'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Ukraine'): None,
        },
    }
def test_d_27__failing_convoy_can_be_supported():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Sweden Coast',
                          'Baltic Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Denmark Coast', 'Sweden Coast', 'Baltic Sea'),
        ]),
        PlayerHelper('Germany', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Berlin'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'Baltic Sea', 'Berlin', 'Livonia'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Prussia Coast', 'Baltic Sea', 'Baltic Sea'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.FLEET, 'Sweden Coast'): None,
            Unit(UnitTypes.FLEET, 'Denmark Coast'): None,
        },
        'Germany': {
            Unit(UnitTypes.TROOP, 'Berlin'): None,
        },
        'Russia': {
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
            Unit(UnitTypes.FLEET, 'Prussia Coast'): None,
        },
    }
def test_d_33__unwanted_support_allowed():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Serbia',
                          'Budapest'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Vienna',
                          'Budapest'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Galicia',
                          'Serbia', 'Budapest'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Bulgaria',
                          'Serbia'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Budapest'): None,
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Galicia'): None,
        },
        'Turkey': {
            Unit(UnitTypes.TROOP, 'Serbia'): None,
        },
    }
def test_d_1__supported_hold_can_prevent_dislodgement():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Trieste',
                          'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Adriatic Sea',
                          'Trieste', 'Venice'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Tyrolia',
                          'Venice', 'Venice'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Adriatic Sea'): None,
            Unit(UnitTypes.TROOP, 'Trieste'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Venice'): None,
            Unit(UnitTypes.TROOP, 'Tyrolia'): None,
        },
    }
def test_d_11__no_self_dislodgement_of_returning_unit():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Berlin',
                          'Prussia'),
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Kiel Coast',
                          'Berlin Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Munich',
                          'Kiel Coast', 'Berlin Coast'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Warsaw',
                          'Prussia'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.TROOP, 'Berlin'): None,
            Unit(UnitTypes.FLEET, 'Kiel Coast'): None,
            Unit(UnitTypes.TROOP, 'Munich'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Warsaw'): None,
        },
    }
def test_d_8__failed_convoy_cannot_receive_hold_support():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Albania',
                          'Greece'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Serbia',
                          'Albania', 'Greece'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Greece',
                          'Naples'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Bulgaria',
                          'Greece', 'Greece'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Greece'): None,
            Unit(UnitTypes.TROOP, 'Serbia'): None,
        },
        'Turkey': {
            Unit(UnitTypes.TROOP, 'Greece'): set(),
            Unit(UnitTypes.TROOP, 'Bulgaria'): None,
        },
    }
def test_d_9__support_to_move_on_holding_unit_not_allowed():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Trieste'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Albania',
                          'Trieste', 'Serbia'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Venice',
                          'Trieste'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Tyrolia',
                          'Venice', 'Trieste'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Trieste'): {
                'Serbia',
                'Budapest',
                'Vienna',
            },
            Unit(UnitTypes.TROOP, 'Albania'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Trieste'): None,
            Unit(UnitTypes.TROOP, 'Tyrolia'): None,
        },
    }
def test_d_7__support_to_hold_on_moving_unit_not_allowed():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Baltic Sea',
                          'Sweden Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Prussia Coast', 'Baltic Sea', 'Baltic Sea'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Livonia Coast',
                          'Baltic Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Gulf of Bothnia', 'Livonia Coast', 'Baltic Sea'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Finland',
                          'Sweden'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.FLEET, 'Baltic Sea'): {
                'Kiel Coast',
                'Denmark Coast',
                'Berlin Coast',
            },
            Unit(UnitTypes.FLEET, 'Prussia Coast'): None,
        },
        'Russia': {
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
            Unit(UnitTypes.FLEET, 'Gulf of Bothnia'): None,
            Unit(UnitTypes.TROOP, 'Finland'): None,
        },
    }
def test_d_6__support_to_hold_on_convoying_unit_allowed():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Berlin',
                          'Sweden'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'Baltic Sea', 'Berlin', 'Sweden'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Prussia Coast', 'Baltic Sea', 'Baltic Sea'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Livonia Coast',
                          'Baltic Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Gulf of Bothnia', 'Livonia Coast', 'Baltic Sea'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
            Unit(UnitTypes.FLEET, 'Prussia Coast'): None,
            Unit(UnitTypes.TROOP, 'Sweden'): None,
        },
        'Russia': {
            Unit(UnitTypes.FLEET, 'Livonia Coast'): None,
            Unit(UnitTypes.FLEET, 'Gulf of Bothnia'): None,
        },
    }
def test_d_4__support_to_hold_unit_supporting_hold_allowed():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Berlin',
                          'Kiel Coast', 'Kiel Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Kiel Coast',
                          'Berlin', 'Berlin'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Prussia',
                          'Berlin'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Baltic Sea',
                          'Prussia', 'Berlin'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.FLEET, 'Kiel Coast'): None,
            Unit(UnitTypes.TROOP, 'Berlin'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Prussia'): None,
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
        },
    }
def test_d_20__unit_cannot_cut_support_of_own_country():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'North Sea',
                          'English Channel'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'London Coast',
                          'North Sea', 'English Channel'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Yorkshire',
                          'London'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.HOLD, UnitTypes.FLEET,
                          'English Channel'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.FLEET, 'English Channel'): None,
            Unit(UnitTypes.FLEET, 'London Coast'): None,
            Unit(UnitTypes.TROOP, 'Yorkshire'): None,
        },
        'France': {
            Unit(UnitTypes.FLEET, 'English Channel'): {
                'Wales Coast',
                'Irish Sea',
                'Mid-Atlantic Ocean',
                'Brest Coast',
                'Picardy Coast',
                'Belgium Coast',
            },
        },
    }
def test_d_13__supporing_foreign_unit_to_dislodge_returning_own_unit_prohibited(
):
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Trieste Coast',
                          'Adriatic Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Vienna',
                          'Venice', 'Trieste'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Venice',
                          'Trieste'),
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Apulia Coast',
                          'Adriatic Sea'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Trieste Coast'): None,
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Venice'): None,
            Unit(UnitTypes.FLEET, 'Apulia Coast'): None,
        },
    }
def test_d_26__failing_move_support_can_be_supported():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Berlin',
                          'Prussia', 'Silesia'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Kiel Coast',
                          'Berlin', 'Berlin'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Prussia',
                          'Berlin'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Baltic Sea',
                          'Prussia', 'Berlin'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.TROOP, 'Berlin'): None,
            Unit(UnitTypes.FLEET, 'Kiel Coast'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Prussia'): None,
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
        },
    }
def test_d_14__supporing_foreign_unit_not_enough_to_prevent_dislodgement():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.HOLD, UnitTypes.FLEET, 'Trieste Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Vienna',
                          'Venice', 'Trieste'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Venice',
                          'Trieste'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Tyrolia',
                          'Venice', 'Trieste'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Adriatic Sea',
                          'Venice', 'Trieste'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Trieste Coast'): {
                'Albania Coast',
            },
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Trieste'): None,
            Unit(UnitTypes.TROOP, 'Tyrolia'): None,
            Unit(UnitTypes.FLEET, 'Adriatic Sea'): None,
        },
    }
def test_d_31__tricky_impossible_support():
    """
    Adapted from D.31, because I disagree that preventing this move specification is critical,
    but more a nice-to-have. For the time being, we'll permit and acknowledge this support is
    not very helpful.
    """
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Rumania',
                          'Armenia'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Black Sea',
                          'Rumania', 'Armenia'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Rumania'): None,
        },
        'Turkey': {
            Unit(UnitTypes.FLEET, 'Black Sea'): None,
        },
    }
def test_d_15__defender_cannot_cut_support_for_attack_on_itself():
    helper = TurnHelper([
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Black Sea',
                          'Ankara Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Constantinople Coast', 'Black Sea', 'Ankara Coast'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Ankara Coast',
                          'Constantinople Coast'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Russia': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): None,
            Unit(UnitTypes.FLEET, 'Constantinople Coast'): None,
        },
        'Turkey': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): {
                'Armenia Coast',
            },
        },
    }
def test_d_3__move_cuts_support_on_move():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Trieste',
                          'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Adriatic Sea',
                          'Trieste', 'Venice'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Venice'),
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Ionian Sea',
                          'Adriatic Sea'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Adriatic Sea'): None,
            Unit(UnitTypes.TROOP, 'Trieste'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Venice'): None,
            Unit(UnitTypes.FLEET, 'Ionian Sea'): None,
        },
    }
def test_d_16__convoying_a_unit_dislodging_a_unit_of_same_power_is_allowed():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'London'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'North Sea', 'Belgium', 'London'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Belgium',
                          'London'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'English Channel', 'Belgium', 'London'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.TROOP, 'London'): {
                'Yorkshire',
                'Wales',
            },
            Unit(UnitTypes.FLEET, 'North Sea'): None,
        },
        'France': {
            Unit(UnitTypes.FLEET, 'English Channel'): None,
            Unit(UnitTypes.TROOP, 'London'): None,
        },
    }
Example #23
0
def test_e_12__support_on_attack_on_own_unit_can_be_used_for_other_means():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Budapest', 'Rumania'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Serbia', 'Vienna', 'Budapest'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Vienna', 'Budapest'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Galicia', 'Budapest'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Rumania', 'Galicia', 'Budapest'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Budapest'): None,
            Unit(UnitTypes.TROOP, 'Serbia'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Galicia'): None,
            Unit(UnitTypes.TROOP, 'Rumania'): None,
        }
    }
def test_d_17__dislodgement_cuts_supports():
    helper = TurnHelper([
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Black Sea',
                          'Ankara Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Constantinople Coast', 'Black Sea', 'Ankara Coast'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Ankara Coast',
                          'Constantinople Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Smyrna',
                          'Ankara Coast', 'Constantinople Coast'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Armenia',
                          'Ankara'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Russia': {
            Unit(UnitTypes.FLEET, 'Black Sea'): None,
            Unit(UnitTypes.FLEET, 'Constantinople Coast'): {
                'Bulgaria North Coast',
                'Bulgaria South Coast',
                'Aegean Sea',
            },
        },
        'Turkey': {
            Unit(UnitTypes.FLEET, 'Constantinople Coast'): None,
            Unit(UnitTypes.TROOP, 'Smyrna'): None,
            Unit(UnitTypes.TROOP, 'Armenia'): None,
        },
    }
def test_three_country_rotation_with_one_move_supported():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Galicia', 'Bohemia'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Silesia', 'Galicia', 'Bohemia'),
        ]),
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Bohemia', 'Vienna'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Vienna', 'Galicia'),
        ]),
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.TROOP, 'Bohemia'): None,
            Unit(UnitTypes.TROOP, 'Silesia'): None,
        },
        'Austria': {
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Turkey': {
            Unit(UnitTypes.TROOP, 'Galicia'): None,
        },
    }
def test_d_19__even_when_surviving_is_an_alternative_way():
    helper = TurnHelper([
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Black Sea',
                          'Ankara Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Constantinople Coast', 'Black Sea', 'Ankara Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Smyrna',
                          'Ankara Coast', 'Constantinople Coast'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Ankara Coast',
                          'Constantinople Coast'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Russia': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): None,
            Unit(UnitTypes.FLEET, 'Constantinople Coast'): None,
            Unit(UnitTypes.TROOP, 'Smyrna'): None,
        },
        'Turkey': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): {
                'Armenia Coast',
            },
        },
    }
def test_h_13__no_retreat_with_convoy_in_main_phase():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Picardy'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'English Channel', 'Picardy', 'London'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Paris',
                          'Picardy'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Brest',
                          'Paris', 'Picardy'),
        ]),
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.TROOP, 'Picardy'): {
                'Belgium',
                'Burgundy',
            },
            Unit(UnitTypes.FLEET, 'English Channel'): None,
        },
        'France': {
            Unit(UnitTypes.TROOP, 'Picardy'): None,
            Unit(UnitTypes.TROOP, 'Brest'): None,
        },
    }
def test_d_2__move_cuts_support_on_hold():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Trieste',
                          'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Adriatic Sea',
                          'Trieste', 'Venice'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Vienna',
                          'Tyrolia'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Tyrolia',
                          'Venice', 'Venice'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Adriatic Sea'): None,
            Unit(UnitTypes.TROOP, 'Venice'): None,
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Venice'): {
                'Piedmont',
                'Tuscany',
                'Rome',
                'Apulia',
            },
            Unit(UnitTypes.TROOP, 'Tyrolia'): None,
        },
    }
def test_h_5__a_unit_may_not_retreat_to_the_area_from_which_it_is_attacked():
    helper = TurnHelper([
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Black Sea',
                          'Ankara Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Constantinople Coast', 'Black Sea', 'Ankara Coast'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.HOLD, UnitTypes.FLEET, 'Ankara Coast'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Russia': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): None,
            Unit(UnitTypes.FLEET, 'Constantinople Coast'): None,
        },
        'Turkey': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): {
                'Armenia Coast',
            },
        },
    }
def test_f_3__an_army_being_convoyed_can_receive_support():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'London',
                          'Brest'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'English Channel', 'London', 'Brest'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Mid-Atlantic Ocean', 'London', 'Brest'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Paris', 'Brest'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.TROOP, 'Brest'): None,
            Unit(UnitTypes.FLEET, 'English Channel'): None,
            Unit(UnitTypes.FLEET, 'Mid-Atlantic Ocean'): None,
        },
        'France': {
            Unit(UnitTypes.TROOP, 'Paris'): None,
        },
    }