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)