pub struct ScriptedUser { /* private fields */ }Expand description
A user for tests, who answers every prompt from a script
ScriptedUser reads the events of a command in place of a presenter. It answers each prompt
with the next answer of its script, and it uses each answer once.
A prompt fails with AnswerPromptError::UnscriptedPrompt when the script has ended, and
when the next answer is for another kind of prompt. That answer is used up as well.
Build the Context or the Prompt of the test with Interactivity::Interactive.
Otherwise the prompt fails before it sends a request.
§Examples
use clawless_core::context::Interactivity;
use clawless_core::event::event_channel;
use clawless_core::output::Output;
use clawless_core::prompt::{Confirmation, Prompt, ScriptedAnswer, ScriptedUser};
let (sender, receiver) = event_channel();
let user = ScriptedUser::new([ScriptedAnswer::Confirm(Confirmation::Yes)]);
tokio::spawn(user.attend(receiver));
let prompt = Prompt::builder()
.output(Output::new(sender))
.interactivity(Interactivity::Interactive)
.build();
let answer = prompt.confirm("Delete the branch?").await.expect("should answer");
assert_eq!(answer, Confirmation::Yes);Implementations§
Source§impl ScriptedUser
impl ScriptedUser
Sourcepub fn new(answers: impl IntoIterator<Item = ScriptedAnswer>) -> Self
pub fn new(answers: impl IntoIterator<Item = ScriptedAnswer>) -> Self
Creates a user who gives the answers in the order of the script
§Examples
use clawless_core::prompt::{Confirmation, ScriptedAnswer, ScriptedUser};
let user = ScriptedUser::new([
ScriptedAnswer::Confirm(Confirmation::Yes),
ScriptedAnswer::Confirm(Confirmation::No),
]);Sourcepub async fn attend(self, receiver: EventReceiver) -> Vec<Event>
pub async fn attend(self, receiver: EventReceiver) -> Vec<Event>
Reads the events of a command and answers its prompts, until the command is done
The call returns when the channel closes, which happens when the command drops its output. It returns every event that was not a prompt, in the order of arrival.
Run this in a task of its own, because the command waits for each answer.