JAL-3048 jalview.utils.dialogrunner.DialogRunner allows sequences of runnable methods...
[jalview.git] / test / jalview / util / dialogrunner / DialogRunnerTest.java
diff --git a/test/jalview/util/dialogrunner/DialogRunnerTest.java b/test/jalview/util/dialogrunner/DialogRunnerTest.java
new file mode 100644 (file)
index 0000000..e956124
--- /dev/null
@@ -0,0 +1,101 @@
+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);
+  }
+}