use crate::compsys::ported::_message::_message;
use crate::compsys::ported::_wanted::_wanted;
use crate::ported::params::getsparam;
pub fn _sub_commands(args: &[String]) -> i32 {
let current: i64 = getsparam("CURRENT")
.and_then(|s| s.parse().ok())
.unwrap_or(0);
if current == 2 {
let mut wanted_argv: Vec<String> = vec![
"commands".to_string(),
"expl".to_string(),
"command".to_string(),
"compadd".to_string(),
];
wanted_argv.extend(args.iter().cloned());
_wanted(&wanted_argv)
} else {
_message(&["no more arguments".to_string()])
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::ported::params::setsparam;
use crate::ported::zle::complete::INCOMPFUNC;
use std::sync::atomic::Ordering;
#[test]
fn current_two_takes_wanted_path() {
let _g = crate::test_util::global_state_lock();
INCOMPFUNC.store(1, Ordering::Relaxed);
let _ = setsparam("CURRENT", "2");
let r = _sub_commands(&[]);
INCOMPFUNC.store(0, Ordering::Relaxed);
assert_eq!(r, 1); }
#[test]
fn current_other_emits_message() {
let _g = crate::test_util::global_state_lock();
INCOMPFUNC.store(1, Ordering::Relaxed);
let _ = setsparam("CURRENT", "5");
let _r = _sub_commands(&[]);
INCOMPFUNC.store(0, Ordering::Relaxed);
}
}