43 lines
3.0 KiB
Python
43 lines
3.0 KiB
Python
import unittest
|
|
class CatalogTests(unittest.TestCase):
|
|
def test_names_cells_and_version_are_exact(self):
|
|
from navigation_gateway.catalog import Catalog
|
|
site={'registry_version':3,'locations':{'stop':{'frame_id':'map','x':1,'y':2,'z':0,'qx':0,'qy':0,'qz':0,'qw':1}},'object_locations':{'water':'stop'},'cell_locations':{'s/FRONT/1/2':'stop'}}
|
|
c=Catalog(site)
|
|
self.assertEqual(c.resolve('OBJECT','water',3)['pose']['x'],1)
|
|
self.assertEqual(c.resolve('CELL','',3,shelf='s',side='FRONT',column='1',tier='2')['location_id'],'stop')
|
|
for args in [('OBJECT','unknown',3),('OBJECT','water',2),('LOCATION','water',3)]:
|
|
with self.assertRaises(ValueError):c.resolve(*args)
|
|
|
|
class SemanticTranslationTests(unittest.TestCase):
|
|
def test_navigation_status_is_translated_not_copied(self):
|
|
from types import SimpleNamespace as NS
|
|
from navigation_gateway import semantic_proxy as m
|
|
nav = NS(SUCCEEDED=0, CANCELED=1, TIMEOUT=2, BLOCKED=3, NOT_READY=4, FAILED=5, UNKNOWN=0, CONFIRMED=1)
|
|
old = NS(COMPLETED=0, FAILED=1, CANCELED=2, TIMED_OUT=3, REJECTED=4, UNKNOWN=0, CONFIRMED=1)
|
|
self.assertTrue(hasattr(m, 'translate_navigation_result'))
|
|
for status, expected in ((0,0),(1,2),(2,3),(3,1),(4,4),(5,1)):
|
|
source = NS(result=NS(status=status, stop_state=1, error_code='INPUTS_UNHEALTHY', message='source', stopped_at=NS(sec=123,nanosec=9), stop_evidence_ref='proof'), final_pose_valid=False, final_pose=object(), final_position_error=float('nan'), final_yaw_error=float('nan'))
|
|
target = NS(result=NS())
|
|
m.translate_navigation_result(source, target, nav, old)
|
|
self.assertEqual(target.result.status, expected)
|
|
self.assertEqual((target.result.error_code, target.result.stop_state, target.result.stopped_at.sec, target.result.stop_evidence_ref), ('INPUTS_UNHEALTHY',1,123,'proof'))
|
|
self.assertFalse(target.errors_valid)
|
|
|
|
def test_invalid_pose_does_not_make_default_zero_errors_valid(self):
|
|
from types import SimpleNamespace as NS
|
|
from navigation_gateway.semantic_proxy import translate_navigation_result
|
|
nav=NS(SUCCEEDED=0,CANCELED=1,TIMEOUT=2,BLOCKED=3,NOT_READY=4,FAILED=5,UNKNOWN=0,CONFIRMED=1)
|
|
old=NS(COMPLETED=0,FAILED=1,CANCELED=2,TIMED_OUT=3,REJECTED=4,UNKNOWN=0,CONFIRMED=1)
|
|
for status,code in [(3,'NAV_BLOCKED'),(4,'NAV_NOT_READY')]:
|
|
source=NS(result=NS(status=status,stop_state=0,error_code='',message='',stopped_at=None,stop_evidence_ref=''),final_pose_valid=False,final_pose=None,final_position_error=0.,final_yaw_error=0.)
|
|
target=NS(result=NS())
|
|
translate_navigation_result(source,target,nav,old)
|
|
self.assertFalse(target.errors_valid)
|
|
self.assertEqual(target.result.error_code,code)
|
|
source.final_pose_valid=True
|
|
for p,y in [(-1.,0.),(0.,4.)]:
|
|
source.final_position_error=p;source.final_yaw_error=y
|
|
translate_navigation_result(source,target,nav,old)
|
|
self.assertFalse(target.errors_valid)
|