feat: Add support for action modifier keys like ctrl,shift,alt.
This commit is contained in:
@@ -59,7 +59,7 @@ fn gen_imports(kind: TestKind) -> TokenStream {
|
||||
TestKind::Menu => {
|
||||
quote! {
|
||||
use pikl_core::item::Item;
|
||||
use pikl_core::event::{Action, MenuEvent, MenuResult};
|
||||
use pikl_core::event::{Action, MenuEvent, MenuResult, ModifiedAction};
|
||||
use pikl_core::menu::MenuRunner;
|
||||
use pikl_core::json_menu::JsonMenu;
|
||||
}
|
||||
@@ -67,7 +67,7 @@ fn gen_imports(kind: TestKind) -> TokenStream {
|
||||
TestKind::Ipc => {
|
||||
quote! {
|
||||
use pikl_core::item::Item;
|
||||
use pikl_core::event::{Action, MenuEvent, MenuResult};
|
||||
use pikl_core::event::{Action, MenuEvent, MenuResult, ModifiedAction};
|
||||
use pikl_core::menu::MenuRunner;
|
||||
use pikl_core::json_menu::JsonMenu;
|
||||
use crate::ipc::server::IpcServer;
|
||||
@@ -326,14 +326,14 @@ fn gen_menu(case: &TestCase, fixtures: &Fixtures) -> syn::Result<TokenStream> {
|
||||
let handle = tokio::spawn(async move { menu.run().await });
|
||||
|
||||
let _ = rx.recv().await;
|
||||
let _ = tx.send(Action::Resize { height: 50 }).await;
|
||||
let _ = tx.send(ModifiedAction::new(Action::Resize { height: 50 })).await;
|
||||
let _ = rx.recv().await;
|
||||
|
||||
#(#action_sends)*
|
||||
|
||||
drop(tx);
|
||||
|
||||
let result = handle.await.unwrap_or(Ok(MenuResult::Cancelled));
|
||||
let result = handle.await.unwrap_or(Ok(MenuResult::Cancelled { modifiers: pikl_core::event::Modifiers::default() }));
|
||||
#result_assert
|
||||
}
|
||||
})
|
||||
@@ -345,17 +345,17 @@ fn gen_menu_actions(actions: &[ActionExpr]) -> syn::Result<Vec<TokenStream>> {
|
||||
let expr = match action {
|
||||
ActionExpr::Simple(name) => {
|
||||
let variant = menu_action_variant(name)?;
|
||||
quote! { let _ = tx.send(#variant).await; }
|
||||
quote! { let _ = tx.send(ModifiedAction::new(#variant)).await; }
|
||||
}
|
||||
ActionExpr::Filter(query) => {
|
||||
quote! { let _ = tx.send(Action::UpdateFilter(#query.to_string())).await; }
|
||||
quote! { let _ = tx.send(ModifiedAction::new(Action::UpdateFilter(#query.to_string()))).await; }
|
||||
}
|
||||
ActionExpr::AddItems(items) => {
|
||||
let item_exprs: Vec<TokenStream> = items
|
||||
.iter()
|
||||
.map(|s| quote! { serde_json::Value::String(#s.to_string()) })
|
||||
.collect();
|
||||
quote! { let _ = tx.send(Action::AddItems(vec![#(#item_exprs),*])).await; }
|
||||
quote! { let _ = tx.send(ModifiedAction::new(Action::AddItems(vec![#(#item_exprs),*]))).await; }
|
||||
}
|
||||
ActionExpr::Raw(_) => {
|
||||
return Err(syn::Error::new(Span::call_site(), "raw actions are only supported in headless tests"));
|
||||
@@ -450,7 +450,7 @@ fn gen_ipc(case: &TestCase, fixtures: &Fixtures) -> syn::Result<TokenStream> {
|
||||
|
||||
let handle = tokio::spawn(async move { menu.run().await });
|
||||
|
||||
let _ = tx.send(Action::Resize { height: 50 }).await;
|
||||
let _ = tx.send(ModifiedAction::new(Action::Resize { height: 50 })).await;
|
||||
tokio::time::sleep(Duration::from_millis(30)).await;
|
||||
|
||||
// Start IPC server on a temp socket
|
||||
@@ -484,7 +484,7 @@ fn gen_ipc(case: &TestCase, fixtures: &Fixtures) -> syn::Result<TokenStream> {
|
||||
drop(writer);
|
||||
drop(tx);
|
||||
drop(ipc_server);
|
||||
let result = handle.await.unwrap_or(Ok(MenuResult::Cancelled));
|
||||
let result = handle.await.unwrap_or(Ok(MenuResult::Cancelled { modifiers: pikl_core::event::Modifiers::default() }));
|
||||
#result_assert
|
||||
}
|
||||
})
|
||||
@@ -559,7 +559,7 @@ fn gen_result_assert(case: &TestCase, label_key: &str) -> syn::Result<TokenStrea
|
||||
if case.cancelled {
|
||||
Ok(quote! {
|
||||
assert!(
|
||||
matches!(result, Ok(MenuResult::Cancelled)),
|
||||
matches!(result, Ok(MenuResult::Cancelled { .. })),
|
||||
"expected Cancelled, got: {:?}", result.as_ref().map(|r| format!("{:?}", r))
|
||||
);
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user