92 lines
2.7 KiB
Rust
92 lines
2.7 KiB
Rust
use polyscribe::progress::{ProgressFactory, ProgressMode, SelectionInput, select_mode, ProgressManager};
|
|
|
|
#[test]
|
|
fn test_factory_decide_mode_none_when_disabled() {
|
|
let pf = ProgressFactory::new(true); // force disabled
|
|
assert!(matches!(pf.decide_mode(0), ProgressMode::None));
|
|
assert!(matches!(pf.decide_mode(1), ProgressMode::None));
|
|
assert!(matches!(pf.decide_mode(2), ProgressMode::None));
|
|
}
|
|
|
|
#[test]
|
|
fn test_select_mode_zero_inputs_is_none() {
|
|
let si = SelectionInput {
|
|
inputs_len: 0,
|
|
no_progress_flag: false,
|
|
stderr_tty_override: Some(true),
|
|
env_no_progress: false,
|
|
};
|
|
let (enabled, mode) = select_mode(si);
|
|
assert!(enabled);
|
|
assert!(matches!(mode, ProgressMode::None));
|
|
}
|
|
|
|
#[test]
|
|
fn test_select_mode_one_input_is_single() {
|
|
let si = SelectionInput {
|
|
inputs_len: 1,
|
|
no_progress_flag: false,
|
|
stderr_tty_override: Some(true),
|
|
env_no_progress: false,
|
|
};
|
|
let (enabled, mode) = select_mode(si);
|
|
assert!(enabled);
|
|
assert!(matches!(mode, ProgressMode::Single));
|
|
}
|
|
|
|
#[test]
|
|
fn test_select_mode_multi_inputs_is_multi() {
|
|
let si = SelectionInput {
|
|
inputs_len: 3,
|
|
no_progress_flag: false,
|
|
stderr_tty_override: Some(true),
|
|
env_no_progress: false,
|
|
};
|
|
let (enabled, mode) = select_mode(si);
|
|
assert!(enabled);
|
|
match mode {
|
|
ProgressMode::Multi { total_inputs } => assert_eq!(total_inputs, 3),
|
|
_ => panic!("expected multi mode"),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_env_no_progress_disables() {
|
|
// Simulate env flag influence by passing env_no_progress=true
|
|
unsafe { std::env::set_var("NO_PROGRESS", "1"); }
|
|
let si = SelectionInput {
|
|
inputs_len: 5,
|
|
no_progress_flag: false,
|
|
stderr_tty_override: Some(true),
|
|
env_no_progress: true,
|
|
};
|
|
let (enabled, mode) = select_mode(si);
|
|
assert!(!enabled);
|
|
assert!(matches!(mode, ProgressMode::None));
|
|
unsafe { std::env::remove_var("NO_PROGRESS"); }
|
|
}
|
|
|
|
#[test]
|
|
fn test_completed_never_exceeds_total_and_item_updates_do_not_affect_total() {
|
|
// create hidden multiprogress for tests
|
|
let pm = ProgressManager::new_for_tests_multi_hidden(3);
|
|
pm.set_total(3);
|
|
// Start an item and update progress a few times
|
|
let item = pm.start_item("Test item");
|
|
item.set_progress(0.1);
|
|
item.set_progress(0.4);
|
|
item.set_message("stage1");
|
|
// Ensure total unchanged
|
|
let (pos, len) = pm.total_state_for_tests().unwrap();
|
|
assert_eq!(len, 3);
|
|
assert_eq!(pos, 0);
|
|
// Mark 4 times completed, but expect clamp at 3
|
|
pm.inc_completed();
|
|
pm.inc_completed();
|
|
pm.inc_completed();
|
|
pm.inc_completed();
|
|
let (pos, len) = pm.total_state_for_tests().unwrap();
|
|
assert_eq!(len, 3);
|
|
assert_eq!(pos, 3);
|
|
}
|