-
Notifications
You must be signed in to change notification settings - Fork 276
MultiProgress:println doesn't behave correctly when no progress bars have been added yet #447
Copy link
Copy link
Open
Description
Try this render test:
#[test]
fn multi_progress_println_newline() {
let in_mem = InMemoryTerm::new(10, 10);
let mp =
MultiProgress::with_draw_target(ProgressDrawTarget::term_like(Box::new(in_mem.clone())));
mp.println("This line is tooooooo long for the terminal\r\n").unwrap();
mp.println("but it should wrap correctly\r\n").unwrap();
assert_eq!(in_mem.contents(), "This line\nis toooooo\no long for\n the termi\nnal\nbut it sho\nuld wrap c\norrectly");
}It fails like this:
---- multi_progress_println_newline stdout ----
thread 'multi_progress_println_newline' panicked at 'assertion failed: `(left == right)`
left: `"This line\nis toooooo\no long for\n the termi\nnalbut it\nshould wra\np correctl\ny"`,
right: `"This line\nis toooooo\no long for\n the termi\nnal\nbut it sho\nuld wrap c\norrectly"`', tests/render.rs:607:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
The issue is that the underlying DrawState::draw_to_term method assumes that the last line to be drawn doesn't contain a newline. This is true when progress bars are involved, but not true when just calling MultiProgress:println with no progress bars.
I think we need to add some extra logic to draw_to_term so that it behaves differently when no progress bars are present.
The workaround I am using right now is to just use MultiProgress::suspend and then use eprintln! inside that.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels