KeiSeiKit-1.0/_primitives/_rust/kei-llm-llamacpp/tests/cli_subcommands.rs
Parfii-bot 0be354a920 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

120 lines
3 KiB
Rust

//! clap parses each of the 5 subcommands with required + optional flags.
//! Exercises both required-arg presence and flag default values.
use clap::Parser;
use kei_llm_llamacpp::cli::{Cli, Cmd};
#[test]
fn probe_subcommand_parses() {
let cli = Cli::try_parse_from(["kei-llm-llamacpp", "probe"]).unwrap();
assert!(matches!(cli.cmd, Cmd::Probe));
}
#[test]
fn models_subcommand_with_dir() {
let cli = Cli::try_parse_from([
"kei-llm-llamacpp",
"models",
"--dir",
"/tmp/llama-models",
])
.unwrap();
match cli.cmd {
Cmd::Models { dir } => assert_eq!(dir.unwrap().to_str().unwrap(), "/tmp/llama-models"),
other => panic!("expected Models, got {other:?}"),
}
}
#[test]
fn models_subcommand_without_dir() {
let cli = Cli::try_parse_from(["kei-llm-llamacpp", "models"]).unwrap();
match cli.cmd {
Cmd::Models { dir } => assert!(dir.is_none()),
other => panic!("expected Models, got {other:?}"),
}
}
#[test]
fn generate_subcommand_with_all_flags() {
let cli = Cli::try_parse_from([
"kei-llm-llamacpp",
"generate",
"--model",
"/tmp/m.gguf",
"--prompt",
"hello",
"--max-tokens",
"256",
"--temperature",
"0.4",
"--stream",
])
.unwrap();
match cli.cmd {
Cmd::Generate { model, prompt, max_tokens, temperature, stream } => {
assert_eq!(model.to_str().unwrap(), "/tmp/m.gguf");
assert_eq!(prompt, "hello");
assert_eq!(max_tokens, 256);
assert_eq!(temperature, Some(0.4));
assert!(stream);
}
other => panic!("expected Generate, got {other:?}"),
}
}
#[test]
fn generate_subcommand_default_max_tokens() {
let cli = Cli::try_parse_from([
"kei-llm-llamacpp",
"generate",
"--model",
"/tmp/m.gguf",
"--prompt",
"hi",
])
.unwrap();
match cli.cmd {
Cmd::Generate { max_tokens, temperature, stream, .. } => {
assert_eq!(max_tokens, 128);
assert!(temperature.is_none());
assert!(!stream);
}
other => panic!("expected Generate, got {other:?}"),
}
}
#[test]
fn server_subcommand_default_host_and_port() {
let cli = Cli::try_parse_from([
"kei-llm-llamacpp",
"server",
"--model",
"/tmp/m.gguf",
])
.unwrap();
match cli.cmd {
Cmd::Server { host, port, .. } => {
assert_eq!(host, "127.0.0.1");
assert_eq!(port, 8080);
}
other => panic!("expected Server, got {other:?}"),
}
}
#[test]
fn version_subcommand_parses() {
let cli = Cli::try_parse_from(["kei-llm-llamacpp", "version"]).unwrap();
assert!(matches!(cli.cmd, Cmd::Version));
}
#[test]
fn missing_required_flag_errors() {
// generate without --model must fail.
let res = Cli::try_parse_from([
"kei-llm-llamacpp",
"generate",
"--prompt",
"hi",
]);
assert!(res.is_err(), "generate without --model must error");
}