def test_vehicle_spawned_in_bubble_is_not_captured(vehicle, bubble): manager = BubbleManager([bubble], road_network) # Spawned inside bubble, didn't "drive through" airlocking region, so should _not_ # get captured vehicle = Vehicle( id="vehicle-1", pose=Pose.from_center((0, 0, 0), Heading(0)), showbase=mock.MagicMock(), chassis=mock.Mock(), ) change = manager.step_bubble_state([vehicle], []) assert len(manager.vehicle_ids_in_bubble(bubble)) == 0 # Spawned vehicle drove through airlock so _should_ get captured vehicle = Vehicle( id="vehicle-2", pose=Pose.from_center((-8, 0, 0), Heading(0)), showbase=mock.MagicMock(), chassis=mock.Mock(), ) change = manager.step_bubble_state([vehicle], []) vehicle.position = (-6, 0) change = manager.step_bubble_state([vehicle], []) assert len(manager.vehicle_ids_in_bubble(bubble)) == 1 manager.teardown()
def test_bubble_manager_state_change(vehicle, bubble): manager = BubbleManager([bubble], road_network) # Outside airlock and bubble vehicle = Vehicle( id="vehicle-1", pose=Pose.from_center((0, 0, 0), Heading(0)), showbase=mock.MagicMock(), chassis=mock.Mock(), ) vehicle.position = (-8, 0) change = manager.step_bubble_state([vehicle], []) assert len(change.entered_airlock_1) == len(change.entered_bubble) == 0 # Inside airlock, begin collecting experiences, but don't hijack vehicle.position = (-6, 0) change = manager.step_bubble_state([vehicle], []) assert len(change.entered_airlock_1) == 1 and len( change.entered_bubble) == 0 # Entered bubble, now hijack vehicle.position = (-3, 0) change = manager.step_bubble_state([vehicle], []) assert len(change.entered_airlock_1) == 0 and len( change.entered_bubble) == 1 assert change.entered_bubble[0][0] == vehicle.id # Leave bubble into exiting airlock vehicle.position = (6, 0) change = manager.step_bubble_state([], [vehicle]) assert len(change.entered_bubble) == 0 and len(change.exited_bubble) == 1 # Exit bubble and airlock, now relinquish vehicle.position = (8, 0) change = manager.step_bubble_state([vehicle], []) assert len(change.exited_bubble) == 0 and len(change.exited_airlock_2) == 1 manager.teardown()