package jalview.util.dialogrunner; import org.testng.Assert; import org.testng.annotations.Test; public class DialogRunnerTest { public class MockDialog implements DialogRunnerI { DialogRunner runner = new DialogRunner<>(this); @Override public MockDialog response(RunResponse action) { return runner.response(action); } public void doDialog(String resp) { runner.firstRun(resp); } } MockDialog dialog = new MockDialog(); @Test public void testDialogRunner() { RunResponse ok, cancel, help, ineed; final Response ooh = new Response("OOOOoooOOOOH!"), r_ok = new Response("OK"), r_cancel = new Response("CANCEL"), r_done = new Response("DONE"), r_help = new Response("HELP"), r_ddoit = new Response("DIDNT DOIT"), r_needsb = new Response("I NEED SOMEBODY"); ok = new RunResponse("OK") { @Override public void run() { returned = new Response("DONE"); } }; final RunResponse befok = new RunResponse("OK") { @Override public void run() { returned = new Response("OK"); } }; cancel = new RunResponse("CANCEL") { @Override public void run() { returned = r_ddoit; } }; help = new RunResponse("HELP") { @Override public void run() { returned = r_needsb; } }; ineed = new RunResponse(r_needsb) { @Override public void run() { returned = ooh; } }; Assert.assertFalse(dialog.runner.isRegistered(ok)); dialog.response(ok).response(cancel).response(help).response(ineed); Assert.assertTrue(dialog.runner.isRegistered(ok)); Assert.assertFalse(dialog.runner.firstRunWasCalled); dialog.doDialog("OK"); // OK called, nothing else. Assert.assertTrue(dialog.runner.firstRunWasCalled); Assert.assertTrue(ok.wasRun); Assert.assertEquals(ok.returned, r_done); Assert.assertFalse(cancel.wasRun); Assert.assertEquals(dialog.runner.responses.size(), 2); // do it again - check it doesn't trigger again ok.wasRun = false; dialog.doDialog("OK"); Assert.assertFalse(ok.wasRun); // reset - everything false/null dialog.runner.resetResponses(); Assert.assertFalse(dialog.runner.firstRunWasCalled); Assert.assertFalse(ok.wasRun); Assert.assertNull(ok.returned); Assert.assertEquals(dialog.runner.responses.size(), 0); // cancel called .. dialog.doDialog("HELP"); Assert.assertTrue(dialog.runner.firstRunWasCalled); Assert.assertFalse(ok.wasRun); Assert.assertEquals(ineed.returned, ooh); Assert.assertEquals(dialog.runner.responses.size(), 3); // TODO: test prepend and chained execution of tasks for a response. Assert.assertFalse(dialog.runner.isRegistered(befok)); dialog.runner.firstResponse(befok); Assert.assertTrue(dialog.runner.isRegistered(befok)); Assert.assertTrue(dialog.runner.isRegistered(ok)); dialog.runner.resetResponses(); dialog.doDialog("OK"); Assert.assertTrue(befok.wasRun); Assert.assertTrue(ok.wasRun); Assert.assertEquals(dialog.runner.responses.size(), 3); } }