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>> {
|
) -> Result<ScaffoldOutcome, Box<dyn Error>> {
|
||||||
let previous = std::env::current_dir()?;
|
let previous = std::env::current_dir()?;
|
||||||
std::env::set_current_dir(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)?;
|
std::env::set_current_dir(previous)?;
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,11 @@ pub mod logfmt;
|
|||||||
/// yes/no confirmation
|
/// yes/no confirmation
|
||||||
pub mod prompt;
|
pub mod prompt;
|
||||||
|
|
||||||
use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
|
use indicatif::{
|
||||||
|
MultiProgress, ProgressBar, ProgressStyle,
|
||||||
|
};
|
||||||
|
#[cfg(test)]
|
||||||
|
use indicatif::ProgressDrawTarget;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
@@ -38,6 +42,16 @@ pub(crate) fn spinner_style() -> ProgressStyle {
|
|||||||
.unwrap()
|
.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
|
/// 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
|
/// indented line below so long prefixes cannot push it out of the terminal
|
||||||
pub(crate) fn transfer_style() -> ProgressStyle {
|
pub(crate) fn transfer_style() -> ProgressStyle {
|
||||||
|
|||||||
Reference in New Issue
Block a user