def test_f_19__multi_route_convoy_disruption_paradox(): helper = TurnHelper([ PlayerHelper('France', [ CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Tunis', 'Naples'), CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET, 'Tyrrhenian Sea', 'Tunis', 'Naples'), CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET, 'Ionian Sea', 'Tunis', 'Naples'), ]), PlayerHelper('Italy', [ CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Rome Coast', 'Tyrrhenian Sea'), CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Naples Coast', 'Rome Coast', 'Tyrrhenian Sea'), ]) ]) result = helper.resolve() assert result == { 'France': { Unit(UnitTypes.TROOP, 'Tunis'): None, Unit(UnitTypes.FLEET, 'Tyrrhenian Sea'): None, Unit(UnitTypes.FLEET, 'Ionian Sea'): None, }, 'Italy': { Unit(UnitTypes.FLEET, 'Naples Coast'): None, Unit(UnitTypes.FLEET, 'Rome Coast'): 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_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, }, }
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_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_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_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_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_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_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_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_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_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, }, }
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_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_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_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_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_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_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_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_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, }, }
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_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_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_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_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_14__simple_convoy_paradox(): helper = TurnHelper([ PlayerHelper('England', [ CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Wales Coast', 'English Channel'), CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'London Coast', 'Wales Coast', 'English Channel'), ]), PlayerHelper('France', [ CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Brest', 'London'), CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET, 'English Channel', 'Brest', 'London'), ]) ]) result = helper.resolve() assert result == { 'England': { Unit(UnitTypes.FLEET, 'London Coast'): None, Unit(UnitTypes.FLEET, 'English Channel'): None, }, 'France': { Unit(UnitTypes.TROOP, 'Brest'): None, Unit(UnitTypes.FLEET, 'English Channel'): { 'Irish Sea', 'Mid-Atlantic Ocean', 'North Sea', 'Belgium Coast', 'Picardy Coast', }, }, }