diff options
Diffstat (limited to 'diplomacy/daide/tests')
-rw-r--r-- | diplomacy/daide/tests/test_responses.py | 339 |
1 files changed, 339 insertions, 0 deletions
diff --git a/diplomacy/daide/tests/test_responses.py b/diplomacy/daide/tests/test_responses.py new file mode 100644 index 0000000..407b96c --- /dev/null +++ b/diplomacy/daide/tests/test_responses.py @@ -0,0 +1,339 @@ +# ============================================================================== +# Copyright (C) 2019 - Philip Paquette +# +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU Affero General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +# details. +# +# You should have received a copy of the GNU Affero General Public License along +# with this program. If not, see <https://www.gnu.org/licenses/>. +# ============================================================================== +""" Tests for request objects """ +from diplomacy import Game +from diplomacy.daide import responses +from diplomacy.daide.utils import str_to_bytes +import diplomacy.utils.errors as err +from diplomacy.utils.order_results import OK, BOUNCE, DISLODGED + +def test_map(): + """ Tests the MAP response """ + daide_str = 'MAP ( s t a n d a r d )' + response = responses.MAP('standard') + assert isinstance(response, responses.MAP), 'Expected a MAP response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_hlo(): + """ Tests the HLO response """ + daide_str = 'HLO ( FRA ) ( #1234 ) ( ( LVL #0 ) ( MTL #1200 ) ( RTL #1200 ) ( BTL #1200 ) ( AOA ) )' + response = responses.HLO('FRANCE', 1234, 0, 1200, ['NO_CHECK']) + assert isinstance(response, responses.HLO), 'Expected a HLO response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_hlo_no_deadline(): + """ Tests the HLO response """ + daide_str = 'HLO ( FRA ) ( #1234 ) ( ( LVL #0 ) ( AOA ) )' + response = responses.HLO('FRANCE', 1234, 0, 0, ['NO_CHECK']) + assert isinstance(response, responses.HLO), 'Expected a HLO response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_sco(): + """ Tests the SCO response """ + daide_str = 'SCO ( AUS BUD TRI VIE ) ( ENG EDI LON LVP ) ( FRA BRE MAR PAR ) ' \ + '( GER BER KIE MUN ) ( ITA NAP ROM VEN ) ( RUS MOS SEV STP WAR ) ' \ + '( TUR ANK CON SMY ) ( UNO BEL BUL DEN GRE HOL NWY POR RUM SER SPA SWE TUN )' + game = Game(map_name='standard') + power_centers = {power.name: power.centers for power in game.powers.values()} + response = responses.SCO(power_centers, map_name='standard') + assert isinstance(response, responses.SCO), 'Expected a SCO response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_now(): + """ Tests the NOW response """ + daide_str = 'NOW ( SPR #1901 ) ( AUS AMY BUD ) ( AUS AMY VIE ) ( AUS FLT TRI ) ( ENG FLT EDI )' \ + ' ( ENG FLT LON ) ( ENG AMY LVP ) ( FRA FLT BRE ) ( FRA AMY MAR ) ( FRA AMY PAR )' \ + ' ( GER FLT KIE ) ( GER AMY BER ) ( GER AMY MUN ) ( ITA FLT NAP ) ( ITA AMY ROM )' \ + ' ( ITA AMY VEN ) ( RUS AMY WAR ) ( RUS AMY MOS ) ( RUS FLT SEV )' \ + ' ( RUS FLT ( STP SCS ) ) ( TUR FLT ANK ) ( TUR AMY CON ) ( TUR AMY SMY )' + game = Game(map_name='standard') + phase_name = game.get_current_phase() + units = {power.name: power.units for power in game.powers.values()} + retreats = {power.name: power.retreats for power in game.powers.values()} + response = responses.NOW(phase_name=phase_name, powers_units=units, powers_retreats=retreats) + assert isinstance(response, responses.NOW), 'Expected a NOW response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_thx_001(): + """ Tests the THX response """ + daide_str = 'THX ( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY ) ( MBV )' + order_daide_str = '( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY )' + response = responses.THX(order_bytes=str_to_bytes(order_daide_str), results=[]) + assert isinstance(response, responses.THX), 'Expected a THX response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_thx_002(): + """ Tests the THX response """ + daide_str = 'THX ( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY ) ( NYU )' + order_daide_str = '( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY )' + response = responses.THX(order_bytes=str_to_bytes(order_daide_str), + results=[error.code for error in [err.GAME_ORDER_TO_FOREIGN_UNIT % 'A MAR']]) + assert isinstance(response, responses.THX), 'Expected a THX response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_thx_003(): + """ Tests the THX response """ + daide_str = 'THX ( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY ) ( MBV )' + order_daide_str = '( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY )' + response = responses.THX(order_bytes=str_to_bytes(order_daide_str), + results=[error.code for error in [OK, err.MAP_LEAST_TWO_POWERS]]) + assert isinstance(response, responses.THX), 'Expected a THX response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_001(): + """ Tests the MIS response """ + daide_str = 'MIS ( FRA FLT BRE ) ( FRA AMY MAR ) ( FRA AMY PAR )' + game = Game(map_name='standard') + phase_name = 'S1901M' + power = game.get_power('FRANCE') + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_002(): + """ Tests the MIS response """ + daide_str = 'MIS ( TUR FLT ANK MRT ( ARM ) ) ' \ + '( TUR FLT CON MRT ( BLA SMY ( BUL ECS ) ( BUL SCS ) ) ) ' \ + '( TUR AMY SMY MRT ( SYR ) )' + game = Game(map_name='standard') + phase_name = 'S1901R' + power = game.get_power('TURKEY') + power.units = ['F ANK', 'F CON', 'A SMY'] + power.retreats['F ANK'] = ['ARM'] + power.retreats['F CON'] = ['BLA', 'SMY', 'BUL/EC', 'BUL/SC'] + power.retreats['A SMY'] = ['SYR'] + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_003(): + """ Tests the MIS response """ + daide_str = 'MIS ( #0 )' + game = Game(map_name='standard') + phase_name = 'W1901A' + power = game.get_power('FRANCE') + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_004(): + """ Tests the MIS response """ + daide_str = 'MIS ( #1 )' + game = Game(map_name='standard') + phase_name = 'W1901A' + power = game.get_power('FRANCE') + power.centers = power.centers[:-1] + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_005(): + """ Tests the MIS response """ + daide_str = 'MIS ( #-1 )' + game = Game(map_name='standard') + phase_name = 'W1901A' + power = game.get_power('FRANCE') + power.units = power.units[:-1] + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_006(): + """ Tests the MIS response """ + daide_str = 'MIS ( #1 )' + game = Game(map_name='standard') + phase_name = 'W1901A' + power = game.get_power('FRANCE') + power.units = power.units + ['F LON'] + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_007(): + """ Tests the MIS response """ + daide_str = 'MIS ( FRA FLT BRE ) ( FRA AMY MAR )' + game = Game(map_name='standard') + game.set_orders('FRANCE', ['A PAR - BUR']) + phase_name = 'S1901M' + power = game.get_power('FRANCE') + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_008(): + """ Tests the MIS response """ + daide_str = 'MIS ( FRA FLT BRE ) ( FRA AMY MAR )' + game = Game(map_name='standard') + game.add_rule('NO_CHECK') + game.set_orders('FRANCE', ['A PAR - BUR']) + phase_name = 'S1901M' + power = game.get_power('FRANCE') + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_009(): + """ Tests the MIS response """ + daide_str = 'MIS ( FRA FLT BRE ) ( FRA AMY MAR )' + game = Game(map_name='standard') + phase_name = 'S1901M' + power = game.get_power('FRANCE') + power.orders['REORDER 1'] = 'A PAR - BUR' + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_010(): + """ Tests the MIS response """ + daide_str = 'MIS ( FRA FLT BRE ) ( FRA AMY MAR )' + game = Game(map_name='standard') + phase_name = 'S1901M' + power = game.get_power('FRANCE') + power.orders['INVALID'] = 'A PAR - BUR' + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_011(): + """ Tests the MIS response """ + daide_str = 'MIS ( #0 )' + game = Game(map_name='standard') + phase_name = 'W1901A' + power = game.get_power('FRANCE') + power.centers += ['LON'] + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_mis_012(): + """ Tests the MIS response """ + daide_str = 'MIS ( #-1 )' + game = Game(map_name='standard') + phase_name = 'W1901A' + power = game.get_power('FRANCE') + power.centers += ['LON'] + power.units = power.units[:2] + response = responses.MIS(phase_name=phase_name, power=power) + assert isinstance(response, responses.MIS), 'Expected a MIS response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_ord_001(): + """ Tests the ORD response """ + daide_str = 'ORD ( SPR #1901 ) ( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY ) ( SUC )' + order_daide_str = '( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY' + game = Game(map_name='standard') + phase_name = game.map.phase_abbr(game.phase) + response = responses.ORD(phase_name=phase_name, order_bytes=str_to_bytes(order_daide_str), results=[]) + assert isinstance(response, responses.ORD), 'Expected a ORD response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_ord_002(): + """ Tests the ORD response """ + daide_str = 'ORD ( SPR #1901 ) ( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY ) ( NSO )' + order_daide_str = '( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY' + game = Game(map_name='standard') + phase_name = game.map.phase_abbr(game.phase) + response = responses.ORD(phase_name=phase_name, order_bytes=str_to_bytes(order_daide_str), + results=[BOUNCE.code]) + assert isinstance(response, responses.ORD), 'Expected a ORD response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_ord_003(): + """ Tests the ORD response """ + daide_str = 'ORD ( SPR #1901 ) ( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY ) ( NSO )' + order_daide_str = '( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY' + game = Game(map_name='standard') + phase_name = game.map.phase_abbr(game.phase) + response = responses.ORD(phase_name=phase_name, order_bytes=str_to_bytes(order_daide_str), + results=[DISLODGED]) + assert isinstance(response, responses.ORD), 'Expected a ORD response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_ord_004(): + """ Tests the ORD response """ + daide_str = 'ORD ( SPR #1901 ) ( ( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY ) ( NSO )' + order_daide_str = '( ENG FLT NWG ) SUP ( ENG AMY YOR ) MTO NWY' + game = Game(map_name='standard') + phase_name = game.map.phase_abbr(game.phase) + response = responses.ORD(phase_name=phase_name, order_bytes=str_to_bytes(order_daide_str), + results=[BOUNCE.code, DISLODGED]) + assert isinstance(response, responses.ORD), 'Expected a ORD response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_tme(): + """ Tests the TME response """ + daide_str = 'TME ( #60 )' + response = responses.TME(seconds=60) + assert isinstance(response, responses.TME), 'Expected a TME response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_yes(): + """ Tests the YES response """ + daide_str = 'YES ( TME ( #60 ) )' + request_daide_str = 'TME ( #60 )' + response = responses.YES(request_bytes=str_to_bytes(request_daide_str)) + assert isinstance(response, responses.YES), 'Expected a YES response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_rej(): + """ Tests the REJ response """ + daide_str = 'REJ ( TME ( #60 ) )' + request_daide_str = 'TME ( #60 )' + response = responses.REJ(request_bytes=str_to_bytes(request_daide_str)) + assert isinstance(response, responses.REJ), 'Expected a REJ response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_not(): + """ Tests the NOT response """ + daide_str = 'NOT ( CCD ( FRA ) )' + response_daide_str = 'CCD ( FRA )' + response = responses.NOT(response_bytes=str_to_bytes(response_daide_str)) + assert isinstance(response, responses.NOT), 'Expected a NOT response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_ccd(): + """ Tests the CCD response """ + daide_str = 'CCD ( AUS )' + response = responses.CCD(power_name='AUSTRIA') + assert isinstance(response, responses.CCD), 'Expected a CCD response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_out(): + """ Tests the OUT response """ + daide_str = 'OUT ( AUS )' + response = responses.OUT(power_name='AUSTRIA') + assert isinstance(response, responses.OUT), 'Expected a OUT response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_prn(): + """ Tests the PRN response """ + daide_str = 'PRN ( SUB ( ( ENG AMY LVP ) HLD ) ' \ + '( ( ENG FLT LON ) MTO NTH ) ' \ + '( ( ENG FLT EDI ) SUP ( ENG FLT LON ) MTO NTH )' + request_daide_str = 'SUB ( ( ENG AMY LVP ) HLD ) ' \ + '( ( ENG FLT LON ) MTO NTH ) ' \ + '( ( ENG FLT EDI ) SUP ( ENG FLT LON ) MTO NTH' + response = responses.PRN(request_bytes=str_to_bytes(request_daide_str)) + assert isinstance(response, responses.PRN), 'Expected a PRN response' + assert bytes(response) == str_to_bytes(daide_str) + +def test_huh(): + """ Tests the HUH response """ + daide_str = 'HUH ( ERR )' + response = responses.HUH(b'', 0) + assert isinstance(response, responses.HUH), 'Expected a HUH response' + assert bytes(response) == str_to_bytes(daide_str) |