AI_Diplomacy/diplomacy/integration/webdiplomacy_net/tests/test_orders.py
2025-02-06 14:33:10 -08:00

442 lines
16 KiB
Python

# ==============================================================================
# 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/>.
# ==============================================================================
""" Test order conversion. """
from diplomacy.integration.webdiplomacy_net.orders import Order
def compare_dicts(dict_1, dict_2):
""" Checks if two dictionaries are equal """
keys_1 = set(dict_1.keys()) - {'convoyPath'}
keys_2 = set(dict_2.keys()) - {'convoyPath'}
if keys_1 != keys_2:
return False
for key in keys_1:
if dict_1[key] != dict_2[key]:
return False
return True
def test_hold_army_001():
""" Tests hold army """
raw_order = 'A PAR H'
order_str = 'A PAR H'
order_dict = {'terrID': 47,
'unitType': 'Army',
'type': 'Hold',
'toTerrID': '',
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_hold_army_002():
""" Tests hold army """
raw_order = 'A ABC H'
order_str = ''
order_dict = {}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_hold_fleet_001():
""" Tests hold fleet """
raw_order = 'F LON H'
order_str = 'F LON H'
order_dict = {'terrID': 6,
'unitType': 'Fleet',
'type': 'Hold',
'toTerrID': '',
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_move_army_001():
""" Tests move army """
raw_order = 'A YOR - LON'
order_str = 'A YOR - LON'
order_dict = {'terrID': 4,
'unitType': 'Army',
'type': 'Move',
'toTerrID': 6,
'fromTerrID': '',
'viaConvoy': 'No'}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_move_army_002():
""" Tests move army """
raw_order = 'A PAR - LON VIA'
order_str = 'A PAR - LON VIA'
order_dict = {'terrID': 47,
'unitType': 'Army',
'type': 'Move',
'toTerrID': 6,
'fromTerrID': '',
'viaConvoy': 'Yes'}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_move_fleet_001():
""" Tests move fleet """
raw_order = 'F BRE - MAO'
order_str = 'F BRE - MAO'
order_dict = {'terrID': 46,
'unitType': 'Fleet',
'type': 'Move',
'toTerrID': 61,
'fromTerrID': '',
'viaConvoy': 'No'}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_support_hold_001():
""" Tests for support hold """
raw_order = 'A PAR S F BRE'
order_str = 'A PAR S BRE'
order_dict = {'terrID': 47,
'unitType': 'Army',
'type': 'Support hold',
'toTerrID': 46,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_support_hold_002():
""" Tests for support hold """
raw_order = 'F MAO S F BRE'
order_str = 'F MAO S BRE'
order_dict = {'terrID': 61,
'unitType': 'Fleet',
'type': 'Support hold',
'toTerrID': 46,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_support_move_001():
""" Tests support move """
raw_order = 'A PAR S F MAO - BRE'
order_str = 'A PAR S MAO - BRE'
order_dict = {'terrID': 47,
'unitType': 'Army',
'type': 'Support move',
'toTerrID': 46,
'fromTerrID': 61,
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_support_move_002():
""" Tests support move """
raw_order = 'F MAO S A PAR - BRE'
order_str = 'F MAO S PAR - BRE'
order_dict = {'terrID': 61,
'unitType': 'Fleet',
'type': 'Support move',
'toTerrID': 46,
'fromTerrID': 47,
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_convoy_001():
""" Tests convoy """
raw_order = 'F MAO C A PAR - LON'
order_str = 'F MAO C A PAR - LON'
order_dict = {'terrID': 61,
'unitType': 'Fleet',
'type': 'Convoy',
'toTerrID': 6,
'fromTerrID': 47,
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_retreat_army_001():
""" Tests retreat army """
raw_order = 'A PAR R LON'
order_str = 'A PAR R LON'
order_dict = {'terrID': 47,
'unitType': 'Army',
'type': 'Retreat',
'toTerrID': 6,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_retreat_army_002():
""" Tests retreat army """
raw_order = 'A PAR - LON'
order_str = 'A PAR R LON'
order_dict = {'terrID': 47,
'unitType': 'Army',
'type': 'Retreat',
'toTerrID': 6,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order, phase_type='R')
order_from_dict = Order(order_dict, phase_type='R')
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_retreat_fleet_001():
""" Tests retreat fleet """
raw_order = 'F BRE R SPA/SC'
order_str = 'F BRE R SPA/SC'
order_dict = {'terrID': 46,
'unitType': 'Fleet',
'type': 'Retreat',
'toTerrID': 77,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_disband_army_001():
""" Tests disband army """
raw_order = 'A PAR D'
order_str = 'A PAR D'
order_dict = {'terrID': 47,
'unitType': 'Army',
'type': 'Disband',
'toTerrID': '',
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order, phase_type='R')
order_from_dict = Order(order_dict, phase_type='R')
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_disband_fleet_001():
""" Tests disband fleet """
raw_order = 'F BRE D'
order_str = 'F BRE D'
order_dict = {'terrID': 46,
'unitType': 'Fleet',
'type': 'Disband',
'toTerrID': '',
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order, phase_type='R')
order_from_dict = Order(order_dict, phase_type='R')
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_disband_fleet_coast_001():
""" Tests disband fleet (retreats phase) """
raw_order = 'F SPA/NC D'
order_str = 'F SPA/NC D'
order_dict = {'terrID': 76,
'unitType': 'Fleet',
'type': 'Disband',
'toTerrID': '',
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order, phase_type='R')
order_from_dict = Order(order_dict, phase_type='R')
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_disband_fleet_coast_002():
""" Tests disband fleet (adjustment phase)"""
raw_order = 'F SPA/NC D'
order_str = 'F SPA D'
order_dict = {'terrID': 8,
'unitType': 'Fleet',
'type': 'Destroy',
'toTerrID': 8,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order, phase_type='A')
order_from_dict = Order(order_dict, phase_type='A')
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_build_army_001():
""" Tests build army """
raw_order = 'A PAR B'
order_str = 'A PAR B'
order_dict = {'terrID': 47,
'unitType': 'Army',
'type': 'Build Army',
'toTerrID': 47,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_build_fleet_001():
""" Tests build fleet """
raw_order = 'F BRE B'
order_str = 'F BRE B'
order_dict = {'terrID': 46,
'unitType': 'Fleet',
'type': 'Build Fleet',
'toTerrID': 46,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order)
order_from_dict = Order(order_dict)
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_disband_army_002():
""" Tests disband army """
raw_order = 'A PAR D'
order_str = 'A PAR D'
order_dict = {'terrID': 47,
'unitType': 'Army',
'type': 'Destroy',
'toTerrID': 47,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order, phase_type='A')
order_from_dict = Order(order_dict, phase_type='A')
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)
def test_disband_fleet_002():
""" Tests disband fleet """
raw_order = 'F BRE D'
order_str = 'F BRE D'
order_dict = {'terrID': 46,
'unitType': 'Fleet',
'type': 'Destroy',
'toTerrID': 46,
'fromTerrID': '',
'viaConvoy': ''}
order_from_string = Order(raw_order, phase_type='A')
order_from_dict = Order(order_dict, phase_type='A')
# Validating
assert order_from_string.to_string() == order_str
assert compare_dicts(order_from_string.to_dict(), order_dict)
assert order_from_dict.to_string() == order_str
assert compare_dicts(order_from_dict.to_dict(), order_dict)