#[test]
fn test_cli_021_chaos_unicode() {
let history = create_temp_history(&["git status", "cargo build"]);
let model = NamedTempFile::new().unwrap();
aprender_shell()
.args([
"train",
"-f",
history.path().to_str().unwrap(),
"-o",
model.path().to_str().unwrap(),
])
.assert()
.success();
let test_cases = [
"🚀", "日本語", "Ù…Ø±ØØ¨Ø§", "\u{FEFF}git", "git\u{200B}status", "git\u{202E}status", &"é".repeat(100), ];
for prefix in test_cases {
aprender_shell()
.args(["suggest", "-m", model.path().to_str().unwrap(), prefix])
.assert()
.success(); }
}
#[test]
fn test_cli_021_chaos_concurrent_read() {
use std::thread;
let history = create_temp_history(&[
"git status",
"git commit",
"git push",
"cargo build",
"cargo test",
]);
let model = NamedTempFile::new().unwrap();
aprender_shell()
.args([
"train",
"-f",
history.path().to_str().unwrap(),
"-o",
model.path().to_str().unwrap(),
])
.assert()
.success();
let model_path = model.path().to_str().unwrap().to_string();
let handles: Vec<_> = (0..5)
.map(|_| {
let model_path = model_path.clone();
thread::spawn(move || {
for _ in 0..10 {
Command::cargo_bin("aprender-shell")
.unwrap()
.args(["suggest", "-m", &model_path, "git "])
.assert()
.success();
}
})
})
.collect();
for handle in handles {
handle.join().expect("Thread should complete successfully");
}
}
#[test]
fn test_cli_021_chaos_rapid_calls() {
let history = create_temp_history(&["git status", "git commit", "cargo build"]);
let model = NamedTempFile::new().unwrap();
aprender_shell()
.args([
"train",
"-f",
history.path().to_str().unwrap(),
"-o",
model.path().to_str().unwrap(),
])
.assert()
.success();
for i in 0..50 {
aprender_shell()
.args([
"suggest",
"-m",
model.path().to_str().unwrap(),
&format!("git {:02}", i),
])
.assert()
.success();
}
}