// Copyright © 2011-2013, Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0
package fi.jumi.launcher.ui;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
public class TextProgressBarTest {
private final TextProgressBar progressBar = new TextProgressBar("[", "==========", "]").setIndeterminate(false);
@Test
public void no_progress() {
progressBar.setProgress(0.0);
assertThat(progressBar.toString(), is("["));
}
@Test
public void full_progress() {
progressBar.setProgress(1.0);
progressBar.setComplete(true);
assertThat(progressBar.toString(), is("[==========]"));
}
@Test
public void partial_progress() {
progressBar.setProgress(0.1);
assertThat("10%", progressBar.toString(), is("[="));
progressBar.setProgress(0.5);
assertThat("50%", progressBar.toString(), is("[====="));
progressBar.setProgress(0.90);
assertThat("90%", progressBar.toString(), is("[========="));
progressBar.setProgress(0.99);
assertThat("99% rounded to look same as 100%", progressBar.toString(), is("[=========="));
}
// incremental mode
@Test
public void prints_incrementally_when_progress_increases() {
progressBar.setProgress(0.0);
assertThat("0% first printing", progressBar.toStringIncremental(), is("["));
progressBar.setProgress(0.0);
assertThat("0% second printing", progressBar.toStringIncremental(), is(""));
progressBar.setProgress(0.1);
assertThat("10% first printing", progressBar.toStringIncremental(), is("="));
}
@Test
public void incremental_mode_ignores_progress_getting_lower_temporarily() {
progressBar.setProgress(0.5);
assertThat("50%", progressBar.toStringIncremental(), is("[====="));
progressBar.setProgress(0.3);
assertThat("drop to 30%", progressBar.toStringIncremental(), is(""));
progressBar.setProgress(0.7);
assertThat("increase to 70%", progressBar.toStringIncremental(), is("=="));
}
@Test
public void resetting_incremental_mode_starts_printing_from_the_beginning() {
progressBar.setProgress(0.5);
assertThat("50% before reset", progressBar.toStringIncremental(), is("[====="));
progressBar.resetIncrementalPrinting();
assertThat("50% after reset", progressBar.toStringIncremental(), is("[====="));
}
// indeterminate mode
@Test
public void not_visible_in_indeterminate_mode_regardless_of_progress() {
progressBar.setProgress(0.5);
progressBar.setIndeterminate(true);
assertThat(progressBar.toString(), is(""));
}
// complete
@Test
public void does_not_print_the_end_until_marked_as_complete() {
progressBar.setProgress(1.0);
assertThat("100% but not complete", progressBar.toString(), is("[=========="));
progressBar.setComplete(true);
assertThat("100% and complete", progressBar.toString(), is("[==========]"));
}
@Test
public void leaves_empty_space_in_the_progress_bar_if_marked_complete_before_100_percent() {
progressBar.setProgress(0.8);
progressBar.setComplete(true);
// this might happen if the JVM crashes or there is some other problem
assertThat("80% but complete", progressBar.toString(), is("[======== ]"));
}
}