mirror of
https://github.com/lotabout/skim.git
synced 2026-09-10 07:16:23 -04:00
* tests: improve coverage to 90% * feat: improve coverage * remove most unix-only tests * Update src/skim_tests.rs Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fixes * chore: misc --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
110 lines
3 KiB
Rust
110 lines
3 KiB
Rust
use super::*;
|
|
|
|
fn completions_for(sh: &Shell) -> String {
|
|
let mut buf = Vec::new();
|
|
generate_completions(sh, &mut buf);
|
|
String::from_utf8(buf).expect("completion output is valid UTF-8")
|
|
}
|
|
|
|
#[test]
|
|
fn completions_bash_contains_sk() {
|
|
let out = completions_for(&Shell::Bash);
|
|
assert!(out.contains("sk"), "bash completion should reference 'sk'");
|
|
assert!(
|
|
out.contains("--query") || out.contains("query"),
|
|
"bash completion should include --query"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn completions_zsh_contains_sk() {
|
|
let out = completions_for(&Shell::Zsh);
|
|
assert!(out.contains("sk"), "zsh completion should reference 'sk'");
|
|
assert!(
|
|
out.contains("--multi") || out.contains("multi"),
|
|
"zsh completion should include --multi"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn completions_fish_contains_sk() {
|
|
let out = completions_for(&Shell::Fish);
|
|
assert!(out.contains("sk"), "fish completion should reference 'sk'");
|
|
}
|
|
|
|
#[test]
|
|
fn completions_nushell_is_non_empty() {
|
|
let out = completions_for(&Shell::Nushell);
|
|
assert!(!out.is_empty(), "nushell completion should not be empty");
|
|
}
|
|
|
|
#[test]
|
|
fn completions_elvish_is_non_empty() {
|
|
let out = completions_for(&Shell::Elvish);
|
|
assert!(!out.is_empty(), "elvish completion should not be empty");
|
|
}
|
|
|
|
#[test]
|
|
fn completions_powershell_is_non_empty() {
|
|
let out = completions_for(&Shell::PowerShell);
|
|
assert!(!out.is_empty(), "powershell completion should not be empty");
|
|
}
|
|
|
|
fn key_bindings_for(sh: &Shell) -> String {
|
|
let mut buf = Vec::new();
|
|
generate_key_bindings(sh, &mut buf).expect("key-bindings generation failed");
|
|
String::from_utf8(buf).expect("key-bindings output is valid UTF-8")
|
|
}
|
|
|
|
#[test]
|
|
fn key_bindings_bash() {
|
|
let out = key_bindings_for(&Shell::Bash);
|
|
assert!(
|
|
out.starts_with("# skim key bindings for bash"),
|
|
"unexpected bash header"
|
|
);
|
|
assert!(out.contains("__skim_select__()"), "missing __skim_select__ function");
|
|
}
|
|
|
|
#[test]
|
|
fn key_bindings_zsh() {
|
|
let out = key_bindings_for(&Shell::Zsh);
|
|
assert!(out.starts_with("# skim key bindings for zsh"), "unexpected zsh header");
|
|
for func in [
|
|
"__skimcmd()",
|
|
"__skim_comprun()",
|
|
"__skim_extract_command()",
|
|
"__skim_generic_path_completion()",
|
|
"_skim_complete()",
|
|
"_skim_complete_kill()",
|
|
] {
|
|
assert!(out.contains(func), "missing zsh function {func}");
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn key_bindings_fish() {
|
|
let out = key_bindings_for(&Shell::Fish);
|
|
assert!(
|
|
out.starts_with("#!/bin/fish"),
|
|
"fish key-bindings should start with shebang"
|
|
);
|
|
for func in [
|
|
"function __skimcmd",
|
|
"function __skim_parse_commandline",
|
|
"function __skim_get_dir",
|
|
] {
|
|
assert!(out.contains(func), "missing fish function '{func}'");
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn key_bindings_unsupported_shells_are_empty() {
|
|
for sh in [Shell::Elvish, Shell::Nushell, Shell::PowerShell] {
|
|
assert!(
|
|
key_bindings_for(&sh).is_empty(),
|
|
"{sh:?} should produce no key-bindings output"
|
|
);
|
|
}
|
|
}
|