Files
galaxy/app/src/integration_testing/command_palette/step.rs
T

70 lines
2.5 KiB
Rust

use crate::integration_testing::command_palette::assertions::{
assert_command_palette_has_results, assert_command_palette_is_closed,
assert_command_palette_is_open,
};
use crate::util::bindings::cmd_or_ctrl_shift;
use galaxyui::integration::{AssertionOutcome, TestStep};
use galaxyui::{App, WindowId};
/// Extension trait for `Vec<TestStep>` that allows chaining assertions onto the last step.
pub trait TestStepsExt {
fn add_assertion<F>(self, callback: F) -> Self
where
F: FnMut(&mut App, WindowId) -> AssertionOutcome + 'static;
fn add_named_assertion<N, F>(self, name: N, callback: F) -> Self
where
N: Into<String>,
F: FnMut(&mut App, WindowId) -> AssertionOutcome + 'static;
}
impl TestStepsExt for Vec<TestStep> {
fn add_assertion<F>(mut self, callback: F) -> Self
where
F: FnMut(&mut App, WindowId) -> AssertionOutcome + 'static,
{
let last = self.pop().expect("steps should not be empty");
self.push(last.add_assertion(callback));
self
}
fn add_named_assertion<N, F>(mut self, name: N, callback: F) -> Self
where
N: Into<String>,
F: FnMut(&mut App, WindowId) -> AssertionOutcome + 'static,
{
let last = self.pop().expect("steps should not be empty");
self.push(last.add_named_assertion(name, callback));
self
}
}
pub fn open_command_palette() -> TestStep {
TestStep::new("Open Command Palette")
.with_keystrokes(&[cmd_or_ctrl_shift("p")])
.add_assertion(assert_command_palette_is_open())
}
/// Test steps to run an `action` within the command palette.
///
/// Returns two steps: the first opens the palette and types the action text, waiting for
/// search results to appear (needed because async data sources like file search may delay
/// result delivery). The second presses Enter to execute the selected action.
pub fn open_command_palette_and_run_action(action: &str) -> Vec<TestStep> {
vec![
TestStep::new(format!("Type {action} in command palette").as_str())
.with_keystrokes(&[cmd_or_ctrl_shift("p")])
.with_typed_characters(&[action])
.add_assertion(assert_command_palette_has_results()),
TestStep::new(format!("Run {action} in command palette").as_str())
.with_keystrokes(&["enter"]),
]
}
/// Test step to close the command palette.
pub fn close_command_palette() -> TestStep {
TestStep::new("Close command Palette")
.with_keystrokes(&["escape"])
.add_assertion(assert_command_palette_is_closed())
}