--- /dev/null
+package jalview.util.dialogrunner;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class DialogRunnerTest
+{
+ public class MockDialog implements DialogRunnerI
+ {
+ DialogRunner<MockDialog> 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");
+ }
+ };
+ 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;
+ }
+ };
+
+ dialog.response(ok).response(cancel).response(help).response(ineed);
+
+ 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);
+ }
+}