test: hide progress spinners in test runs
Steady-tick spinner threads redraw straight to the real stderr, bypassing both the harness capture and the per-test log files: 'Scaffolding' lines from the pkh new tests kept leaking between test results. The scaffold tests now pass a hidden draw target (the only MultiProgress not created by the CLI).
This commit is contained in:
+6
-1
@@ -331,7 +331,12 @@ mod tests {
|
||||
) -> Result<ScaffoldOutcome, Box<dyn Error>> {
|
||||
let previous = std::env::current_dir()?;
|
||||
std::env::set_current_dir(dir)?;
|
||||
let result = scaffold(opts, &MultiProgress::new());
|
||||
// Hidden draw target: in tests the spinner would redraw from its
|
||||
// steady-tick thread straight to the real stderr
|
||||
let result = scaffold(
|
||||
opts,
|
||||
&MultiProgress::with_draw_target(crate::ui::progress_draw_target()),
|
||||
);
|
||||
std::env::set_current_dir(previous)?;
|
||||
result
|
||||
}
|
||||
|
||||
@@ -9,7 +9,11 @@ pub mod logfmt;
|
||||
/// yes/no confirmation
|
||||
pub mod prompt;
|
||||
|
||||
use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
|
||||
use indicatif::{
|
||||
MultiProgress, ProgressBar, ProgressStyle,
|
||||
};
|
||||
#[cfg(test)]
|
||||
use indicatif::ProgressDrawTarget;
|
||||
use std::path::Path;
|
||||
use std::time::Duration;
|
||||
|
||||
@@ -38,6 +42,16 @@ pub(crate) fn spinner_style() -> ProgressStyle {
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
/// Progress draw target for a [`MultiProgress`]: hidden in test runs
|
||||
///
|
||||
/// Steady-tick spinners redraw from a background thread straight to the real
|
||||
/// stderr, bypassing both the test harness capture and the per-test log
|
||||
/// files; in tests there is no terminal to animate anyway.
|
||||
#[cfg(test)]
|
||||
pub(crate) fn progress_draw_target() -> ProgressDrawTarget {
|
||||
ProgressDrawTarget::hidden()
|
||||
}
|
||||
|
||||
/// Style of a sized transfer: prefix on the first line, the bar on its own
|
||||
/// indented line below so long prefixes cannot push it out of the terminal
|
||||
pub(crate) fn transfer_style() -> ProgressStyle {
|
||||
|
||||
Reference in New Issue
Block a user