MCPcopy Index your code
hub / github.com/NativeScript/SimDeck / run_batch_step

Function run_batch_step

packages/server/src/api/action_execution.rs:667–1257  ·  view source on GitHub ↗
(state: AppState, udid: String, step: BatchStep)

Source from the content-addressed store, hash-verified

665}
666
667async fn run_batch_step(state: AppState, udid: String, step: BatchStep) -> Result<Value, AppError> {
668 match step {
669 BatchStep::Sleep { ms, seconds } => {
670 let duration =
671 ms.unwrap_or_else(|| ((seconds.unwrap_or(0.0) * 1000.0).max(0.0)) as u64);
672 tokio::time::sleep(Duration::from_millis(duration)).await;
673 Ok(json_value!({ "action": "sleep", "durationMs": duration }))
674 }
675 BatchStep::Tap(payload) => {
676 let expected = perform_tap_payload(state, udid, payload).await?;
677 let mut result = json_value!({ "action": "tap" });
678 if let (Some(object), Some(expected)) = (result.as_object_mut(), expected) {
679 object.insert("expectation".to_owned(), expected);
680 }
681 Ok(result)
682 }
683 BatchStep::Back {
684 timeout_ms,
685 poll_ms,
686 fallback_swipe,
687 } => {
688 perform_back_payload(state, udid, timeout_ms, poll_ms, fallback_swipe).await
689 }
690 BatchStep::WaitFor(payload) => {
691 let snapshot = wait_for_snapshot_match(state, udid, payload.clone()).await?;
692 let found = first_matching_element(&snapshot, &payload.selector)
693 .ok_or_else(|| AppError::not_found("No accessibility element matched."))?;
694 Ok(json_value!({ "action": "waitFor", "match": compact_accessibility_node(&found) }))
695 }
696 BatchStep::Assert(payload) => {
697 let snapshot = wait_for_snapshot_match(state, udid, payload.clone()).await?;
698 let found = first_matching_element(&snapshot, &payload.selector)
699 .ok_or_else(|| AppError::not_found("No accessibility element matched."))?;
700 Ok(json_value!({ "action": "assert", "match": compact_accessibility_node(&found) }))
701 }
702 BatchStep::Query(payload) => query_element_payload(state, udid, payload).await,
703 BatchStep::AssertNot(payload) => {
704 let Json(_) = wait_for_absent_element_payload(state, udid, payload).await?;
705 Ok(json_value!({ "action": "assertNot" }))
706 }
707 BatchStep::ScrollUntilVisible(payload) => {
708 let Json(result) = scroll_until_visible_payload(state, udid, payload).await?;
709 Ok(json_value!({
710 "action": "scrollUntilVisible",
711 "match": result.get("match").cloned().unwrap_or(Value::Null),
712 "scrollCount": result.get("scrollCount").cloned().unwrap_or(Value::Null),
713 }))
714 }
715 BatchStep::Key {
716 key_code,
717 modifiers,
718 } => {
719 if android::is_android_id(&udid) {
720 run_android_action(state, move |android| {
721 android.send_key(&udid, key_code, modifiers.unwrap_or(0))
722 })
723 .await?;
724 return Ok(json_value!({ "action": "key" }));

Callers 2

run_batch_stepsFunction · 0.70
simulator_actionFunction · 0.70

Calls 15

perform_tap_payloadFunction · 0.85
perform_back_payloadFunction · 0.85
wait_for_snapshot_matchFunction · 0.85
first_matching_elementFunction · 0.85
query_element_payloadFunction · 0.85
is_android_idFunction · 0.85
run_android_actionFunction · 0.85
run_bridge_actionFunction · 0.85
handle_tvos_touch_phaseFunction · 0.85
tvos_touch_sequence_keyFunction · 0.85

Tested by

no test coverage detected