+++ /dev/null
-package be.nikiroo.utils.test_code;
-
-import be.nikiroo.utils.Progress;
-import be.nikiroo.utils.test.TestCase;
-import be.nikiroo.utils.test.TestLauncher;
-
-class ProgressTest extends TestLauncher {
- public ProgressTest(String[] args) {
- super("Progress reporting", args);
-
- addSeries(new TestLauncher("Simple progress", args) {
- {
- addTest(new TestCase("Relative values and direct values") {
- @Override
- public void test() throws Exception {
- Progress p = new Progress();
- assertEquals(0, p.getProgress());
- assertEquals(0, p.getRelativeProgress());
- p.setProgress(33);
- assertEquals(33, p.getProgress());
- assertEquals(0.33, p.getRelativeProgress());
- p.setMax(3);
- p.setProgress(1);
- assertEquals(1, p.getProgress());
- assertEquals(
- generateAssertMessage("0.33..",
- p.getRelativeProgress()), true,
- p.getRelativeProgress() >= 0.332);
- assertEquals(
- generateAssertMessage("0.33..",
- p.getRelativeProgress()), true,
- p.getRelativeProgress() <= 0.334);
- }
- });
-
- addTest(new TestCase("Listeners at first level") {
- int pg;
-
- @Override
- public void test() throws Exception {
- Progress p = new Progress();
- p.addProgressListener(new Progress.ProgressListener() {
- @Override
- public void progress(Progress progress, String name) {
- pg = progress.getProgress();
- }
- });
-
- p.setProgress(42);
- assertEquals(42, pg);
- p.setProgress(0);
- assertEquals(0, pg);
- }
- });
- }
- });
-
- addSeries(new TestLauncher("Progress with children", args) {
- {
- addTest(new TestCase("One child") {
- @Override
- public void test() throws Exception {
- Progress p = new Progress();
- Progress child = new Progress();
-
- p.addProgress(child, 100);
-
- child.setProgress(42);
- assertEquals(42, p.getProgress());
- }
- });
-
- addTest(new TestCase("Multiple children") {
- @Override
- public void test() throws Exception {
- Progress p = new Progress();
- Progress child1 = new Progress();
- Progress child2 = new Progress();
- Progress child3 = new Progress();
-
- p.addProgress(child1, 20);
- p.addProgress(child2, 60);
- p.addProgress(child3, 20);
-
- child1.setProgress(50);
- assertEquals(10, p.getProgress());
- child2.setProgress(100);
- assertEquals(70, p.getProgress());
- child3.setProgress(100);
- assertEquals(90, p.getProgress());
- child1.setProgress(100);
- assertEquals(100, p.getProgress());
- }
- });
-
- addTest(new TestCase("Listeners with children") {
- int pg;
-
- @Override
- public void test() throws Exception {
- final Progress p = new Progress();
- Progress child1 = new Progress();
- Progress child2 = new Progress();
- p.addProgress(child1, 50);
- p.addProgress(child2, 50);
-
- p.addProgressListener(new Progress.ProgressListener() {
- @Override
- public void progress(Progress progress, String name) {
- pg = p.getProgress();
- }
- });
-
- child1.setProgress(50);
- assertEquals(25, pg);
- child2.setProgress(100);
- assertEquals(75, pg);
- child1.setProgress(100);
- assertEquals(100, pg);
- }
- });
-
- addTest(new TestCase("Listeners with children, not 1-100") {
- int pg;
-
- @Override
- public void test() throws Exception {
- final Progress p = new Progress();
- p.setMax(1000);
-
- Progress child1 = new Progress();
- child1.setMax(2);
-
- Progress child2 = new Progress();
- p.addProgress(child1, 500);
- p.addProgress(child2, 500);
-
- p.addProgressListener(new Progress.ProgressListener() {
- @Override
- public void progress(Progress progress, String name) {
- pg = p.getProgress();
- }
- });
-
- child1.setProgress(1);
- assertEquals(250, pg);
- child2.setProgress(100);
- assertEquals(750, pg);
- child1.setProgress(2);
- assertEquals(1000, pg);
- }
- });
-
- addTest(new TestCase(
- "Listeners with children, not 1-100, local progress") {
- int pg;
-
- @Override
- public void test() throws Exception {
- final Progress p = new Progress();
- p.setMax(1000);
-
- Progress child1 = new Progress();
- child1.setMax(2);
-
- Progress child2 = new Progress();
- p.addProgress(child1, 400);
- p.addProgress(child2, 400);
- // 200 = local progress
-
- p.addProgressListener(new Progress.ProgressListener() {
- @Override
- public void progress(Progress progress, String name) {
- pg = p.getProgress();
- }
- });
-
- child1.setProgress(1);
- assertEquals(200, pg);
- child2.setProgress(100);
- assertEquals(600, pg);
- p.setProgress(100);
- assertEquals(700, pg);
- child1.setProgress(2);
- assertEquals(900, pg);
- p.setProgress(200);
- assertEquals(1000, pg);
- }
- });
-
- addTest(new TestCase("Listeners with 5+ children, 4+ depth") {
- int pg;
-
- @Override
- public void test() throws Exception {
- final Progress p = new Progress();
- Progress child1 = new Progress();
- Progress child2 = new Progress();
- p.addProgress(child1, 50);
- p.addProgress(child2, 50);
- Progress child11 = new Progress();
- child1.addProgress(child11, 100);
- Progress child111 = new Progress();
- child11.addProgress(child111, 100);
- Progress child1111 = new Progress();
- child111.addProgress(child1111, 20);
- Progress child1112 = new Progress();
- child111.addProgress(child1112, 20);
- Progress child1113 = new Progress();
- child111.addProgress(child1113, 20);
- Progress child1114 = new Progress();
- child111.addProgress(child1114, 20);
- Progress child1115 = new Progress();
- child111.addProgress(child1115, 20);
-
- p.addProgressListener(new Progress.ProgressListener() {
- @Override
- public void progress(Progress progress, String name) {
- pg = p.getProgress();
- }
- });
-
- child1111.setProgress(100);
- child1112.setProgress(50);
- child1113.setProgress(25);
- child1114.setProgress(25);
- child1115.setProgress(50);
- assertEquals(25, pg);
- child2.setProgress(100);
- assertEquals(75, pg);
- child1111.setProgress(100);
- child1112.setProgress(100);
- child1113.setProgress(100);
- child1114.setProgress(100);
- child1115.setProgress(100);
- assertEquals(100, pg);
- }
- });
-
- addTest(new TestCase("Listeners with children, multi-thread") {
- int pg;
- boolean decrease;
- Object lock1 = new Object();
- Object lock2 = new Object();
- int currentStep1;
- int currentStep2;
-
- @Override
- public void test() throws Exception {
- final Progress p = new Progress(0, 200);
-
- final Progress child1 = new Progress();
- final Progress child2 = new Progress();
- p.addProgress(child1, 100);
- p.addProgress(child2, 100);
-
- p.addProgressListener(new Progress.ProgressListener() {
- @Override
- public void progress(Progress progress, String name) {
- int now = p.getProgress();
- if (now < pg) {
- decrease = true;
- }
- pg = now;
- }
- });
-
- // Run 200 concurrent threads, 2 at a time allowed to
- // make progress (each on a different child)
- for (int i = 0; i <= 100; i++) {
- final int step = i;
- new Thread(new Runnable() {
- @Override
- public void run() {
- synchronized (lock1) {
- if (step > currentStep1) {
- currentStep1 = step;
- child1.setProgress(step);
- }
- }
- }
- }).start();
-
- new Thread(new Runnable() {
- @Override
- public void run() {
- synchronized (lock2) {
- if (step > currentStep2) {
- currentStep2 = step;
- child2.setProgress(step);
- }
- }
- }
- }).start();
- }
-
- int i;
- int timeout = 20; // in 1/10th of seconds
- for (i = 0; i < timeout
- && (currentStep1 + currentStep2) < 200; i++) {
- Thread.sleep(100);
- }
-
- assertEquals("The test froze at step " + currentStep1
- + " + " + currentStep2, true, i < timeout);
- assertEquals(
- "There should not have any decresing steps",
- decrease, false);
- assertEquals("The progress should have reached 200",
- 200, p.getProgress());
- assertEquals(
- "The progress should have reached completion",
- true, p.isDone());
- }
- });
- }
- });
- }
-}