clean up, continue test
This commit is contained in:
parent
a196dc7f35
commit
df28ab68f4
@ -27,6 +27,16 @@ pub enum DevManagerHelperError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub trait DevManagerUserHook: Debug {
|
pub trait DevManagerUserHook: Debug {
|
||||||
|
fn send_mode_cmd_to_child(
|
||||||
|
&self,
|
||||||
|
request_id: RequestId,
|
||||||
|
target_id: ComponentId,
|
||||||
|
mode: ModeAndSubmode,
|
||||||
|
forced: bool,
|
||||||
|
children_mode_store: &mut ModeStoreVec,
|
||||||
|
mode_req_sender: &impl ModeRequestSender,
|
||||||
|
) -> Result<(), GenericTargetedMessagingError>;
|
||||||
|
|
||||||
fn send_mode_cmds_to_children(
|
fn send_mode_cmds_to_children(
|
||||||
&self,
|
&self,
|
||||||
request_id: RequestId,
|
request_id: RequestId,
|
||||||
@ -62,6 +72,30 @@ impl DevManagerUserHook for TransparentDevManagerHook {
|
|||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn send_mode_cmd_to_child(
|
||||||
|
&self,
|
||||||
|
request_id: RequestId,
|
||||||
|
target_id: ComponentId,
|
||||||
|
mode: ModeAndSubmode,
|
||||||
|
forced: bool,
|
||||||
|
children_mode_store: &mut ModeStoreVec,
|
||||||
|
mode_req_sender: &impl ModeRequestSender,
|
||||||
|
) -> Result<(), GenericTargetedMessagingError> {
|
||||||
|
let mut_val = children_mode_store
|
||||||
|
.get_mut(target_id)
|
||||||
|
.ok_or(GenericSendError::TargetDoesNotExist(target_id))?;
|
||||||
|
mut_val.awaiting_reply = true;
|
||||||
|
mode_req_sender.send_mode_request(
|
||||||
|
request_id,
|
||||||
|
target_id,
|
||||||
|
ModeRequest::SetMode {
|
||||||
|
mode_and_submode: mode,
|
||||||
|
forced,
|
||||||
|
},
|
||||||
|
)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
|
||||||
@ -112,13 +146,13 @@ impl<UserHook: DevManagerUserHook> DevManagerCommandingHelper<UserHook> {
|
|||||||
mode_req_sender: &impl ModeRequestSender,
|
mode_req_sender: &impl ModeRequestSender,
|
||||||
) -> Result<(), GenericTargetedMessagingError> {
|
) -> Result<(), GenericTargetedMessagingError> {
|
||||||
self.state = DevManagerCommandingState::new_active_cmd(mode_and_submode, request_id);
|
self.state = DevManagerCommandingState::new_active_cmd(mode_and_submode, request_id);
|
||||||
mode_req_sender.send_mode_request(
|
self.user_hook.send_mode_cmd_to_child(
|
||||||
request_id,
|
request_id,
|
||||||
target_id,
|
target_id,
|
||||||
ModeRequest::SetMode {
|
mode_and_submode,
|
||||||
mode_and_submode,
|
forced,
|
||||||
forced,
|
&mut self.children_mode_store,
|
||||||
},
|
mode_req_sender,
|
||||||
)?;
|
)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -152,38 +186,6 @@ impl<UserHook: DevManagerUserHook> DevManagerCommandingHelper<UserHook> {
|
|||||||
self.state
|
self.state
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_mode_cmd_to_child(
|
|
||||||
&mut self,
|
|
||||||
request_id: RequestId,
|
|
||||||
target_id: ComponentId,
|
|
||||||
mode_and_submode: ModeAndSubmode,
|
|
||||||
forced: bool,
|
|
||||||
mode_req_sender: &impl ModeRequestSender,
|
|
||||||
) -> Result<(), GenericTargetedMessagingError> {
|
|
||||||
self.target_mode = Some(mode_and_submode);
|
|
||||||
let val = self
|
|
||||||
.children_mode_store
|
|
||||||
.0
|
|
||||||
.iter_mut()
|
|
||||||
.find(|val| val.id() == target_id);
|
|
||||||
if val.is_none() {
|
|
||||||
return Err(GenericSendError::TargetDoesNotExist(target_id).into());
|
|
||||||
}
|
|
||||||
let val = val.unwrap();
|
|
||||||
mode_req_sender.send_mode_request(
|
|
||||||
request_id,
|
|
||||||
target_id,
|
|
||||||
ModeRequest::SetMode {
|
|
||||||
mode_and_submode,
|
|
||||||
forced,
|
|
||||||
},
|
|
||||||
)?;
|
|
||||||
val.awaiting_reply = true;
|
|
||||||
self.active_request_id = Some(request_id);
|
|
||||||
self.state = ModeTreeHelperState::ModeCommanding;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn send_announce_mode_cmd_to_children(
|
pub fn send_announce_mode_cmd_to_children(
|
||||||
&self,
|
&self,
|
||||||
request_id: RequestId,
|
request_id: RequestId,
|
||||||
@ -332,12 +334,12 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_mode_commanding_one_child() {
|
fn test_mode_commanding_one_child() {
|
||||||
let mut assy_helper = AssemblyCommandingHelper::default();
|
let mut assy_helper = DevManagerCommandingHelper::new(TransparentDevManagerHook::default());
|
||||||
let mode_req_sender = ModeReqSenderMock::default();
|
let mode_req_sender = ModeReqSenderMock::default();
|
||||||
assy_helper.add_mode_child(ExampleId::Id1 as u64, UNKNOWN_MODE);
|
assy_helper.add_mode_child(ExampleId::Id1 as u64, UNKNOWN_MODE);
|
||||||
let expected_mode = ModeAndSubmode::new(ExampleMode::Mode1 as u32, 0);
|
let expected_mode = ModeAndSubmode::new(ExampleMode::Mode1 as u32, 0);
|
||||||
assy_helper
|
assy_helper
|
||||||
.send_mode_cmd_to_child(
|
.send_mode_cmd_to_one_child(
|
||||||
1,
|
1,
|
||||||
ExampleId::Id1 as u64,
|
ExampleId::Id1 as u64,
|
||||||
expected_mode,
|
expected_mode,
|
||||||
@ -356,14 +358,26 @@ mod tests {
|
|||||||
forced: false
|
forced: false
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
assert_eq!(assy_helper.state(), ModeTreeHelperState::ModeCommanding);
|
matches!(
|
||||||
|
assy_helper.state(),
|
||||||
|
DevManagerCommandingState::AwaitingReplies { .. }
|
||||||
|
);
|
||||||
|
if let DevManagerCommandingState::AwaitingReplies(ctx) = assy_helper.state() {
|
||||||
|
assert_eq!(ctx.target_mode, expected_mode);
|
||||||
|
assert_eq!(ctx.active_request_id, 1);
|
||||||
|
}
|
||||||
let reply = GenericMessage::new(
|
let reply = GenericMessage::new(
|
||||||
MessageMetadata::new(1, ExampleId::Id1 as u64),
|
MessageMetadata::new(1, ExampleId::Id1 as u64),
|
||||||
ModeReply::ModeReply(expected_mode),
|
ModeReply::ModeReply(expected_mode),
|
||||||
);
|
);
|
||||||
assert_eq!(
|
if let DevManagerHelperResult::ModeCommandingDone(ActiveModeCommandContext {
|
||||||
assy_helper.handle_mode_reply(&reply),
|
target_mode,
|
||||||
AssemblyHelperResult::ModeCommandingDone
|
active_request_id,
|
||||||
);
|
}) = assy_helper.handle_mode_reply(&reply).unwrap()
|
||||||
|
{
|
||||||
|
assert_eq!(target_mode, expected_mode);
|
||||||
|
assert_eq!(active_request_id, 1);
|
||||||
|
}
|
||||||
|
matches!(assy_helper.state(), DevManagerCommandingState::Idle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user