Skip to content

Commit

Permalink
add render tests for #426
Browse files Browse the repository at this point in the history
  • Loading branch information
chris-laplante authored and djc committed Jun 13, 2022
1 parent 0f33289 commit af5d925
Showing 1 changed file with 241 additions and 0 deletions.
241 changes: 241 additions & 0 deletions tests/render.rs
Expand Up @@ -60,6 +60,84 @@ fn progress_bar_builder_method_order() {
);
}

#[test]
fn multi_progress_single_bar_and_leave() {
let in_mem = InMemoryTerm::new(10, 80);
let mp =
MultiProgress::with_draw_target(ProgressDrawTarget::term_like(Box::new(in_mem.clone())));

let pb1 = mp.add(ProgressBar::new(10).with_finish(ProgressFinish::AndLeave));

assert_eq!(in_mem.contents(), String::new());

pb1.tick();
assert_eq!(
in_mem.contents(),
r#"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10"#
);

drop(pb1);
assert_eq!(
in_mem.contents(),
r#"██████████████████████████████████████████████████████████████████████████ 10/10"#
);
}

#[test]
fn multi_progress_single_bar_and_clear() {
let in_mem = InMemoryTerm::new(10, 80);
let mp =
MultiProgress::with_draw_target(ProgressDrawTarget::term_like(Box::new(in_mem.clone())));

let pb1 = mp.add(ProgressBar::new(10));

assert_eq!(in_mem.contents(), String::new());

pb1.tick();
assert_eq!(
in_mem.contents(),
r#"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10"#
);

drop(pb1);
assert_eq!(in_mem.contents(), "");
}
#[test]
fn multi_progress_two_bars() {
let in_mem = InMemoryTerm::new(10, 80);
let mp =
MultiProgress::with_draw_target(ProgressDrawTarget::term_like(Box::new(in_mem.clone())));

let pb1 = mp.add(ProgressBar::new(10).with_finish(ProgressFinish::AndLeave));
let pb2 = mp.add(ProgressBar::new(5));

assert_eq!(in_mem.contents(), String::new());

pb1.tick();
assert_eq!(
in_mem.contents(),
r#"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10"#
);

pb2.tick();

assert_eq!(
in_mem.contents(),
r#"
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/5"#
.trim_start()
);

drop(pb1);
drop(pb2);

assert_eq!(
in_mem.contents(),
r#"██████████████████████████████████████████████████████████████████████████ 10/10"#
);
}

#[test]
fn multi_progress() {
let in_mem = InMemoryTerm::new(10, 80);
Expand Down Expand Up @@ -293,3 +371,166 @@ fn manually_inc_ticker() {
spinner.set_prefix("prefix");
assert_eq!(in_mem.contents(), "⠉ new message");
}

#[test]
fn multi_progress_prune_zombies() {
let in_mem = InMemoryTerm::new(10, 80);
let mp =
MultiProgress::with_draw_target(ProgressDrawTarget::term_like(Box::new(in_mem.clone())));

let pb0 = mp
.add(ProgressBar::new(10))
.with_finish(ProgressFinish::AndLeave);
let pb1 = mp.add(ProgressBar::new(15));
pb0.tick();
assert_eq!(
in_mem.contents(),
"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10"
);

pb0.inc(1);
assert_eq!(
in_mem.contents(),
"███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 1/10"
);

drop(pb0);

// Clear the screen
in_mem.reset();

// Write a line that we expect to remain. This helps ensure the adjustment to last_line_count is
// working as expected, and `MultiState` isn't erasing lines when it shouldn't.
in_mem.write_line("don't erase me plz").unwrap();

// pb0 is dead, so only pb1 should be drawn from now on
pb1.tick();
assert_eq!(
in_mem.contents(),
"don't erase me plz\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/15"
);
}

#[test]
fn multi_progress_prune_zombies_2() {
let in_mem = InMemoryTerm::new(10, 80);
let mp =
MultiProgress::with_draw_target(ProgressDrawTarget::term_like(Box::new(in_mem.clone())));

let pb1 = mp.add(ProgressBar::new(10).with_finish(ProgressFinish::AndLeave));
let pb2 = mp.add(ProgressBar::new(5));
let pb3 = mp
.add(ProgressBar::new(100))
.with_finish(ProgressFinish::Abandon);
let pb4 = mp
.add(ProgressBar::new(500))
.with_finish(ProgressFinish::AndLeave);
let pb5 = mp.add(ProgressBar::new(7));

assert_eq!(in_mem.contents(), String::new());

pb1.tick();
assert_eq!(
in_mem.contents(),
r#"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10"#
);

pb2.tick();

assert_eq!(
in_mem.contents(),
r#"
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/5"#
.trim_start()
);

pb3.tick();
assert_eq!(
in_mem.contents(),
r#"
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/5
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/100"#
.trim_start()
);

drop(pb1);
drop(pb2);
drop(pb3);

assert_eq!(
in_mem.contents(),
r#"
██████████████████████████████████████████████████████████████████████████ 10/10
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/100"#
.trim_start()
);

in_mem.reset();

// Another sacrificial line we expect shouldn't be touched
in_mem.write_line("don't erase plz").unwrap();

mp.println("Test friend :)").unwrap();
assert_eq!(
in_mem.contents(),
r#"
don't erase plz
Test friend :)"#
.trim_start()
);

pb4.tick();
assert_eq!(
in_mem.contents(),
r#"
don't erase plz
Test friend :)
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/500"#
.trim_start()
);

drop(pb4);

in_mem.reset();
pb5.tick();
assert_eq!(
in_mem.contents(),
"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/7"
);

mp.println("not your friend, buddy").unwrap();
assert_eq!(
in_mem.contents(),
r#"
not your friend, buddy
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/7"#
.trim_start()
);

pb5.inc(1);
assert_eq!(
in_mem.contents(),
r#"
not your friend, buddy
██████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 1/7"#
.trim_start()
);

in_mem.reset();
in_mem.write_line("don't erase me either").unwrap();

pb5.inc(1);
assert_eq!(
in_mem.contents(),
r#"
don't erase me either
█████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 2/7"#
.trim_start()
);

drop(pb5);

assert_eq!(in_mem.contents(), "don't erase me either");
}

0 comments on commit af5d925

Please sign in to comment.