use tokmd_progress::{Progress, ProgressBarWithEta};
#[test]
fn scenario_spinner_disabled_does_not_panic() {
let spinner = Progress::new(false);
spinner.set_message("scanning");
spinner.set_message(String::from("owned string"));
spinner.finish_and_clear();
}
#[test]
fn scenario_spinner_enabled_in_non_tty_acts_as_noop() {
let spinner = Progress::new(true);
spinner.set_message("phase 1");
spinner.set_message("phase 2");
spinner.finish_and_clear();
}
#[test]
fn scenario_spinner_drop_cleans_up() {
let spinner = Progress::new(false);
spinner.set_message("working");
drop(spinner);
}
#[test]
fn scenario_spinner_finish_then_drop_is_safe() {
let spinner = Progress::new(true);
spinner.finish_and_clear();
drop(spinner);
}
#[test]
fn scenario_bar_creation_with_zero_total() {
let bar = ProgressBarWithEta::new(false, 0, "empty");
bar.inc();
bar.set_position(0);
bar.finish_and_clear();
}
#[test]
fn scenario_bar_creation_with_large_total() {
let bar = ProgressBarWithEta::new(false, u64::MAX, "huge");
bar.inc();
bar.inc_by(1000);
bar.set_position(u64::MAX / 2);
bar.finish_and_clear();
}
#[test]
fn scenario_bar_full_lifecycle_disabled() {
let bar = ProgressBarWithEta::new(false, 100, "scan");
for i in 0..100 {
bar.inc();
if i % 25 == 0 {
bar.set_message(&format!("processing batch {}", i / 25));
}
}
bar.finish_with_message("done");
}
#[test]
fn scenario_bar_full_lifecycle_enabled_non_tty() {
let bar = ProgressBarWithEta::new(true, 50, "files");
for _ in 0..50 {
bar.inc();
}
bar.finish_with_message("complete");
}
#[test]
fn scenario_bar_inc_by_accumulates() {
let bar = ProgressBarWithEta::new(false, 100, "batch");
bar.inc_by(25);
bar.inc_by(25);
bar.inc_by(50);
bar.finish_and_clear();
}
#[test]
fn scenario_bar_set_position_beyond_total() {
let bar = ProgressBarWithEta::new(false, 10, "overshoot");
bar.set_position(20);
bar.finish_and_clear();
}
#[test]
fn scenario_bar_set_length_after_creation() {
let bar = ProgressBarWithEta::new(false, 10, "resize");
bar.inc_by(5);
bar.set_length(100);
bar.inc_by(95);
bar.finish_with_message("resized");
}
#[test]
fn scenario_bar_set_length_to_zero() {
let bar = ProgressBarWithEta::new(false, 50, "shrink");
bar.set_length(0);
bar.inc();
bar.finish_and_clear();
}
#[test]
fn scenario_bar_finish_before_any_progress() {
let bar = ProgressBarWithEta::new(false, 100, "immediate");
bar.finish_with_message("skipped");
}
#[test]
fn scenario_bar_finish_and_clear_before_any_progress() {
let bar = ProgressBarWithEta::new(false, 100, "immediate");
bar.finish_and_clear();
}
#[test]
fn scenario_bar_drop_without_finish() {
let bar = ProgressBarWithEta::new(false, 50, "abandoned");
bar.inc_by(10);
drop(bar);
}
#[test]
fn scenario_bar_message_updates() {
let bar = ProgressBarWithEta::new(false, 10, "start");
bar.set_message("phase 1");
bar.set_message("phase 2");
bar.set_message("");
bar.set_message("final phase");
bar.finish_and_clear();
}
#[test]
fn scenario_bar_empty_message() {
let bar = ProgressBarWithEta::new(false, 10, "");
bar.inc();
bar.finish_with_message("");
}