lotabout.skim/e2e/tests/binds.rs
LoricAndre 0a60090a6b
chore(cargo): update to 2024 edition (#764)
* chore(cargo): update to 2024 edition

* chore: fmt

* chore(tuikit): update README

* fix(tuikit): fix imports

* feat(ci): run all tests during pr

* fix(ci): exclude e2e from unit tests

* fix(tests): ignore error on stdout locking failure

* fix(tests): fix syntax

---------

Co-authored-by: LoricAndre <loric.andre@pm.me>
2025-05-04 19:44:06 +02:00

98 lines
2.5 KiB
Rust

use e2e::Keys::*;
use e2e::TmuxController;
use e2e::sk;
use std::io::Result;
fn setup(input: &str, opts: &[&str]) -> Result<TmuxController> {
let tmux = TmuxController::new()?;
let _ = tmux.start_sk(Some(&format!("echo -n -e '{input}'")), opts)?;
tmux.until(|l| l[0].starts_with(">"))?;
Ok(tmux)
}
#[test]
fn bind_execute_0_results() -> Result<()> {
let tmux = TmuxController::new()?;
let outfile = tmux.start_sk(Some("echo -n ''"), &["--bind", "'ctrl-f:execute(echo foo{})'"])?;
tmux.until(|l| l[0] == ">")?;
tmux.send_keys(&[Ctrl(&Key('f')), Enter])?;
tmux.until(|l| l[0] != ">")?;
let output = tmux.output(&outfile)?;
assert_eq!(output[0], "");
Ok(())
}
#[test]
fn bind_execute_0_results_noref() -> Result<()> {
let tmux = TmuxController::new()?;
let outfile = tmux.start_sk(Some("echo -n ''"), &["--bind", "'ctrl-f:execute(echo foo)'"])?;
tmux.until(|l| l[0] == ">")?;
tmux.send_keys(&[Ctrl(&Key('f')), Enter])?;
tmux.until(|l| l[0] != ">")?;
let output = tmux.output(&outfile)?;
assert_eq!(output[0], "foo");
Ok(())
}
#[test]
fn bind_if_non_matched() -> Result<()> {
let tmux = setup(
"a\nb",
&["--bind", "'enter:if-non-matched(backward-delete-char)'", "-q", "ab"],
)?;
tmux.until(|l| l[0].starts_with(">"))?;
tmux.until(|l| l[0].starts_with("> ab"))?;
tmux.send_keys(&[Enter])?;
tmux.until(|l| l[0] == "> a")?;
tmux.send_keys(&[Enter, Key('c')])?;
tmux.until(|l| l[0].starts_with("> ac"))?;
Ok(())
}
#[test]
fn bind_append_and_select() -> Result<()> {
let tmux = setup("a\\n\\nb\\nc", &["-m", "--bind", "'ctrl-f:append-and-select'"])?;
tmux.send_keys(&[Str("xyz"), Ctrl(&Key('f'))])?;
tmux.until(|l| l.len() > 2 && l[2] == ">>xyz")?;
Ok(())
}
#[test]
fn bind_reload_no_arg() -> Result<()> {
let tmux = TmuxController::new()?;
let outfile = tmux.tempfile()?;
let sk_cmd = sk(&outfile, &["--bind", "'ctrl-a:reload'"])
.replace("SKIM_DEFAULT_COMMAND=", "SKIM_DEFAULT_COMMAND='echo hello'");
tmux.send_keys(&[Str(&sk_cmd), Enter])?;
tmux.until(|l| l[0].starts_with(">"))?;
tmux.send_keys(&[Ctrl(&Key('a'))])?;
tmux.until(|l| l.len() > 2 && l[2] == "> hello")?;
Ok(())
}
#[test]
fn bind_reload_cmd() -> Result<()> {
let tmux = setup("a\\n\\nb\\nc", &["--bind", "'ctrl-a:reload(echo hello)'"])?;
tmux.until(|l| l.len() > 2 && l[2] == "> a")?;
tmux.send_keys(&[Ctrl(&Key('a'))])?;
tmux.until(|l| l.len() > 2 && l[2] == "> hello")?;
Ok(())
}