use crate::ported::params::getiparam;
pub fn _menu() -> i32 {
let _fn_scope = crate::compsys::ported::shared::FnScope::enter("_menu");
if getiparam("_matcher_num") > 1 {
return 1;
}
let old_list = crate::ported::params::getsparam("compstate[old_list]").unwrap_or_default();
if !old_list.is_empty() {
let _ = crate::ported::params::setsparam("compstate[old_list]", "keep");
let old_insert: i64 = crate::ported::params::getsparam("compstate[old_insert]")
.as_deref()
.and_then(|s| s.parse().ok())
.unwrap_or(0);
let _ = crate::ported::params::setsparam("compstate[insert]", &(old_insert + 1).to_string());
} else {
let _ = crate::ported::params::setsparam("compstate[insert]", "1");
}
1
}
#[cfg(test)]
mod tests {
use super::*;
use crate::ported::params::setiparam;
fn reset_compstate_keys() {
let _ = crate::ported::params::setsparam("compstate[old_list]", "");
let _ = crate::ported::params::setsparam("compstate[insert]", "");
let _ = crate::ported::params::setsparam("compstate[old_insert]", "");
}
#[test]
fn defers_when_matcher_num_gt_one() {
let _g = crate::test_util::global_state_lock();
let _scope = crate::test_util::comp_scope();
reset_compstate_keys();
setiparam("_matcher_num", 5);
let _ = crate::ported::params::setsparam("compstate[old_list]", "preserved");
let r = _menu();
assert_eq!(r, 1);
assert_eq!(crate::ported::params::getsparam("compstate[old_list]").as_deref(), Some("preserved"));
reset_compstate_keys();
setiparam("_matcher_num", 0);
}
#[test]
fn no_old_list_sets_insert_to_one() {
let _g = crate::test_util::global_state_lock();
let _scope = crate::test_util::comp_scope();
reset_compstate_keys();
setiparam("_matcher_num", 1);
let r = _menu();
assert_eq!(r, 1);
assert_eq!(crate::ported::params::getsparam("compstate[insert]").as_deref(), Some("1"));
reset_compstate_keys();
}
#[test]
fn with_old_list_keeps_and_advances_insert() {
let _g = crate::test_util::global_state_lock();
let _scope = crate::test_util::comp_scope();
reset_compstate_keys();
setiparam("_matcher_num", 1);
let _ = crate::ported::params::setsparam("compstate[old_list]", "yes");
let _ = crate::ported::params::setsparam("compstate[old_insert]", "7");
let r = _menu();
assert_eq!(r, 1);
assert_eq!(crate::ported::params::getsparam("compstate[old_list]").as_deref(), Some("keep"));
assert_eq!(
crate::ported::params::getsparam("compstate[insert]").as_deref(),
Some("8"),
"sh:16 insert = old_insert + 1"
);
reset_compstate_keys();
}
#[test]
fn old_insert_zero_yields_insert_one() {
let _g = crate::test_util::global_state_lock();
let _scope = crate::test_util::comp_scope();
reset_compstate_keys();
setiparam("_matcher_num", 1);
let _ = crate::ported::params::setsparam("compstate[old_list]", "yes");
let _ = crate::ported::params::setsparam("compstate[old_insert]", "0");
let r = _menu();
assert_eq!(r, 1);
assert_eq!(crate::ported::params::getsparam("compstate[insert]").as_deref(), Some("1"));
reset_compstate_keys();
}
#[test]
fn old_insert_missing_yields_insert_one() {
let _g = crate::test_util::global_state_lock();
let _scope = crate::test_util::comp_scope();
reset_compstate_keys();
setiparam("_matcher_num", 1);
let _ = crate::ported::params::setsparam("compstate[old_list]", "yes");
let r = _menu();
assert_eq!(r, 1);
assert_eq!(crate::ported::params::getsparam("compstate[insert]").as_deref(), Some("1"));
reset_compstate_keys();
}
}