aboutsummaryrefslogtreecommitdiff
path: root/diplomacy/daide/tests
diff options
context:
space:
mode:
Diffstat (limited to 'diplomacy/daide/tests')
-rw-r--r--diplomacy/daide/tests/test_responses.py339
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)